🏆 Kubernetes流量控制的演进:从Ingress到Gateway API,再到Traefik CRD

本文将以博客形式总结当今集群流量控制的三种核心方式。通过利用开源的Traefik,您可以同时使用Kubernetes原生功能Ingress和Gateway,以及Traefik的CRD IngressRoute功能。在这里,我们将详细探讨如何为这些功能编写YAML文件。


1. 🏛️ 经典之力:Kubernetes原生Ingress

自Kubernetes早期以来一直充当流量网关的Ingress是最熟悉且经过验证的方法。它是L7负载均衡的标准规范。

  • 工作原理:Ingress资源定义规则,实际处理由Nginx或Traefik等控制器负责。
  • 优点:配置非常简单,几乎在所有云环境中都作为标准运行。
  • 局限性:要实现复杂的路由(如金丝雀发布、镜像等),必须依赖于各供应商碎片化的Annotations,这会严重降低配置的可读性。

📝 Ingress Manifest 示例

YAML

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: native-ingress
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
  - host: app.juhun.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: app-service
            port:
              number: 80

2. 🚀 下一代标准:Kubernetes原生Gateway API

为克服Ingress的局限性而出现的Gateway API,其核心是面向角色的设计。对于设计大规模基础设施的工程师来说,这种标准化的结构是一个巨大的福音。

  • 角色分离:可以明确分离基础设施管理员(GatewayClass, Gateway)和服务开发人员(HTTPRoute)的权限。
  • 标准化高级功能:无需Annotations即可支持流量加权分配、头部操作等标准规范。
  • 灵活性:能够实现从L4(TCP/UDP)到L7的统一控制,扩展性极强。

📝 Gateway API (HTTPRoute) 示例

YAML

apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
  name: app-gateway-route
spec:
  parentRefs:
  - name: my-gateway
  rules:
  - matches:
    - path: { type: PathPrefix, value: /api }
    backendRefs:
    - name: api-service-v1
      port: 80
      weight: 90
    - name: api-service-v2 # 金丝雀部署
      port: 80
      weight: 10

3. 🎨 优化精髓:Traefik CRD (IngressRoute)

标准固然好,但当您希望充分发挥特定解决方案的100%性能时,我们会选择

CRD(Custom Resource Definition)

。Traefik的IngressRoute尤其同时提供了“直观性”和“强大功能”。

  • 中间件链:可以将认证、速率限制、错误页面处理等创建为中间件对象并自由组合。
  • Kubernetes Native:在沿用Kubernetes风格语法的同时,它比标准Ingress能够实现更精细的流量控制。
  • 安全优化:TLS配置和认证处理非常直观,使其成为构建专业安全基础设施的最佳选择。

📝 Traefik IngressRoute 示例

YAML

apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
  name: traefik-crd-route
spec:
  entryPoints:
    - websecure
  routes:
  - match: Host(`juhun-lab.com`) && PathPrefix(`/admin`)
    kind: Rule
    services:
    - name: admin-service
      port: 80
    middlewares:
    - name: ip-whitelist # 应用安全中间件

🧐 最终比较指南

类别 Ingress Gateway API Traefik CRD
推荐对象 简单的Web服务部署 基于多租户的大型集群 希望充分利用Traefik功能时
复杂性 低(易于上手) 高(彻底的角色分离) 中(直观的CRD结构)
灵活性 有限(依赖于Annotations) 非常高(标准规范) 高(利用中间件)

💡 总结

您可能已经意识到,技术的选择并非“哪个更好”,而是“哪个更适合特定环境”的问题。正如您与11月出生的最小的孩子共度的宝贵时光一样,我们也希望通过这三种工具,我们的集群能够得到更健壮、更平静的管理。


Comments

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注