本页面介绍如何使用 AWS Elastic Load Balancer (ELB) 或网络负载均衡器 (NLB) 端点设置 L4 负载均衡器。
如需详细了解可与 GKE on AWS 配合使用的其他类型的负载平衡器,请参阅负载平衡器概览。
准备工作
- 创建集群并将
kubectl
配置为连接到该集群。 - 标记您的服务负载均衡器子网。这是子网自动发现功能所必需的。
- 确定您需要传统 ELB 还是网络 ELB。
- 确定您需要面向互联网的负载均衡器还是内部负载均衡器。
选择负载均衡器类型
GKE on AWS 会创建一个 Service 负载均衡器,并将其作为 AWS 传统 Elastic Load Balancer(传统 ELB)或 NLB。默认情况下,GKE on AWS 会创建一个传统 ELB。如需创建 NLB,请将 service.beta.kubernetes.io/aws-load-balancer-type
注解设置为 nlb
。如需详细了解负载均衡器类型之间的差异,请参阅 AWS 文档中的负载均衡器类型。
选择面向互联网的负载均衡器或内部负载均衡器
服务负载均衡器可以是面向互联网的(具有可公开解析的 DNS 名称),也可以是内部的(仅在 VPC 内可访问)。
默认情况下,新创建的负载均衡器是面向互联网的。如需创建内部负载均衡器,请在清单中将 service.beta.kubernetes.io/aws-load-balancer-internal
注解设置为 "true"
。
您不能将 aws-load-balancer-internal
注解应用于现有 Service。如需在面向互联网配置和内部配置之间更改,您必须删除并重新创建现有的 LoadBalancer。
选择您的子网
创建负载均衡器时,AWS 需要知道将其放入哪些子网。默认情况下,系统会自动从 VPC 的子网中发现这些子网。这要求子网具有特定标记。如需详细了解子网自动发现和标记,请参阅负载均衡器子网。
或者,您也可以通过向 Service 添加 service.beta.kubernetes.io/aws-load-balancer-subnets
注解来指定负载均衡器子网。此注解的值是以英文逗号分隔的子网 ID 或子网名称列表,例如 subnet-012345678abcdef,subnet-abcdef123456789,subnet-123456789abcdef
。
创建示例负载均衡器
您可以通过创建部署并使用 Service 公开该部署来创建 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:kubectl apply -f my-deployment-50001.yaml
确认三个 Pod 是否正在运行:
kubectl get pods --selector=app=products
为您的部署创建
LoadBalancer
类型的 Service。确定所需的负载均衡器类型:
- 面向互联网的传统 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
内部传统版
您可以通过将注解
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
创建 Service:kubectl apply -f my-lb-service.yaml
使用
kubectl get service
查看 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 文档,请参阅使用 Service 公开应用。
请参阅支持的注解的完整列表。