本主题介绍如何使用 GKE on AWS 设置 AWS Elastic Load Balancer (ELB)。
创建 LoadBalancer
类型的 Service 时,GKE on AWS 控制器会在 AWS 上配置传统或网络 ELB。
您还可以按照快速入门通过 Google Cloud 控制台创建面向外部的传统 ELB 或创建 AWS 应用负载均衡器 (ALB)。
准备工作
在开始使用 GKE on AWS 之前,请确保您已执行以下任务:
- 完成前提条件。
- 安装管理服务。
- 创建用户集群。
- 在
anthos-aws
目录中,使用anthos-gke
将上下文切换到用户集群。cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
将 CLUSTER_NAME 替换为用户集群名称。 - 安装
curl
命令行工具或类似工具。
选择外部或内部负载平衡器
GKE on AWS 会根据 LoadBalancer 资源的注释,创建外部负载平衡器(在公共子网中)或内部负载平衡器(在专用子网中)。
如果选择外部负载平衡器,该节点池的安全群组和子网的网络访问控制列表 (ACL) 允许的 IP 地址可以访问该负载平衡器。
选择负载平衡器类型
选择您是要创建传统负载平衡器(传统 ELB)还是网络负载平衡器 (NLB)。如需详细了解负载均衡器类型之间的区别,请参阅 AWS 文档中的负载均衡器类型。
创建 LoadBalancer
您可以通过创建部署并使用 Service 公开该部署来创建负载平衡器。
创建您的部署。此 Deployment 中的容器会侦听端口 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
的 Service。您可以在公共子网或专用子网上创建传统网络或网络 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 公共
您可以通过将注释
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
Classic Private
您可以通过将注释
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
创建 Service:env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f my-lb-service.yaml
使用
kubectl get service
查看 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
。如果您已创建面向外部的负载平衡器并且有权访问公共 VPC 子网,则可以使用
curl
连接到负载平衡器。将 external-ip 替换为上一步的kubectl get service
输出中的 IP。curl external-ip:60000
输出类似以下内容:
Hello, world! Version: 2.0.0 Hostname: my-deployment-50001-84b6dc5555-zmk7q
清理
如需移除 Service 和 Deployment,请使用 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 Console 创建面向外部的经典 ELB。
阅读在 Google Cloud 上运行 GKE 文档中的使用 Service 公开应用。