在 Azure Kubernetes Service (AKS) 中使用公用標準負載平衡器

Azure Load Balancer 會在支援輸入和輸出案例的開放系統互相連線 (OSI) 模型本身的第 4 層上運作。 這會將抵達負載平衡器前端的輸入流量分送給後端集區執行個體。

公用負載平衡器與 AKS 整合有兩個用途:

  • 將私人 IP 位址轉譯為其 輸出集區的公用 IP 位址部分,以提供 AKS 虛擬網路 (VNet) 內叢集節點的輸出連線。
  • 透過 Kubernetes 服務類型 LoadBalancer提供對應用程式的存取,讓您輕鬆擴展應用程式並建立高可用性服務。

本文涵蓋 AKS 公用負載平衡器整合。 如需內部負載平衡器整合,請參閱使用 AKS 內部負載平衡器。

先決條件

Important

若要使用自己的網路閘道、防火牆或 Proxy 提供輸出連接,可以跳過負載平衡器輸出集區和個別前端 IP 的建立,並使用 輸出型別作為 UserDefinedRouting(UDR)。 輸出類型會定義叢集的輸出方法,且其預設類型為 LoadBalancer。

Limitations

您建立和管理可支援「標準」SKU 負載平衡器的 AKS 叢集時,需遵守下列限制:

  • AKS 管理代理程式節點的生命週期和作業。 不支援修改與代理程式節點相關聯的 IaaS 資源。 例如不支援負載平衡器資源群組的手動變更。

  • 必須至少有一個公用 IP 或 IP 首碼,才能允許來自 AKS 叢集的輸出流量。 需要公用 IP 或 IP 首碼,以維持控制平面和代理程式節點之間的連線能力,同時維持與舊版 AKS 的相容性。 可使用下列選項來指定「標準」SKU 負載平衡器的公用 IP 或 IP 首碼:

    • 提供您自己的公用 IP。
    • 提供您自己的公用 IP 首碼。
    • 指定一個 100 以內的數字,以允許 AKS 叢集在與 AKS 叢集相同的資源群組中建立相同數量的標準 SKU 公用 IP。 此資源群組通常在開頭命名為 。MC_ AKS 會將公用 IP 指派給「標準」SKU 負載平衡器。 如果未指定公用 IP、公用 IP 前置或 IP 數量,預設會在 AKS 叢集所在的同一個資源群組中自動建立一個公用 IP。 請務必允許公用位址,並避免建立任何禁止 IP 建立的 Azure 原則。
  • 由 AKS 建立的公用 IP 位址不能重複用作自訂的自備 (BYO) 公用 IP 位址。 您必須建立和管理所有自訂 IP 位址。

  • 你無法直接修改 AKS 管理的負載平衡資源來更改負載平衡器的 SKU。 若要將現有 AKS 叢集從已退休的 Basic SKU 遷移到 標準 SKU,請使用支援的 AKS 升級流程。 遷移會造成停機,且一旦開始後就無法回滾。

  • 「標準」SKU 負載平衡器只支援「標準」SKU IP 位址。

  • 當負載平衡器後端集區類型設定為 時,不支援 nodeIP。

在 AKS 中建立負載平衡器服務

建立輸出型別 LoadBalancer(預設)的 AKS 叢集後,叢集即準備好使用負載平衡器來公開服務。

  1. 確認你的叢集至少有一個運行中且隨時可用的 pod,並標示 app: public-app 標籤。 下一步的服務清單會選擇帶有此標籤的 pods,但不會建立部署。

    kubectl get pods -l app=public-app
    
  2. 建立 public-svc.yaml 服務資訊清單將建立型別 LoadBalancer 的公用服務。

    apiVersion: v1
    kind: Service
    metadata:
      name: public-svc
    spec:
      type: LoadBalancer
      ports:
      - port: 80
      selector:
        app: public-app
    

指定負載平衡器 IP 位址

如果您想要將特定 IP 位址與負載平衡器搭配使用,您有兩個選項可指定 IP 位址:

  • 設定服務註解 (建議):用 service.beta.kubernetes.io/azure-pip-name 來以名稱指定現有的公共 IP 資源。 此註釋是最有效率的選項,能協助您避免可能的節流。 你也可以用 service.beta.kubernetes.io/azure-load-balancer-ipv4 來做 IPv4 位址和 service.beta.kubernetes.io/azure-load-balancer-ipv6 IPv6 位址。 關於公共 IP 資源、資源群組及身份要求,請參見「 使用 AKS 負載平衡器使用靜態公共 IP 位址」。
  • 將 LoadBalancerIP 屬性新增至負載平衡器 YAML 資訊清單:將屬性新增至 Service.Spec.LoadBalancerIP 負載平衡器 YAML 資訊清單。 這個欄位在 上游 Kubernetes 之後已經被棄用,且不支援雙堆疊。 目前的使用量將維持不變,且現有服務繼續運作,不需修改。

部署負載平衡器服務設定檔

  1. 使用 kubectl apply 部署公用服務資訊清單,並指定 YAML 資訊清單的名稱。

    kubectl apply -f public-svc.yaml
    

    Azure Load Balancer 是透過新的公用 IP 設定,會將新服務列於前端。 Azure Load Balancer 可以有多個前端 IP,所以部署的每個新服務都會取得可供唯一存取的專用新前端 IP。

  2. 請用指令 kubectl get service 確認你的服務已建立且負載平衡器已設定。

    kubectl get service public-svc
    

    當您檢視服務詳細資料時,在負載平衡器上為此服務建立的公用 IP 位址會顯示在輸出的 EXTERNAL-IP 欄中。 IP 位址可能需要幾分鐘才能從<擱置>變為實際的公用 IP 位址。 下列範例輸出顯示成功建立服務:

    NAMESPACE     NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)         AGE
    default       public-svc    LoadBalancer   10.0.39.110    203.0.113.187   80:32068/TCP    52s
    
  3. 透過使用指令 kubectl describe service ,獲取更詳細的服務資訊。

    kubectl describe service public-svc
    

    以下範例輸出是執行 kubectl describe service 後輸出的精簡版本。 LoadBalancer 輸入顯示服務公開的外部 IP 位址。 IP 顯示內部位址。

    Name:                        public-svc
    Namespace:                   default
    Labels:                      <none>
    Annotations:                 <none>
    Selector:                    app=public-app
    ...
    IP:                          10.0.39.110
    ...
    LoadBalancer Ingress:        203.0.113.187
    ...
    TargetPort:                  80/TCP
    NodePort:                    32068/TCP
    ...
    Session Affinity:            None
    External Traffic Policy:     Cluster
    ...
    

後續步驟