使用 Kubernetes 中的 Gateway API 进行现代流量管理
随着 Kubernetes 成为管理微服务的核心组件,有效的流量管理变得至关重要。Gateway API 旨在作为传统 Ingress API 的更灵活、更强大的替代方案,增强了 Kubernetes 的流量管理功能。在本文中,我们将探讨 Gateway API 的优势、其组件、实际用例以及生产环境的最佳实践。
1.什么是网关API?
Gateway API 为 Kubernetes 中的流量管理引入了一种新的方法,旨在克服 Ingress 的局限性。通过提供更灵活、更可扩展的架构,它支持多租户、高级路由需求以及与 Istio 等服务网格的无缝集成。
网关 API 的关键组件
- GatewayClass:定义网关的模板,通常由基础设施提供商设置。
- 网关:表示流量入口点,将监听器(如 HTTP 或 HTTPS 等协议)连接到定义的路由。
- 路由(HTTPRoute、TCPRoute、TLSRoute、UDPRoute):根据协议类型指定路由规则,并允许基于路径、基于标头和加权路由等高级配置。
- 策略:使管理员能够跨不同的路由和集群应用策略(例如安全性和速率限制),从而增强控制和安全性。
2. Ingress 和 Gateway API 之间的主要区别
特征 | 入口 | 网关 API |
---|---|---|
灵活性 | 有限的 | 高度灵活 |
协议支持 | 主要使用 HTTP/HTTPS | HTTP、TCP、UDP、TLS |
可扩展性 | 基础(注释) | 分层,使用路由和类 |
资源隔离 | 有限的 | 出色的 |
高级路由 | 有限的 | 强大的支持 |
多租户 | 基本的 | 强力支持 |
3. 扩展组件概述并附示例
GatewayClass 和 Gateway
GatewayClass由管理员创建,作为设置网关的蓝图。
apiVersion: gateway.networking.k8s.io/v1beta1
kind: GatewayClass
metadata:
name: my-gateway-class
spec:
controllerName: example.com/gateway-controller
网关使用GatewayClass设置流量的特定入口点:
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
name: my-gateway
spec:
gatewayClassName: my-gateway-class
listeners:
- name: http
protocol: HTTP
port: 80
routes:
kind: HTTPRoute
使用 HTTPRoute 和策略进行高级路由
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
策略和访问控制
Gateway 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 的访问,直接在路由级别添加一层安全性。
4. 实际用例
场景 1:多租户应用程序路由
在多团队环境中,按团队隔离路由至关重要。Gateway API 对多租户的支持允许每个团队管理自己的网关和路由。
- 问题:团队需要独立的交通控制,而不能互相干扰。
- 解决方案:为每个团队定义单独的网关和路线,允许对访问控制或速率限制制定特定的策略。
场景 2:从 Ingress 迁移到 Gateway API
从 Ingress 过渡到 Gateway API 使组织能够采用高级路由和流量管理。
- 问题:当前的 Ingress 配置无法满足复杂的路由需求。
- 解决方案:采用分阶段迁移,首先采用 Ingress 和 Gateway API 资源共存的混合设置。类似工具
kube-migrator
或自定义脚本可以帮助将 Ingress 配置转换为 Gateway 配置。
5.可扩展性和服务网格兼容性
Gateway API 旨在跨各种云平台扩展,并支持与服务网格集成。许多服务网格(例如Istio和Linkerd)都提供与 Gateway API 的兼容性,从而增强了流量管控。
示例:Istio 集成
下面的示例使用 Gateway API 设置 Istio Gateway:
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
通过利用带有网关 API 的服务网格,组织可以实现高级路由、安全策略和可观察性功能。
6. 生产最佳实践
多租户和分层策略
为不同的团队或应用程序使用不同的网关,通过 GatewayClasses 或 Routes 设置分层策略来管理安全性和访问控制。
监控和可观察性
Prometheus和Grafana等监控工具对于追踪网关性能和成功率至关重要。为网关和路由配置集中式日志记录有助于提高可观察性。
安全和 TLS 终止
在网关处集中 TLS 终止简化了证书管理,提高了跨应用程序的安全性和 HTTPS 执行。
7. 可视化网关 API 流量
要可视化组件交互:
- GatewayClass定义模板。
- 网关监听流量并根据协议引导流量。
- HTTPRoute将流量路由到后端服务。
该图说明了流量如何从 GatewayClass 流向 Gateway 和 Routes,从而将请求引导至后端服务。
8. 结论
Gateway API 代表着 Kubernetes 流量管理的重大进步。其先进的路由功能、多租户支持以及服务网格的可扩展性使其成为现代应用程序的强大解决方案。
对于需要可扩展性、灵活性和高级安全性的复杂架构,此更新的 API 是理想之选。通过分阶段的迁移策略、策略和最佳实践,Gateway API 可以成为 Kubernetes 环境中流量管理的支柱。
鏂囩珷鏉ユ簮锛�https://dev.to/alialp/modern-traffic-management-with-gateway-api-in-kubernetes-19dp