共用方式為


在 Azure Kubernetes 機群管理員成員叢集 (預覽版) 之間設定多叢集第 4 層負載平衡

針對跨多個叢集部署的應用程式,系統管理員通常需要跨叢集將連入流量路由傳送至這些應用程式。

您可以遵循本文件,為這類多叢集應用程式設定第 4 層負載平衡。

重要

Azure Kubernetes 機群管理員預覽功能由客戶自行決定取用。 預覽會以「現狀」和「可供使用時」提供,其其不受服務等級協定和有限瑕疵擔保所保護。 客戶支援部門會竭盡全力支援一部分的 Azure Kubernetes 機群管理員預覽功能。 因此,這些功能不適合實際執行用途。

必要條件

如果您沒有 Azure 訂用帳戶,請在開始之前先建立 Azure 免費帳戶

  • 請閱讀這項功能的概念性概觀,其中提供本文件所參考之 ServiceExportMultiClusterService 物件的說明。

  • 您必須具有中樞叢集和成員叢集的機群資源。 如果您沒有此資源,請遵循快速入門:建立機群資源並加入成員叢集

  • 部署工作負載的目標 Azure Kubernetes Service (AKS) 叢集,必須存在於相同的虛擬網路對等互連虛擬網路上。

  • 您必須遵循 Access Fleet 中樞叢集 Kubernetes API 中的步驟 ,取得中樞叢集 Kubernetes API 的存取權。

  • 設定下列環境變數,並取得機群和所有成員叢集的 kubeconfig:

    export GROUP=<resource-group>
    export FLEET=<fleet-name>
    export MEMBER_CLUSTER_1=aks-member-1
    export MEMBER_CLUSTER_2=aks-member-2
    
    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
    
    az aks get-credentials --resource-group ${GROUP} --name ${MEMBER_CLUSTER_2} --file aks-member-2
    

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

注意

  • 本操作指南中的步驟參考範例應用程式,僅供示範用。 您可以將此工作負載取代為任何現有的 Deployment 和 Service 物件。

  • 這些步驟會使用 Kubernetes 組態傳播,將來自機群叢集的樣本工作負載部署至成員叢集。 或者,您可以選擇一次一個,個別將這些 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 規格,可讓您將服務從成員叢集匯出至機群資源。 成功匯出之後,服務及其所有端點都會同步處理到機群叢集,然後可用來設定這些端點之間的多叢集負載平衡。 輸出會看似像以下範例:

    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/v1
    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-1,以及 eastus 區域的 aks-member-2。 您可以從區域 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