本文将以博客形式总结当今集群流量控制的三种核心方式。通过利用开源的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月出生的最小的孩子共度的宝贵时光一样,我们也希望通过这三种工具,我们的集群能够得到更健壮、更平静的管理。
发表回复