Gateway API v1.1:服务网格、GRPCRoute 以及更多
继去年 10 月 Gateway API 正式发布后,Kubernetes SIG Network 很高兴地宣布 Gateway API 的 v1.1 版本发布。在此版本中,一些功能升级到标准通道(GA),特别是包括对服务网格和 GRPCRoute 的支持。我们还引入了一些新的实验性功能,包括会话持久性和客户端证书验证。
新增功能
升级到标准
此版本包括将四个期待已久的功能升级到标准。这意味着它们不再是实验性概念;包含在标准发布通道中表示对 API 表面的高度信任,并提供向后兼容性的保证。当然,与任何其他 Kubernetes API 一样,标准通道功能可以随着时间的推移继续进行向后兼容的添加而发展,而且我们当然希望在未来对这些新功能进行进一步的改进和完善。有关这一切如何工作的更多信息,请参阅 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 的标准通道版本。在此之前,可以安全地升级到 v1.1 中包含 v1alpha2 和 v1 API 版本的 GRPCRoute 的实验通道版本。
ParentReference 端口
port
字段已添加到 ParentReference 中,允许您将资源附加到 Gateway 侦听器、服务或其他父资源(取决于实现)。绑定到端口还允许您一次附加到多个侦听器。
例如,您可以根据侦听器 port
指定,而不是侦听器 name
字段,将 HTTPRoute 附加到一个或多个 Gateway 的特定侦听器。
有关更多信息,请参阅 附加到网关。
一致性配置文件和报告
一致性报告 API 已使用 mode
字段(旨在指定实现的工作模式)和 gatewayAPIChannel
(标准或实验性)进行了扩展。gatewayAPIVersion
和 gatewayAPIChannel
现在由套件机制自动填充,同时还包含测试结果的简要描述。报告已以更结构化的方式重新组织,并且实现现在可以添加有关测试如何运行的信息并提供重现步骤。
实验通道的新增功能
网关客户端证书验证
网关现在可以通过在 tls
中引入新的 frontendValidation
字段,为每个网关侦听器配置客户端证书验证。此字段支持配置可以用作信任锚以验证客户端提供的证书的 CA 证书列表。
以下示例显示了如何使用存储在 foo-example-com-ca-cert
ConfigMap 中的 CACertificate 来验证连接到 foo-https
网关侦听器的客户端提供的证书。
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),为服务级别配置,以及 HTTPRoute 和 GRPCRoute 中的字段,为路由级别配置,将 会话持久性 引入到 Gateway API 中。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 术语澄清
作为在整个 API 中使我们的 TLS 术语更加一致的更广泛目标的一部分,我们对 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