Share via


設定跨 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 資源的 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
    

跨 Fleet 資源的成員叢集部署工作負載

注意

  • 本操作說明指南中的步驟僅參考範例應用程式以供示範之用。 您可以將此工作負載取代為任何您自己的現有部署和服務物件。

  • 這些步驟會使用 Kubernetes 組態傳播,將範例工作負載從 Fleet 叢集部署到成員叢集。 或者,您可以選擇將這些 Kubernetes 組態分別部署到每個成員叢集,一次一個。

  1. 在車隊叢集上建立命名空間:

    KUBECONFIG=fleet kubectl create namespace kuard-demo
    

    輸出大致如下列範例所示:

    namespace/kuard-demo created
    
  2. 套用 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
    
  3. 在名為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
    
  4. 套用 ClusterResourcePlacement

    KUBECONFIG=fleet kubectl apply -f crp-2.yaml
    

    如果成功,輸出看起來會類似下列範例:

    clusterresourceplacement.placement.kubernetes-fleet.io/kuard-demo created
    
  5. 檢查的狀態 ClusterResourcePlacement

    KUBECONFIG=fleet kubectl get clusterresourceplacements
    

    如果成功,輸出看起來會類似下列範例:

    NAME            GEN   SCHEDULED   SCHEDULEDGEN   APPLIED   APPLIEDGEN   AGE
    kuard-demo      1     True        1              True      1            20s
    

建立 MultiClusterService,以跨多個成員叢集中的服務端點進行負載平衡

  1. 檢查是否已針對區域中的成員叢集 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-CONFLICTfalse)。

    注意

    可能需要一兩分鐘的時間,ServiceExport 才會傳播。

  2. 在一個成員上建立 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
    
  3. 執行下列命令來確認 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位址可供使用。

  4. 使用外部負載平衡器 IP 位址多次執行下列命令:

    curl <a.b.c.d>:8080 | grep addrs 
    

    請注意,提供要求之 Pod 的 IP 正在變更,而且這些 Pod 來自成員叢集aks-member-1aks-member-2eastus區域。 您可以從區域在叢集 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