設定跨 Azure Kubernetes Fleet Manager 成員叢集的多叢集第 4 層負載平衡 (預覽)
針對跨多個叢集部署的應用程式,系統管理員通常會想要跨叢集將連入流量路由傳送至它們。
您可以遵循本檔,為這類多叢集應用程式設定第 4 層負載平衡。
重要
Azure Kubernetes Fleet Manager 預覽功能可在自助式選擇的基礎上使用。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 Azure Kubernetes Fleet Manager 預覽部分由客戶支援盡最大努力涵蓋。 因此,這些功能不適合實際執行用途。
必要條件
如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶。
閱讀這項功能的概念性概觀,其中提供本文件所參考之和
MultiClusterService
對象的說明ServiceExport
。您必須具有具有中樞叢集和成員叢集的 Fleet 資源。 如果您沒有此資源,請遵循 快速入門:建立 Fleet 資源並加入成員叢集。
部署工作負載的目標 Azure Kubernetes Service (AKS) 叢集必須存在於相同的虛擬網路或對等互連虛擬網路上。
- 這些目標叢集必須 新增為 Fleet 資源的成員叢集。
- 這些目標叢集應使用 Azure CNI(容器網路介面)網路。
您必須遵循存取 Fleet 資源的 Kubernetes API 中的步驟,取得中樞叢集 Kubernetes API 的存取權。
設定下列環境變數,並取得車隊和所有成員叢集的 kubeconfigs:
export GROUP=<resource-group> export FLEET=<fleet-name> export MEMBER_CLUSTER_1=aks-member-1 az fleet get-credentials --resource-group ${GROUP} --name ${FLEET} --file fleet az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_1} --file aks-member-1
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 Azure CLI 延伸模組。 如需擴充功能詳細資訊,請參閱使用 Azure CLI 擴充功能。
執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。
跨 Fleet 資源的成員叢集部署工作負載
注意
本操作說明指南中的步驟僅參考範例應用程式以供示範之用。 您可以將此工作負載取代為任何您自己的現有部署和服務物件。
這些步驟會使用 Kubernetes 組態傳播,將範例工作負載從 Fleet 叢集部署到成員叢集。 或者,您可以選擇將這些 Kubernetes 組態分別部署到每個成員叢集,一次一個。
在車隊叢集上建立命名空間:
KUBECONFIG=fleet kubectl create namespace kuard-demo
輸出大致如下列範例所示:
namespace/kuard-demo created
套用 Deployment、Service、ServiceExport 物件:
KUBECONFIG=fleet kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-export-service.yaml
ServiceExport
上述檔案中的規格可讓您將服務從成員叢集匯出至 Fleet 資源。 成功匯出之後,服務及其所有端點都會同步至車隊叢集,然後可用來設定這些端點之間的多叢集負載平衡。 輸出會看似像以下範例:deployment.apps/kuard created service/kuard created serviceexport.networking.fleet.azure.com/kuard created
在名為
crp-2.yaml
的檔案中建立下列內容ClusterResourcePlacement
。 請注意,我們正在選取區域中的eastus
叢集:apiVersion: placement.kubernetes-fleet.io/v1beta1 kind: ClusterResourcePlacement metadata: name: kuard-demo spec: resourceSelectors: - group: "" version: v1 kind: Namespace name: kuard-demo policy: affinity: clusterAffinity: requiredDuringSchedulingIgnoredDuringExecution: clusterSelectorTerms: - labelSelector: matchLabels: fleet.azure.com/location: eastus
套用
ClusterResourcePlacement
:KUBECONFIG=fleet kubectl apply -f crp-2.yaml
如果成功,輸出看起來會類似下列範例:
clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
檢查的狀態
ClusterResourcePlacement
:KUBECONFIG=fleet kubectl get clusterresourceplacements
如果成功,輸出看起來會類似下列範例:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE kuard-demo 1 True 1 True 1 20s
建立 MultiClusterService,以跨多個成員叢集中的服務端點進行負載平衡
檢查是否已針對區域中的成員叢集
eastus
成功匯出服務:KUBECONFIG=aks-member-1 kubectl get serviceexport kuard --namespace kuard-demo
輸出大致如下列範例所示:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 25s
KUBECONFIG=aks-member-2 kubectl get serviceexport kuard --namespace kuard-demo
輸出大致如下列範例所示:
NAME IS-VALID IS-CONFLICTED AGE kuard True False 55s
您應該會看到服務對匯出有效(
IS-VALID
欄位為true
),而且與其他匯出沒有衝突(IS-CONFLICT
為false
)。注意
可能需要一兩分鐘的時間,ServiceExport 才會傳播。
在一個成員上建立
MultiClusterService
,以在這些叢集中的服務端點之間進行負載平衡:KUBECONFIG=aks-member-1 kubectl apply -f https://raw.githubusercontent.com/Azure/AKS/master/examples/fleet/kuard/kuard-mcs.yaml
注意
若要透過內部 IP 而非公用 IP 公開服務,請將批注新增至 MultiClusterService:
apiVersion: networking.fleet.azure.com/v1alpha1 kind: MultiClusterService metadata: name: kuard namespace: kuard-demo annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" ...
輸出大致如下列範例所示:
multiclusterservice.networking.fleet.azure.com/kuard created
執行下列命令來確認 MultiClusterService 是否有效:
KUBECONFIG=aks-member-1 kubectl get multiclusterservice kuard --namespace kuard-demo
輸出應類似下列範例:
NAME SERVICE-IMPORT EXTERNAL-IP IS-VALID AGE kuard kuard <a.b.c.d> True 40s
欄位
IS-VALID
應該位於true
輸出中。 查看輸出中的外部負載平衡器 IP 位址 (EXTERNAL-IP
)。 可能需要一段時間才能完整處理匯入,且IP位址可供使用。使用外部負載平衡器 IP 位址多次執行下列命令:
curl <a.b.c.d>:8080 | grep addrs
請注意,提供要求之 Pod 的 IP 正在變更,而且這些 Pod 來自成員叢集
aks-member-1
和aks-member-2
eastus
區域。 您可以從區域在叢集eastus
上執行下列命令來驗證 Pod IP:KUBECONFIG=aks-member-1 kubectl get pods -n kuard-demo -o wide
KUBECONFIG=aks-member-2 kubectl get pods -n kuard-demo -o wide