隨著Kubernetes集群的廣泛應用,企業往往需要運行和管理多個Kubernetes集群,來滿足業務隔離部署運維的需求,但業務之間還需要相互訪問。通過多集群服務,讓您無需創建負載均衡,即可實現Kubernetes服務的跨集群訪問。本文介紹多集群服務的架構、場景和網絡規劃。
多集群服務架構
多集群服務打破了多集群服務訪問的邊界,讓您更加方便地構建多集群應用系統。多集群服務架構如下圖所示。
圖中鏈路1為管控鏈路,Fleet實例管理關聯集群Kubernetes服務的開放與注入。
通過在集群ACK Cluster 1上創建服務開放ServiceExport對象,ACK Cluster 1成為服務提供者,將服務Service 1設置為允許集群外訪問。
通過在集群ACK Cluster 2上創建服務注入ServiceImport對象,ACK Cluster 2成為服務消費者,訪問服務提供者開放的服務。
圖中鏈路2為數據鏈路,在ACK Cluster 1開放Service 1服務,ACK Cluster 2注入Service 1服務后,ACK Cluster 2可以訪問ACK Cluster 1的Service 1服務。實現跨集群的Kubernetes服務訪問。
多集群服務原理
多集群服務原理如下圖所示。
為實現Cluster 2中的Pod跨集群訪問Cluster 1中的服務Service 1,可以在Cluster 1中創建ServiceExport對象,在Cluster 2中創建ServiceImport對象。
ACK One Fleet實例在Cluster 2中會創建以
amc-
為前綴的Serviceamc-Service1
,并將Cluster 1的Pod IP同步為Serviceamc-Service1
的后端。Cluster 2中的Client Pod,您可以通過以下兩種方式跨集群訪問Cluster 1中的Service 1:
訪問以
amc-
為前綴的服務名,例如amc-Service1.provider-ns
。通過跨集群域名clusterset.local域訪問,例如
Service1.provider-ns.svc.clusterset.local
。
多集群服務場景
服務多集群訪問
通過創建ServiceExport和ServiceImport資源,指定了服務提供者ACK Cluster 1和服務消費者ACK Cluster 2,服務消費者ACK Cluster 2的Client Pod可以訪問服務提供者所公開的服務,服務訪問通過域名解析,流量在服務提供者后端Pod間負載均衡,并支持Pod數量的擴展收縮。多集群訪問示意如下圖所示。
服務高可用多集群訪問
服務Service 1在多個集群上高可用部署,Client Pod跨集群訪問服務Service 1,流量可以在多個集群的多個Pod間均衡。高可用多集群訪問示意如下圖所示。
多集群服務網絡規劃
多集群服務跨集群訪問的前提要求集群間Kubernetes Pod網絡連通, 一個集群中的Pod可以訪問另一個集群的Pod。需要滿足下列條件:
多VPC情況,VPC地址段不重疊,VPC間通過CEN互聯。
多集群Pod地址段不重疊。
多集群Pod地址段和Service地址段不能重疊。
更多信息,請參見Kubernetes集群網絡規劃。
使用限制
多集群服務功能要求關聯集群版本為1.22及以上版本。