随着Kubernetes在管理微服务方面成为核心组件,有效的流量管理变得至关重要。Gateway API被设计为比传统Ingress API更灵活、更强大的解决方案,增强了Kubernetes在流量管理上的能力。本文将探讨Gateway API的优点、组成部分、实际应用案例以及在生产环境中的最佳实践。
略
1. 什么是网关API接口?Gateway API 在 Kubernetes 中引入了一种新的流量管理方法,旨在克服 Ingress 局限性。通过提供更灵活和可扩展的架构,它支持多租户和高级路由需求,并能与 Istio 等服务网格无缝对接。
此处省略
特性 | Ingress | Gateway API |
---|---|---|
灵活性 | 有限 | 非常灵活 |
协议支持 | 主要支持 HTTP 和 HTTPS | HTTP, TCP, UDP, TLS |
可扩展性 | 基本(注解) | 分层扩展,通过路由和类实现 |
资源隔离 | 有限 | 极佳 |
高级路由 | 有限 | 功能强大的支持 |
多租户 | 基本 | 强大支持, |
网关类是由管理员创建的,它作为一个模板来设置网关。
apiVersion: gateway.networking.k8s.io/v1beta1 kind: GatewayClass metadata: name: my-gateway-class spec: controllerName: example.com/gateway-controller
进入全屏 退出全屏
一个 Gateway(网关)通过 GatewayClass 来设置特定的流量入口点。
apiVersion: api版本 kind: 类型 metadata: name: 名称 spec: gatewayClassName: 网关类名称 listeners: - name: 名称 protocol: 协议 port: 端口 routes: kind: 路由
注:这里的翻译保持了原配置文件的结构,并将字段名称翻译成了符合中文Kubernetes文档标准的术语。字段值保持英文原样,以确保配置文件的有效性。
全屏/退出全屏
HTTPRoute 允许进行精细的路由控制,如基于路径的路由示例所示。
apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: my-app-route spec: parentRefs: - name: my-gateway rules: - matches: - path: type: PathPrefix value: /app backendRefs: - name: my-service port: 8080
全屏模式(进入/退出)
加权路由可以控制流量的分布,这对于金丝雀测试和蓝绿部署策略来说非常重要。
rules: - matches: - path: type: PathPrefix value: /service backendRefs: - name: service-v1 port: 8080 weight: 80 - name: service-v2 port: 8080 weight: 20
以下是服务路由规则配置。它定义了路径前缀为 /service 的请求将匹配到哪个后端服务,以及这些服务的权重。
进入全屏,退出全屏
网关 API 中的策略有助于确保安全和访问控制。例如,HTTPRoutePolicy
可以限制特定 IP 的访问或实施速率限制。
apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoutePolicy metadata: name: allow-list-policy spec: targetRef: kind: HTTPRoute name: my-app-route rules: - allowedIPs: - 192.168.1.1 - 10.0.0.0/24
全屏,退出全屏
此政策限制特定IP的访问权限,在路由层面直接增加了一层安全。
在多团队环境中,每个团队的路由隔离至关重要。Gateway API 的多租户支持使得每个团队都可以管理各自的网关和路由。
从 Ingress 切换到 Gateway API 可以使组织能够采用更高级的路由和流量管理技术。
解决方案:采用分阶段的迁移,从混合设置起步,让 Ingress 和 Gateway API 资源同时存在。可以使用工具如 kube-migrator
或是编写自定义脚本来帮助转换 Ingress 到 Gateway 配置。
网关 API 设计用于跨各种云平台进行扩展,并支持与服务网格集成。许多服务网格,如 Istio 和 Linkerd ,与 Gateway API 兼容,从而增强了流量控制。
使用Gateway API设置Istio Gateway的例子如下:
# 这是一个示例 Istio 网关配置,用于设置 HTTPS 监听器和终止 TLS 会话。 apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: name: istio-gateway spec: gatewayClassName: istio listeners: - name: https protocol: HTTPS port: 443 tls: mode: Terminate certificateRefs: - name: istio-cert
点击全屏,点击退出全屏
通过利用服务网格和Gateway API,组织可以实现这些高级路由策略、安全策略和可观测性特性。
为不同的团队或应用使用不同的网关,并通过网关组或路由设定分层规则来管理安全和访问权限。
监控工具如 Prometheus 和 Grafana 对跟踪网关的性能和成功率至关重要。为网关和路由配置集中日志记录有助于提高可观察性。
在网关集中处理 TLS 会话可以简化证书管理,提升安全性和整个应用系统的 HTTPS 应用。
为了更直观地展示组件之间的交互:
此图展示了流量如何从GatewayClass流向Gateway和Routes,引导请求到后端服务。
Gateway API 代表了 Kubernetes 流量管理的一大进步,其先进的路由能力、多租户支持以及与服务网格的扩展兼容性使其成为现代应用的强大工具。
此更新的 API 是处理复杂架构的理想选择,这些架构需要具备可扩展性、灵活性和高级安全性。通过分阶段的迁移策略、政策和最佳实践,Gateway API 可以成为您 Kubernetes 环境里流量管理的基石。