K8s 集群使用 Gateway API 和 Traefik k8s gateway api traefik overview Kubernetes Gateway API Traefik 云原生 后端
705 字
4 分钟
K8s 集群使用 Gateway API 和 Traefik

先说结论#

我现在的默认策略

  • 新服务直接用 Gateway API
  • 网关实现优先 Traefik
  • 老服务按窗口从 Ingress 分批迁移

这不是追新 这是为了降低后续治理成本


为什么 Ingress 在规模上会吃力#

单服务阶段 Ingress 很顺手 服务和团队变多以后会出现几个问题

  • 入口能力和业务路由耦合太紧
  • 大量依赖控制器私有注解 可移植性一般
  • 多团队协作时权限边界不够清楚

结果就是入口层越来越难改 一次小改动也可能影响大范围流量


Gateway API 解决的核心问题#

Gateway API 不只是对象更多 核心是职责拆分更清楚

对象谁负责作用
GatewayClass平台团队定义网关实现
Gateway平台团队定义入口监听和 TLS
HTTPRoute TCPRoute业务团队定义业务路由
ReferenceGrant平台团队控制跨命名空间授权

这种拆分在生产里很实用

  1. 平台和业务边界明确
  2. 路由治理能力更强
  3. 变更审计更清晰

为什么我选 Traefik#

我关注的是落地效率和长期维护 Traefik 在这两个点都比较均衡

  • K8s 生态集成成熟
  • Gateway API 支持稳定
  • 中间件能力够用 限流 重试 Header 处理都好用
  • 观测链路接入简单

如果团队没有强绑定其他网关栈 Traefik 是一个稳妥选择


最小可运行方案#

1 安装 Gateway API CRD#

Terminal window
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.1.0/standard-install.yaml

2 安装 Traefik 并开启 Gateway Provider#

Terminal window
helm repo add traefik https://traefik.github.io/charts
helm repo update
helm upgrade --install traefik traefik/traefik \
-n traefik --create-namespace \
--set service.type=LoadBalancer \
--set providers.kubernetesGateway.enabled=true

3 创建 Gateway#

apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: gw-public
namespace: infra-gateway
spec:
gatewayClassName: traefik
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Selector
selector:
matchLabels:
gateway-access: "true"

4 业务服务接入 HTTPRoute#

apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: app-route
namespace: app
spec:
parentRefs:
- name: gw-public
namespace: infra-gateway
hostnames:
- api.example.com
rules:
- matches:
- path:
type: PathPrefix
value: /v1
backendRefs:
- name: app-svc
port: 8080

迁移时最常见的坑#

  • allowedRoutes 过宽或过窄 导致失控或挂不上
  • 跨命名空间引用缺少 ReferenceGrant
  • 证书 Secret 在错误命名空间
  • 灰度阶段缺监控 误判问题位置
  • 直接硬切 没有并行窗口
WARNING

入口层迁移不要一把梭 先并行 再灰度 最后收敛


我推荐的迁移路径#

  1. 并行期
    • Ingress 和 Gateway API 同时在线
  2. 试点期
    • 低风险服务先迁
  3. 灰度期
    • 核心服务按权重切流
  4. 收敛期
    • 指标稳定后下线旧规则

结尾#

如果你现在还是小规模集群 继续用 Ingress 没问题

如果你已经进入多团队和高频变更阶段 建议尽早切到 Gateway API

我的建议还是这句

新服务直接 Gateway API 老服务分批迁移 Traefik 做统一入口承接

K8s 集群使用 Gateway API 和 Traefik
https://bangwu.top/posts/k8s-gateway-api-traefik-overview/
作者
棒无
发布于
2026-02-27
许可协议
CC BY-NC-SA 4.0