多集群服务概述

随着Kubernetes集群的广泛应用,企业往往需要运行和管理多个Kubernetes集群,来满足业务隔离部署运维的需求,但业务之间还需要相互访问。通过多集群服务,让您无需创建负载均衡,即可实现Kubernetes服务的跨集群访问。本文介绍多集群服务的架构、场景和网络规划。

多集群服务架构

多集群服务打破了多集群服务访问的边界,让您更加方便地构建多集群应用系统。多集群服务架构如下图所示。

image
  1. 图中链路1为管控链路,Fleet实例管理关联集群Kubernetes服务的开放与注入。

    • 通过在集群ACK Cluster 1上创建服务开放ServiceExport对象,ACK Cluster 1成为服务提供者,将服务Service 1设置为允许集群外访问。

    • 通过在集群ACK Cluster 2上创建服务注入ServiceImport对象,ACK Cluster 2成为服务消费者,访问服务提供者开放的服务。

  2. 图中链路2为数据链路,在ACK Cluster 1开放Service 1服务,ACK Cluster 2注入Service 1服务后,ACK Cluster 2可以访问ACK Cluster 1的Service 1服务。实现跨集群的Kubernetes服务访问。

多集群服务原理

多集群服务原理如下图所示。

image
  1. 为实现Cluster 2中的Pod跨集群访问Cluster 1中的服务Service 1,可以在Cluster 1中创建ServiceExport对象,在Cluster 2中创建ServiceImport对象。

  2. ACK One Fleet实例在Cluster 2中会创建以amc-为前缀的Service amc-Service1,并将Cluster 1的Pod IP同步为Service amc-Service1的后端。

  3. Cluster 2中的Client Pod,您可以通过以下两种方式跨集群访问Cluster 1中的Service 1:

    1. 访问以amc-为前缀的服务名,例如amc-Service1.provider-ns

    2. 通过跨集群域名clusterset.local域访问,例如Service1.provider-ns.svc.clusterset.local

多集群服务场景

服务多集群访问

通过创建ServiceExport和ServiceImport资源,指定了服务提供者ACK Cluster 1和服务消费者ACK Cluster 2,服务消费者ACK Cluster 2的Client Pod可以访问服务提供者所公开的服务,服务访问通过域名解析,流量在服务提供者后端Pod间负载均衡,并支持Pod数量的扩展收缩。多集群访问示意如下图所示。

image

服务高可用多集群访问

服务Service 1在多个集群上高可用部署,Client Pod跨集群访问服务Service 1,流量可以在多个集群的多个Pod间均衡。高可用多集群访问示意如下图所示。

image

多集群服务网络规划

多集群服务跨集群访问的前提要求集群间Kubernetes Pod网络连通, 一个集群中的Pod可以访问另一个集群的Pod。需要满足下列条件:

  1. 多VPC情况,VPC地址段不重叠,VPC间通过CEN互联。

  2. 多集群Pod地址段不重叠。

  3. 多集群Pod地址段和Service地址段不能重叠。

更多信息,请参见Kubernetes集群网络规划

使用限制

多集群服务功能要求关联集群版本为1.22及以上版本。