ACK One多集群服务可实现原生Service的跨集群通信,适用于因业务隔离、异地容灾等需求部署多个集群的场景。相较于传统方案,多集群服务无需部署额外负载均衡实例,简化了多集群应用的部署操作和网络架构,同时降低了公网暴露的风险和相应的成本。
实现方案
ACK One提供了两种多集群服务实现方案:
MultiClusterService(推荐):配置方法简单,无需修改业务代码和DNS配置,可实现业务无侵入改造;使用原生Service域名访问。
ServiceImport/ServiceExport:符合社区API规范;使用专用域名进行访问,需修改DNS配置。
MultiClusterService
Provider Cluster中已有应用Pod与
service1,Consumer Cluster中的Pod需要访问service1。在舰队中创建
MultiClusterService资源,指定Provider Cluster与Consumer Cluster。舰队将根据Provider Cluster中的service1,在Consumer Cluster中自动创建同名的service1。支持同时在
spec.consumerClusters和spec.providerClusters中配置多个集群。Consumer Cluster中的Pod可以通过
service1.<namespace>域名直接访问Provider Cluster中的Pod。
使用MultiClusterService的具体操作,请参见使用原生Service域名跨集群服务访问。
ServiceImport/ServiceExport
Provider Cluster中已有应用Pod与
service1,Consumer Cluster中的Pod需要访问service1。在Provider Cluster中创建
ServiceExport资源,然后在Consumer Cluster中创建ServiceImport资源。舰队将确认
ServiceExport与ServiceImport的配对,然后在Consumer Cluster中创建以amcs-为前缀的Service。在Consumer Cluster中修改CoreDNS配置,使CoreDNS支持多集群服务域名解析。
Consumer Cluster中的Pod可以通过以
amcs-为前缀的Service访问Provider Cluster中的Pod。
使用ServiceImport/ServiceExport的具体操作,请参见通过命令行管理多集群服务。
应用场景
跨集群Service访问
当业务部署在不同集群且需要相互调用时,可使用多集群服务功能。
使用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中,可实现关键业务的跨集群级容灾能力。
使用MultiClusterService:将Provider Cluster 1和Provider 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 1和Provider Cluster 2中都创建ServiceExport,在Consumer Cluster中创建ServiceImport。