Kubernetes Gateway API v1.1 发布:新的标准特性和实验性增强

2024-06-17 14:57:47 浏览数 (4)

作者 | Claudio Masolo

译者 | 张卫滨

策划 | 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)。gatewayAPIVersiongatewayAPIChannel会被自动填充,并且报告的结构化会更好,允许实现包含测试详情和重现步骤。

有个新的特性添加到了实验通道中,它专注于 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 翻译,未经许可禁止转载。

0 人点赞