多集群服务概述

ACK One多集群服务可实现原生Service的跨集群通信,适用于因业务隔离、异地容灾等需求部署多个集群的场景。相较于传统方案,多集群服务无需部署额外负载均衡实例,简化了多集群应用的部署操作和网络架构,同时降低了公网暴露的风险和相应的成本。

重要

多集群服务跨集群访问要求集群间容器网络互通,以确保一个集群中的Pod可以直接访问另一个集群的Pod,具体要求如下:

  • 多集群处于不同VPC时,确保VPC地址段不重叠,通过VPC对等连接云企业网CEN(VPC跨地域时)实现VPC互联。

  • 多集群Pod地址段和Service地址段不重叠,并且集群间节点池安全组相互放行Pod地址段。

实现方案

ACK One提供了两种多集群服务实现方案:

  • MultiClusterService(推荐):配置方法简单,无需修改业务代码和DNS配置,可实现业务无侵入改造;使用原生Service域名访问。

  • ServiceImport/ServiceExport:符合社区API规范;使用专用域名进行访问,需修改DNS配置。

MultiClusterService

image
  1. Provider Cluster中已有应用Podservice1,Consumer Cluster中的Pod需要访问service1

  2. 在舰队中创建MultiClusterService资源,指定Provider ClusterConsumer Cluster。舰队将根据Provider Cluster中的service1,在Consumer Cluster中自动创建同名的service1

    支持同时在spec.consumerClustersspec.providerClusters中配置多个集群。
  3. Consumer Cluster中的Pod可以通过service1.<namespace>域名直接访问Provider Cluster中的Pod。

使用MultiClusterService的具体操作,请参见使用原生Service域名跨集群服务访问

ServiceImport/ServiceExport

image
  1. Provider Cluster中已有应用Podservice1,Consumer Cluster中的Pod需要访问service1

  2. Provider Cluster中创建ServiceExport资源,然后在Consumer Cluster中创建ServiceImport资源。

  3. 舰队将确认ServiceExportServiceImport的配对,然后在Consumer Cluster中创建以amcs-为前缀的Service。

  4. Consumer Cluster中修改CoreDNS配置,使CoreDNS支持多集群服务域名解析。

  5. Consumer Cluster中的Pod可以通过以amcs-为前缀的Service访问Provider Cluster中的Pod。

使用ServiceImport/ServiceExport的具体操作,请参见通过命令行管理多集群服务

应用场景

跨集群Service访问

当业务部署在不同集群且需要相互调用时,可使用多集群服务功能。

image
  • 使用MultiClusterService:将Provider Cluster的集群ID配置到providerClusters中,将Consumer Cluster的集群ID配置到consumerClusters中:

    apiVersion: networking.one.alibabacloud.com/v1alpha1
    kind: MultiClusterService
    metadata:
       name: service1
       namespace: provider-ns
    spec:
      consumerClusters:
        - name: <Consumer Cluster ID>
      providerClusters:
        - name: <Provider Cluster ID>
  • 使用ServiceImport/ServiceExport:则在Provider Cluster中创建ServiceExport,在Consumer Cluster中创建ServiceImport。

基于多集群的高可用服务

将多个集群的同名Service作为高可用服务统一对外提供服务,请求会被均衡分配到多个集群的多个Pod中,可实现关键业务的跨集群级容灾能力。

image
  • 使用MultiClusterService:将Provider Cluster 1Provider Cluster 2的集群ID都配置到providerClusters中,将Consumer Cluster的集群ID配置到consumerClusters中:

    apiVersion: networking.one.alibabacloud.com/v1alpha1
    kind: MultiClusterService
    metadata:
       name: service1
       namespace: provider-ns
    spec:
      consumerClusters:
        - name: <Consumer Cluster ID>
      providerClusters:
        - name: <Provider Cluster 1 ID>
        - name: <Provider Cluster 2 ID>
  • 使用ServiceImport/ServiceExport:则在Provider Cluster 1Provider Cluster 2中都创建ServiceExport,在Consumer Cluster中创建ServiceImport。