本頁說明如何使用 AWS Elastic Load Balancer (ELB) 或 Network Load Balancer (NLB) 端點,設定 L4 負載平衡器。
如要進一步瞭解可搭配 GKE on AWS 使用的其他負載平衡器類型,請參閱負載平衡器總覽。
本頁內容適用於想要安裝、設定及支援網路設備的網路專家。如要進一步瞭解內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。 Google Cloud
事前準備
- 建立叢集,並設定
kubectl
以連線至該叢集。 - 為服務負載平衡器子網路加上標記。 這是子網路自動探索的必要條件。
- 決定是否需要傳統或網路 ELB。
- 決定是否需要面向網際網路或內部負載平衡器。
選擇負載平衡器類型
GKE on AWS 會建立 Service 負載平衡器,做為 AWS Classic Elastic Load Balancer (Classic ELB) 或 NLB。根據預設,GKE on AWS 會建立 Classic ELB。如要建立 NLB,請將 service.beta.kubernetes.io/aws-load-balancer-type
註解設為 nlb
。如要進一步瞭解負載平衡器類型的差異,請參閱 AWS 說明文件中的「負載平衡器類型」。
選擇連結網際網路或內部負載平衡器
服務負載平衡器可以是面向網際網路 (具有可公開解析的 DNS 名稱),也可以是內部負載平衡器 (只能在虛擬私有雲內存取)。
根據預設,新的負載平衡器會連結網際網路。如要建立內部負載平衡器,請在資訊清單中將 service.beta.kubernetes.io/aws-load-balancer-internal
註解設為 "true"
。
您無法將 aws-load-balancer-internal
註解套用至現有服務。如要在連結網路和內部設定之間切換,您必須刪除並重新建立現有的 LoadBalancer。
選擇子網路
建立負載平衡器時,AWS 需要知道要將負載平衡器放在哪個子網路中。根據預設,系統會從 VPC 的子網路中自動探索這些子網路。這項作業需要子網路具有特定標記。如要瞭解子網路自動探索和標記的詳細資料,請參閱負載平衡器子網路。
或者,您也可以使用註解指定負載平衡器子網路,方法是在服務中新增 service.beta.kubernetes.io/aws-load-balancer-subnets
註解。這項註解的值是以半形逗號分隔的子網路 ID 或子網路名稱清單,例如 subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef
。
建立範例負載平衡器
建立 Deployment 物件並使用 Service 將其公開,即可建立 LoadBalancer 類型的 Service。在下列範例中,您會建立範例負載平衡器。
建立部署作業。這個部署中的容器會監聽通訊埠 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
類型的服務。決定所需的負載平衡器類型:
- 連至網際網路的傳統 ELB
- 連結網際網路的 NLB
- 內部 Classic ELB
- 內部 NLB
選擇符合需求的索引標籤,然後將其中的資訊清單複製到名為「
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
連結網際網路的 NLB
您可透過設定註解
service.beta.kubernetes.io/aws-load-balancer-type
為nlb
,建立 NLB。下列 YAML 包含這項註解。apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
Internal Classic
您可以將註解
service.beta.kubernetes.io/aws-load-balancer-internal
設為"true"
,建立內部 LoadBalancer。下列 YAML 包含這項註解。apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" spec: type: LoadBalancer selector: app: products department: sales ports: - protocol: TCP port: 60000 targetPort: 50001
內部 NLB
您可以設定註解來建立內部 NLB:
service.beta.kubernetes.io/aws-load-balancer-internal
至"true"
service.beta.kubernetes.io/aws-load-balancer-type
至nlb
下列 YAML 包含這兩項註解。
apiVersion: v1 kind: Service metadata: name: my-lb-service annotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" service.beta.kubernetes.io/aws-load-balancer-type: nlb 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
連線至負載平衡器:curl http://EXTERNAL_IP:60000
將
EXTERNAL_IP
替換成上一個步驟中 EXTERNAL-IP 欄的位址。
輸出結果會與下列內容相似:
```none
Hello, world!
Version: 2.0.0
Hostname: my-deployment-50001-84b6dc5555-zmk7q
```
正在清除所用資源
如要移除 Service 和 Deployment,請使用 kubectl delete
指令:
kubectl delete -f my-lb-service.yaml
kubectl delete -f my-deployment-50001.yaml
後續步驟
如要進一步瞭解 GKE on Google Cloud ,請參閱「使用服務公開應用程式」說明文件。
如需支援的註解完整清單,請參閱這個頁面。