随着Kubernetes在管理微服务方面成为核心组件,有效的流量管理变得至关重要。Gateway API被设计为比传统Ingress API更灵活、更强大的解决方案,增强了Kubernetes在流量管理上的能力。本文将探讨Gateway API的优点、组成部分、实际应用案例以及在生产环境中的最佳实践。
略
1. 什么是网关API接口?Gateway API 在 Kubernetes 中引入了一种新的流量管理方法,旨在克服 Ingress 局限性。通过提供更灵活和可扩展的架构,它支持多租户和高级路由需求,并能与 Istio 等服务网格无缝对接。
网关API的关键部分- GatewayClass : 定义网关类的模板,通常由基础设施提供商设置。
- Gateway : 表示流量入口点,将监听器(如HTTP或HTTPS协议)与定义的路由连接起来。
- 路由(HTTPRoute、TCPRoute、TLSRoute、UDPRoute) : 根据协议类型指定路由规则,并允许基于路径、头部以及加权的高级配置。
- 策略 : 允许管理员在不同路由和集群上应用策略(如安全性和速率限制),增强控制并提高安全性。
此处省略
2.: Ingress 和 Gateway API 之间有哪些主要的不同特性 | Ingress | Gateway API |
---|---|---|
灵活性 | 有限 | 非常灵活 |
协议支持 | 主要支持 HTTP 和 HTTPS | HTTP, TCP, UDP, TLS |
可扩展性 | 基本(注解) | 分层扩展,通过路由和类实现 |
资源隔离 | 有限 | 极佳 |
高级路由 | 有限 | 功能强大的支持 |
多租户 | 基本 | 强大支持, |
GatewayClass 和网关
网关类是由管理员创建的,它作为一个模板来设置网关。
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和策略规则的高级路由配置
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的访问权限,在路由层面直接增加了一层安全。
-
- *(星号表示省略或继续)
场景1:多租户应用的路由配置
在多团队环境中,每个团队的路由隔离至关重要。Gateway API 的多租户支持使得每个团队都可以管理各自的网关和路由。
- 问题:小组需要独立的流量管理,互不影响。
- 解决方案:为每个小组定义独立的网关和路由,允许为每个团队设置特定的访问控制或速率限制策略。
场景 2:从 Ingress 迁移到 Gateway API 的迁移
从 Ingress 切换到 Gateway API 可以使组织能够采用更高级的路由和流量管理技术。
- 问题:当前的 Ingress 配置对于复杂的路由需求来说功能有限。
-
解决方案:采用分阶段的迁移,从混合设置起步,让 Ingress 和 Gateway API 资源同时存在。可以使用工具如
kube-migrator
或是编写自定义脚本来帮助转换 Ingress 到 Gateway 配置。 -
- *
网关 API 设计用于跨各种云平台进行扩展,并支持与服务网格集成。许多服务网格,如 Istio 和 Linkerd ,与 Gateway API 兼容,从而增强了流量控制。
示例:Istio 整合
使用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)定义了网络通信的入口点,其元数据(metadata)字段包括网关名称,规范(spec)定义了网关的行为,监听器(listeners)配置了网关监听的协议、端口和TLS终止设置,TLS配置(tls)指定了证书引用(certificateRefs)以确保安全的HTTPS连接。
点击全屏,点击退出全屏
通过利用服务网格和Gateway API,组织可以实现这些高级路由策略、安全策略和可观测性特性。
6. 生产中的最佳实践
多租户模式以及分层政策
为不同的团队或应用使用不同的网关,并通过网关组或路由设定分层规则来管理安全和访问权限。
监控和可观测性
监控工具如 Prometheus 和 Grafana 对跟踪网关的性能和成功率至关重要。为网关和路由配置集中日志记录有助于提高可观察性。
安全和 TLS 终止
在网关集中处理 TLS 会话可以简化证书管理,提升安全性和整个应用系统的 HTTPS 应用。
7. 网关 API 流量的可视化
为了更直观地展示组件之间的交互:
- GatewayClass 定义模板架构。
- Gateway 监听流量并根据协议来定向流量。
- HTTPRoute 将流量路由到后端服务。
此图展示了流量如何从GatewayClass流向Gateway和Routes,引导请求到后端服务。
8. 结束一些总结
Gateway API 代表了 Kubernetes 流量管理的一大进步,其先进的路由能力、多租户支持以及与服务网格的扩展兼容性使其成为现代应用的强大工具。
此更新的 API 是处理复杂架构的理想选择,这些架构需要具备可扩展性、灵活性和高级安全性。通过分阶段的迁移策略、政策和最佳实践,Gateway API 可以成为您 Kubernetes 环境里流量管理的基石。