隨著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及以上版本。