为四层路由应用插件
L4RoutePolicy 用于将 APISIX Stream 插件挂载到 Gateway API TCP、UDP 和 TLS 路由。本指南将为一条 TCPRoute 应用 IP 访问限制,并验证该策略能够阻止连接。
产品可用性
L4RoutePolicy 可用于 APISIX Ingress Controller 2.2。API7 Ingress Controller 尚未发布包含此资源的版本或 Helm Chart。
前置条件
- 使用 Gateway API 页签完成按端口代理 TCP 流量。该示例会在
aic命名空间中创建stream-route-mysqlTCPRoute。 - 应用策略前,确认能够连接到 MySQL 后端。
应用 Stream 插件
创建一个 L4RoutePolicy,将 ip-restriction Stream 插件挂载到 stream-route-mysql。以下示例中的黑名单会阻止所有 IPv4 客户端地址:
l4-route-policy.yaml
apiVersion: apisix.apache.org/v1alpha1
kind: L4RoutePolicy
metadata:
name: block-mysql-connections
namespace: aic
spec:
targetRefs:
- group: gateway.networking.k8s.io
kind: TCPRoute
name: stream-route-mysql
plugins:
- name: ip-restriction
config:
blacklist:
- 0.0.0.0/0
应用策略:
kubectl apply -f l4-route-policy.yaml
验证策略
检查策略状态:
kubectl get l4routepolicy block-mysql-connections -n aic \
-o jsonpath='{range .status.ancestors[*].conditions[*]}{.type}{"="}{.status}{" ("}{.reason}{")\n"}{end}'
已接受的策略应报告:
Accepted=True (Accepted)
再次尝试连接 MySQL:
mysqlsh --sqlc --host=127.0.0.1 --port=9100 --user=root --password
由于插件会拒绝客户端地址,连接应当失败。
删除策略,并确认连接恢复成功:
kubectl delete l4routepolicy block-mysql-connections -n aic
策略挂载规则
- 策略可以指向与其位于同一命名空间的
TCPRoute、UDPRoute或TLSRoute资源。 targetRefs必须使用gateway.networking.k8s.io组。一条策略可以包含 1 至 16 个目标引用。- 四层路由不公开可寻址的区段。包含
sectionName的目标引用不会挂载。 - 仅 APISIX Stream 插件有效,例如
ip-restriction或limit-conn;仅支持 HTTP 的插件无法在四层路由上运行。 - 多条策略指向同一路由时,应用最早创建的策略。后续策略会报告
Accepted=False,原因为Conflicted。