Ingress NGINX 的注解生态复杂,跨团队共享网关时权限边界模糊。Gateway API 用角色分离的 GatewayClass、Gateway、HTTPRoute 表达路由,适合平台团队统一管理入口。
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.2.0/standard-install.yaml
helm install eg oci://docker.io/envoyproxy/gateway-helm \
--version v1.2.0 \
--namespace envoy-gateway-system --create-namespace
kubectl apply -f - <<'EOF'
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: public
namespace: demo
spec:
gatewayClassName: eg
listeners:
- name: http
protocol: HTTP
port: 80
- name: https
protocol: HTTPS
port: 443
tls:
mode: Terminate
certificateRefs:
- name: demo-tls
EOF
kubectl apply -f - <<'EOF'
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: demo
namespace: demo
spec:
parentRefs:
- name: public
hostnames:
- demo.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /api
backendRefs:
- name: api
port: 8080
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: web
port: 80
EOF
rewrite-target 对应 URLRewrite 过滤器。canary 对应权重或 Header 匹配。proxy-body-size、超时和限流对应实现侧的 ClientTrafficPolicy/BackendTrafficPolicy。auth-url 对应 ExtAuth 或外部认证过滤器。curl --resolve 或临时 hosts 验证,不要先改 DNS:curl -k --resolve demo.example.com:443:$GW_IP https://demo.example.com/api/health
certificateRefs 解析失败。allowedRoutes 限制命名空间。parentRefs 指向错误命名空间的 Gateway。kubectl — 管理 GatewayClass、Gateway、HTTPRoutecurl — 按 host 验证路由openssl — 检查 TLS 证书istioctl / egctl — 网关诊断dig — 检查 DNS 切换