Introduction
Cluster Mesh 主要處理叢集間的通訊、網路策略以及路由等問題。它能夠處理跨多個 Kubernetes 叢集的 Pod IP 路由,透過隧道或直接路由實現無需閘道器或代理的跨叢集通訊,從而提高微服務架構的效率。
Cilium Cluster Mesh 可以連線多個叢集的網路,只要所有叢集都執行 Cilium 作為其 CNI,每個叢集中的 pod 都可以發現和訪問網格中所有其他叢集中的服務。這允許有效地將多個叢集連線到一個大型統一網路中,無論每個叢集執行的 Kubernetes 分佈或位置如何。
高可用性和容錯性
Cluster Mesh 增強了服務的高可用性和容錯能力。支援Kubernetes叢集在多個地域或者可用區的執行。如果資源暫時不可用、一個叢集中配置錯誤或離線升級,它可以將故障轉移到其他叢集,確保服務始終可訪問。
透明服務發現
Cluster Mesh 可自動發現 Kubernetes 叢集中的服務。使用標準 Kubernetes 服務,它會自動將跨叢集具有相同名稱和名稱空間的服務合併為全域性服務。這意味著應用程式可以發現服務並與服務互動,無論它們駐留在哪個叢集中,從而大大簡化了跨叢集通訊。
跨叢集共享服務
Cluster Mesh 支援在所有叢集之間共享服務,例如秘密管理、日誌記錄、監控或 DNS。這降低了運維成本,簡化了管理,並在租戶叢集之間保持隔離。
統一的網路策略
Cluster Mesh將Cilium的第3層到第7層網路策略執行擴充套件到網格中的所有叢集。它標準化了網路策略的應用,確保在您的整個Kubernetes部署中始終採用一致的安全策略,無論涉及的叢集數量如何。
Local Service 親和性
在某些情況下,跨多個叢集的負載平衡可能並不理想。可以使用註釋service.cilium.io/affinity: "local|remote|none"來指定首選的終端目標。例如,如果註釋service.cilium.io/affinity的值為local,全域性服務將在健康的本地後端之間進行負載均衡,並且僅當所有本地後端不可用或不健康時才使用遠端端點。
apiversion: v1
kind: Service
metadata:
name: backend-service
annotations:
io.cilium/global-service: "true"
io.cilium/service-affinity: local
spec:
type: ClusterIP
ports:
- port: 80
selector:
name: backend
Remote Service 親和性
apiversion: v1
kind: Service
metadata:
name: backend-service
annotations:
io.cilium/global-service: "true"
io.cilium/service-affinity: remote
spec:
type: ClusterIP
ports:
- port: 80
selector:
name: backend
參考文件
https://docs.cilium.io/en/stable/network/clustermesh/