網路負載平衡
本主題說明如何使用 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 需要選取要放置負載平衡器的子網路。系統會根據叢集的建立參數,選擇這個預設服務負載平衡器子網路,如下所示:
- 如果指定且非空白,則
cluster.networking.serviceLoadBalancerSubnetId
- 否則請
cluster.controlPlane.subnetId
或者,您也可以在 Service 中加入 service.beta.kubernetes.io/azure-load-balancer-internal-subnet
註解,指定要用於特定負載平衡器的子網路。這項註解的值是子網路的名稱。
建立 LoadBalancer 範例
您會建立部署,並透過服務公開該部署,藉此建立負載平衡器。
建立部署作業。這個部署中的容器會監聽通訊埠 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"
使用
kubectl apply
建立 Deployment:kubectl apply -f my-deployment-50001.yaml
確認有三個 Pod 正在執行:
kubectl get pods --selector=app=products
為部署建立
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
使用
kubectl apply
建立服務:kubectl apply -f my-lb-service.yaml
使用
kubectl get service
查看服務的地址。kubectl get service my-lb-service
輸出內容會包含
EXTERNAL-IP
資料欄,其中列出負載平衡器的位址 (視負載平衡器的建立方式而定,可能是公開或私人位址)。如果您已建立公開負載平衡器,可以使用
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