本主題說明如何使用 GKE on AWS 設定 AWS Elastic Load Balancer (ELB)。
建立 LoadBalancer
類型的 Service 時,AWS 上的 GKE 控制器會在 AWS 上設定傳統或網路 ELB。
您也可以按照快速入門導覽課程,從 Google Cloud 控制台建立面向外部的傳統 ELB,或參閱「建立 AWS 應用程式負載平衡器 (ALB)」。
事前準備
開始使用 GKE on AWS 前,請務必完成下列工作:
- 完成必要條件。
- 安裝管理服務。
- 建立使用者叢集。
- 在
anthos-aws
目錄中,使用anthos-gke
將環境切換至使用者叢集。 將 CLUSTER_NAME 替換為使用者叢集名稱。cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
- 安裝
curl
指令列工具或類似工具。
選取外部或內部負載平衡器
GKE on AWS 會根據 LoadBalancer 資源的註解,建立外部 (位於公開子網路中) 或內部 (位於私有子網路中) 負載平衡器。
如果您選取外部負載平衡器,則只有節點集區安全群組和子網路網路存取控制清單 (ACL) 中允許的 IP 位址可以存取。
選擇負載平衡器類型
選擇要建立傳統負載平衡器 (傳統 ELB) 或網路負載平衡器 (NLB)。如要進一步瞭解負載平衡器類型的差異,請參閱 AWS 說明文件中的「負載平衡器類型」。
建立 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:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-deployment-50001.yaml
確認有三個 Pod 正在執行:
env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
為部署建立
LoadBalancer
類型的服務。您可以在公開或私人的子網路上建立傳統或網路 ELB。選擇下列其中一個選項:- 公有子網路上的傳統 ELB
- 公用子網路上的 NLB
- 私人子網路上的傳統 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 Public
您可以透過設定註解
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
傳統私人
您可以將註解
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 Private
您可以設定註解來建立私有 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
建立服務:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
使用
kubectl get service
查看服務的主機名稱。env HTTPS_PROXY=http://localhost:8118 \ kubectl get service my-lb-service \ --output jsonpath="{.status.loadBalancer.ingress..hostname}{'\n'}"
輸出內容會類似以下內容:
elb-id.elb.aws-region.amazonaws.com
如果您已建立面向外部的負載平衡器,且有權存取公開虛擬私有雲子網路,即可使用
curl
連線至負載平衡器。將 external-ip 替換為上一步中kubectl get service
的輸出 IP。curl external-ip:60000
輸出結果會與下列內容相似:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
正在清除所用資源
如要移除服務和部署作業,請使用 kubectl delete
。
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-lb-service.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f my-deployment-50001.yaml
疑難排解
如果無法存取負載平衡器端點,請嘗試標記子網路。
後續步驟
按照快速入門導覽課程的說明,透過 Google Cloud 控制台建立面向外部的傳統 ELB。
請參閱「 Google Cloud 」的 GKE 說明文件,瞭解如何使用服務公開應用程式。