網路負載平衡

本主題說明如何使用 GKE on Azure,設定由 Azure Standard Load Balancer 支援的 L4 負載平衡器。

建立 LoadBalancer 類型的 Service 時,GKE on Azure 控制器會設定 Azure 負載平衡器

事前準備

  • 您必須建立叢集,並設定 kubectl 來存取叢集。

選取公開或私有負載平衡器

服務負載平衡器可以是公開的 (具有公開前端 IP),也可以是內部的 (只能透過私人 IP 存取)。

根據預設,新服務會設為公開。如要建立內部負載平衡器,請在資訊清單中將 service.beta.kubernetes.io/azure-load-balancer-internal 註解設為 "true"

為內部負載平衡器選擇子網路

建立內部負載平衡器時,Azure 上的 GKE 需要選取要放置負載平衡器的子網路。系統會根據叢集的建立參數,選擇這個預設服務負載平衡器子網路,如下所示:

  1. 如果指定且非空白,則 cluster.networking.serviceLoadBalancerSubnetId
  2. 否則請cluster.controlPlane.subnetId

或者,您也可以在 Service 中加入 service.beta.kubernetes.io/azure-load-balancer-internal-subnet 註解,指定要用於特定負載平衡器的子網路。這項註解的值是子網路的名稱。

建立 LoadBalancer 範例

您會建立部署,並透過服務公開該部署,藉此建立負載平衡器。

  1. 建立部署作業。這個部署中的容器會監聽通訊埠 50001。將下列 YAML 儲存為名為 my-deployment-50001.yaml 的檔案:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment-50001
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
            env:
            - name: "PORT"
              value: "50001"
    
  2. 使用 kubectl apply 建立 Deployment:

    kubectl apply -f my-deployment-50001.yaml
    
  3. 確認有三個 Pod 正在執行:

    kubectl get pods --selector=app=products
    
  4. 為部署建立 LoadBalancer 類型的服務。您可以建立公開或內部 Azure 標準負載平衡器。選擇下列其中一個選項。

    將下列其中一個資訊清單複製到名為 my-lb-service.yaml 的檔案。

    公開

    apiVersion: v1
    kind: Service
    metadata:
      name: my-lb-service
    spec:
      type: LoadBalancer
      selector:
        app: products
        department: sales
      ports:
      - protocol: TCP
        port: 60000
        targetPort: 50001
    

    內部

    您可以將註解 service.beta.kubernetes.io/azure-load-balancer-internal 設為 "true",建立內部 LoadBalancer。以下 YAML 包含這項註解。 yaml apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001

  5. 使用 kubectl apply 建立服務:

    kubectl apply -f my-lb-service.yaml
    
  6. 使用 kubectl get service 查看服務的地址。

    kubectl get service my-lb-service
    

    輸出內容會包含 EXTERNAL-IP 資料欄,其中列出負載平衡器的位址 (視負載平衡器的建立方式而定,可能是公開或私人位址)。

  7. 如果您已建立公開負載平衡器,可以使用 curl 連線至負載平衡器。將 external-ip 替換為上一步中 kubectl get service 的輸出內容中的地址。

    curl http://external-ip:60000
    

    輸出結果會與下列內容相似:

    Hello, world!
    Version: 2.0.0
    Hostname: my-deployment-50001-84b6dc5555-zmk7q
    

正在清除所用資源

如要移除服務和部署作業,請使用 kubectl delete

kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml