本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
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
变为validation
tls.caCertRefs
变为validation.caCertificateRefs
tls.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