4月下旬, Kubernetes 社区发布的 Gateway API 意味着 Kubernetes 网络 API 的又一次演化。在 Google 和大量贡献者的带领下,Gateway API 利用一系列标准化的核心资源实现了网络的统一。与围绕 Ingress 所打造的实现生态系统类似, Gateway API 同样实现了统一,但范围更广,并充分吸取了 Ingress 和服务网格 (Service mesh) 等方面的经验。今天,我们很激动地发布了 Google Cloud 所实现的 Gateway API, 即 GKE Gateway 控制器的预览版本。一年多的开发过程中, GKE Gateway 控制器管理着 GKE 集群或 GKE 集群队列的内部和外部 HTTP/S 负载均衡。Gateway API 为负载均衡器基础架构提供了多租户共享能力,并提供了集中化的管理策略与控制能力。得益于该 API 的表现能力,它能够支持很多高级功能,如流量转移、流量监视、标头操作等。下文将带领您进一步了解该技术!
GKE Gateway 控制器概览
GatewayClass 将会是您在 GKE Gateway 控制器中遇到的第一个新资源。GatewayClass 提供的模板描述了该类的能力。在每个 GKE 1.20+ 集群中,您会看到两个预安装的 GatewayClass。 欢迎创建 GKE 1.20+ 集群并自行验证!
01 $ kubectl get gatewayclasses
02
03NAME CONTROLLER
04gke-l7-gxlb networking.gke.io/gateway
05gke-l7-rilb networking.gke.io/gateway
面向角色的设计
按照设计,Gateway API 支持多租户。它引入了两个主要资源,并在平台所有者和服务所有者之间实现了分离:
● Gateway 代表负载均衡器,将侦听需要由自己路由的流量。我们可以使用多个 Gateway ,为每个团队提供一个;或多个团队共享同一个 Gateway 。
● Route 是指与特定协议相关的路由配置,将会被应用给上述 Gateway 。目前 GKE 可支持 HTTPRoute ,未来还计划支持 TCPRoute 与 UDPRoute 。一个或多个 Route 可绑定到同一个 Gateway ,借此共同定义出您应用程序的路由配置。
以下示例展示了集群运维人员部署可供多个团队共享的 Gateway 资源的具体方式,该部署甚至跨越了不同名称空间。该 Gateway 的所有者可以通过集中化的方式定义域所有权、TLS 终结以及其他策略,全过程无需服务所有者参与。另一方面,服务所有者也可以为自己的应用定义路由规则和流量管理策略,而无需其他团队或平台管理员的配合。 Gateway 和 Route 资源之间的这种关系实现了真正的职责分离,并可通过标准化的 Kubernetes RBAC 加以管理。
高级路由和流量管理
GKE Gateway 控制器还引入了新的路由和流量管理功能。下列 HTTPRoute 由 Store 团队在自己的名称空间中部署,会寻找与 foo.example.com/store 匹配的流量,并为其应用下列流量规则:
● 90% 的客户端流量转向 store-v1
● 10% 的客户端流量转向 store-v2 ,以便对下一版本的商店进行金丝雀测试
● 所有客户端流量同时被复制并镜像至 store-v3 ,以便用下列版本的商店进行可扩展性测试
01kind: HTTPRoute
02apiVersion: networking.x-k8s.io/v1alpha1
03metadata:
04 name: store-route
05 namespace: store
06 labels:
07 gateway: foo
08spec:
09 hostnames:
10 - "foo.example.com"
11 rules:
12 - matches:
13 - path:
14 value: /store
15 forwardTo:
16 - serviceName: store-v1
17 port: 8080
18 weight: 90
19 - serviceName: store-v2
20 port: 8080
21 weight: 10
22 filters:
23 - type: RequestMirror
24 requestMirror:
25 serviceName: store-v3
26 port: 8080
原生多集群支持
GKE Gateway 控制器通过自己的 multi-cluster GatewayClasses 实现了可同时面向内部和外部负载均衡的原生多集群支持。多集群网关负载均衡客户端流量可跨越 GKE 集群队列。该功能适用于一系列目标用例,包括:
● 多集群或多区域冗余和故障转移
● 通过与客户端距离最近的 GKE 集群提供低延迟服务
● 集群间的蓝绿流量切换
● 由于组织或安全约束拓展至多个集群
一旦在 Hub 中启用 ingress ,多集群 GatewayClasses (包含 `-mc` ) 就会出现在您的 GKE 集群中,准备好实现跨队列的使用。
01 $ kubectl get gatewayclasses
02
03NAME CONTROLLER
04gke-l7-gxlb networking.gke.io/gateway
05gke-l7-rilb networking.gke.io/gateway
06gke-l7-gxlb-mc networking.gke.io/gateway
07gke-l7-rilb-mc networking.gke.io/gateway
GKE Gateway 控制器与多集群服务实现了紧密集成,借此 GKE 能够提供多集群的南北和东西流量负载均衡。多集群网关还可充分利用多集群服务的服务发现能力,借此对后端 Pod 获得完整视图。外部多集群网关可提供面向互联网的负载均衡,内部多集群网关可提供面向内部私有流量的负载均衡。无论东西向流量、南北向流量、外部公共流量,或是内部私有流量,GKE 均可提供您所需的,拆箱即用的多集群网络能力。
GKE Gateway 控制器是 Google Cloud 对 Gateway API 的首个实现。归功于松散耦合的资源模型,TCPRoute、 UDPRoute 以及 TLSRoute 也将被快速纳入 Gateway API 规范,进而使其能力范围进一步扩展。这是 Kubernetes Service 网络连接能力新篇章的开端,未来之路还有很长!
文章信息
相关推荐
