本主题介绍如何使用 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将上下文切换到用户集群。 将 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
您可以通过创建部署并使用 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: 50001NLB 公共
您可以通过将注释
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: 50001NLB 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
问题排查
如果您无法访问负载均衡器端点,请尝试标记您的子网。