本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
Gateway API v1.1:服务网格、GRPCRoute 以及更多
继去年十月 Gateway API 的 GA 版本发布之后,Kubernetes SIG Network 很高兴地宣布 Gateway API 的 v1.1 版本发布。在此版本中,有几个功能升级到 Standard Channel (GA),其中最引人注目的是对服务网格和 GRPCRoute 的支持。我们还引入了一些新的实验性功能,包括会话持久性和客户端证书验证。
新增内容
毕业至 Standard Channel
此版本包括四个备受期待的功能毕业至 Standard Channel。这意味着它们不再是实验性的概念;被纳入 Standard 发布渠道表明对 API 接口的高度信心,并提供向后兼容性的保证。当然,与任何其他 Kubernetes API 一样,Standard Channel 的功能可以随着时间的推移,通过向后兼容的增补继续演进,我们当然期望这些新功能在未来会有进一步的完善和改进。有关此工作原理的更多信息,请参阅 Gateway API 版本控制策略。
服务网格支持
Gateway API 中的服务网格支持允许服务网格用户使用相同的 API 来管理入口流量和网格内流量,复用相同的策略和路由接口。在 Gateway API v1.1 中,路由(例如 HTTPRoute)现在可以有一个 Service 作为 parentRef,以控制到特定服务的流量行为。更多信息请阅读 Gateway API 服务网格文档或查看 Gateway API 实现列表。
举个例子,可以在应用程序调用图的深处使用 HTTPRoute 进行工作负载的金丝雀部署,如下所示:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: color-canary
namespace: faces
spec:
parentRefs:
- name: color
kind: Service
group: ""
port: 80
rules:
- backendRefs:
- name: color
port: 80
weight: 50
- name: color2
port: 80
weight: 50
这将把发送到 faces 命名空间中 color 服务的流量在原始的 color 服务和 color2 服务之间进行 50/50 的分割,使用一种可移植的配置,很容易从一个网格迁移到另一个网格。
GRPCRoute
如果你已经在使用实验版本的 GRPCRoute,我们建议在你所使用的控制器更新以支持 GRPCRoute v1 之前,暂缓升级到 GRPCRoute 的 Standard Channel 版本。在此之前,升级到 v1.1 中包含 v1alpha2 和 v1 API 版本的 GRPCRoute 实验性渠道版本是安全的。
ParentReference Port
port 字段已添加到 ParentReference 中,允许你将资源附加到 Gateway Listener、Service 或其他父资源(取决于实现)。绑定到端口还允许你一次附加到多个 Listener。
例如,你可以将一个 HTTPRoute 附加到一个或多个由 Listener port 指定的 Gateway 的特定 Listener 上,而不是使用 Listener 的 name 字段。
更多信息,请参见附加到网关。
一致性配置文件和报告
一致性报告 API 已通过 mode 字段(用于指定实现的工件模式)和 gatewayAPIChannel(standard 或 experimental)进行了扩展。gatewayAPIVersion 和 gatewayAPIChannel 现在由套件机制自动填充,并附有测试结果的简要描述。报告已以更结构化的方式重新组织,并且实现现在可以添加有关测试运行方式的信息并提供复现步骤。
Experimental Channel 的新增内容
网关客户端证书验证
通过在 tls 中引入一个新的 frontendValidation 字段,网关现在可以为每个 Gateway Listener 配置客户端证书验证。该字段支持配置一个 CA 证书列表,可用作信任锚来验证客户端提供的证书。
以下示例展示了如何使用存储在 foo-example-com-ca-cert ConfigMap 中的 CA 证书来验证连接到 foo-https Gateway Listener 的客户端所提供的证书。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: client-validation-basic
spec:
gatewayClassName: acme-lb
listeners:
- name: foo-https
protocol: HTTPS
port: 443
hostname: foo.example.com
tls:
certificateRefs:
- kind: Secret
group: ""
name: foo-example-com-cert
frontendValidation:
caCertificateRefs:
- kind: ConfigMap
group: ""
name: foo-example-com-ca-cert
会话持久性与 BackendLBPolicy
会话持久性正通过一个新的策略(BackendLBPolicy)引入 Gateway API,用于服务级别的配置,并作为 HTTPRoute 和 GRPCRoute 中的字段,用于路由级别的配置。BackendLBPolicy 和路由级别的 API 提供了相同的会话持久性配置,包括会话超时、会话名称、会话类型和 Cookie 的生命周期类型。
下面是一个 BackendLBPolicy 的配置示例,它为 foo 服务启用了基于 Cookie 的会话持久性。它将话名称设置为 foo-session,定义了绝对超时和空闲超时,并将 Cookie 配置为会话 Cookie。
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: BackendLBPolicy
metadata:
name: lb-policy
namespace: foo-ns
spec:
targetRefs:
- group: core
kind: service
name: foo
sessionPersistence:
sessionName: foo-session
absoluteTimeout: 1h
idleTimeout: 30m
type: Cookie
cookieConfig:
lifetimeType: Session
其他所有内容
TLS 术语澄清
作为使我们的 TLS 术语在整个 API 中更加一致这一更广泛目标的一部分,我们对 BackendTLSPolicy 引入了一些破坏性变更。这导致了新的 API 版本(v1alpha3),并要求此策略的任何现有实现正确处理版本升级,例如,通过备份数据并在安装此较新版本之前卸载 v1alpha2 版本。
任何对 v1alpha2 BackendTLSPolicy 字段的引用都需要更新到 v1alpha3。字段的具体更改包括:
targetRef变为targetRefs,以允许一个 BackendTLSPolicy 附加到多个目标。tls变为validationtls.caCertRefs变为validation.caCertificateRefstls.wellKnownCACerts变为validation.wellKnownCACertificates
有关此版本中包含的更改的完整列表,请参阅 v1.1.0 发行说明。
Gateway API 背景
Gateway API 的想法最初是在 2019 年圣地亚哥 KubeCon 上作为下一代 Ingress API 提出的。从那时起,一个令人难以置信的社区已经形成,共同开发了可能是 Kubernetes 历史上最具协作性的 API。到目前为止,已有 200 多人为此 API 做出了贡献,而且这个数字还在继续增长。
维护者们要感谢为 Gateway API 做出贡献的*每一个人*,无论是通过向仓库提交代码、参与讨论、提出想法,还是一般的支持。没有这个专注而活跃的社区的支持,我们真的不可能走到今天。
立即试用
与其他 Kubernetes API 不同,你无需升级到最新版本的 Kubernetes 即可获得最新版本的 Gateway API。只要你运行的是 Kubernetes 1.26 或更高版本,你就能使用此版本的 Gateway API。
要试用该 API,请遵循我们的入门指南。
参与其中
我们有很多机会参与进来,帮助定义 Kubernetes 入口和服务网格路由 API 的未来。
- 查看用户指南,了解可以解决哪些用例。
- 试用现有的 Gateway 控制器之一。
- 或者加入我们的社区,帮助我们共同构建 Gateway API 的未来!
相关 Kubernetes 博客文章
- Gateway API v1.0 中的新实验性功能 11/2023
- Gateway API v1.0: GA 版本 10/2023
- 介绍 ingress2gateway;简化到 Gateway API 的升级 10/2023
- Gateway API v0.8.0:引入服务网格支持 08/2023