译者 | 张卫滨
策划 | Tina
Kubernetes SIG Network发布 了 Gateway API 的 1.1 版本。这次更新将多个关键特性转移到了标准通道(GA),包括对 服务网格 和 GRPCRoute 的支持。此外,还引入了会话持久性和客户端证书验证等新的实验性特性。
v1.1 的发布标志着四个备受期待的特性从实验阶段变成了标准版。这表明对 API 的稳定性有了足够的信心,并且会提供向后兼容性的保证。标准通道(Standard Channel)的特性将会通过向后兼容的功能增强进行演进。
现在,Gateway API 能够支持服务网格,这使得用户能够使用统一的 API 管理 ingress 和网格流量。像 HTTPRoute 这样的路由现在可以通过parentRef
来引用服务,从而允许对特定的服务进行精确的流量控制。要了解该特性的更多信息,请查阅 Gateway API 的文档。
使用 HTTPRoute 进行金丝雀部署的可能实现如下所示:
代码语言:javascript复制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
Service 和color2
Service 按照 50/50 的规则划分流量。
GRPCRoute 自 v1.1.0 以来一直是标准通道的一部分。对于实验通道的用户,建议等待控制器更新后再升级到标准通道版本。同时,v1.1 中的实验通道版本包含了 v1alpha2 和 v1 API 版本。
HTTPRoute 是一种 Gateway API 类型,用于声明 HTTP 请求的路由行为。每个路由都提供了引用父资源的方法,以便于附加到该路由上。通常,这些父资源可以是网关,但是具体的实现也可以灵活地支持其他类型的父资源。端口字段已经添加到了 ParentReference 中,允许通过声明端口将资源附加到 Gateway 监听器、Service 或其他父资源。它允许同时附加多个监听器。
通过端口将 HTTPRoute 附加到特定 Gateway 监听器的示例代码如下:
代码语言:javascript复制apiVersion: gateway.networking.k8s.io/v1beta1
kind: HTTPRoute
metadata:
name: httproute-example
spec:
parentRefs:
- name: acme-lb
port: 8080
值得注意的是,目标 Gateway 需要允许附加来自路由命名空间的 HTTPRoutes,这样才能附加成功,而且对端口的绑定还允许一次连接到多个监听器。
一致性报告现在包含了mode
字段和gatewayAPIChannel
(standard 或 experimental)。gatewayAPIVersion
和gatewayAPIChannel
会被自动填充,并且报告的结构化会更好,允许实现包含测试详情和重现步骤。
有个新的特性添加到了实验通道中,它专注于 Gateway。具体来讲,现在可以使用 TLS 中的新frontendValidation
字段来为每个 Gateway 监听器配置客户端证书验证。该字段允许配置 CA 证书对客户端证书进行验证。
配置实例如下所示:
代码语言:javascript复制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
实验通道的另一个新增特性是会话持久性。对于 Service 级别的配置来讲,它是通过一个新的策略(BackendLBPolicy)引入的,对于路由级别的配置,它是作为 HTTPRoute 和 GRPCRoute 中的字段引入的。这些设置包括会话超时、会话名称、会话类型和 cookie 有效期。
基于 cookie 的会话持久化的 BackendLBPolicy 配置示例如下所示:
代码语言:javascript复制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 术语的一致性,对BackendTLSPolicy
进行了一些破坏性的变更,从而产生了新的 API 版本 (v1alpha3)。实现必须通过更新相应的引用和配置来处理这个版本升级。其他值得注意的变更:
targetRef
变为targetRefs
tls
变为validation
tls.caCertRefs
变为validation.caCertificateRefs
tls.wellKnownCACerts
变为validation.wellKnownCACertificates
与其他 Kubernetes API 不同,要使用最新的 Gateway API,不需要升级到最新的 Kubernetes 版本。只要集群安装在 Kubernetes 1.26 或更高版本上,就可以立即开始使用最新的 Gateway API 了。
原文链接:
https://www.infoq.com/news/2024/05/kubernetes-gateway-api/
声明:本文由 InfoQ 翻译,未经许可禁止转载。