我想自动发现我的 Application Load Balancer (ALB) 在 Amazon Elastic Kubernetes Service (Amazon EKS) 中使用的子网。
简短描述
您可以标记 AWS 子网,允许 AWS Load Balancer 控制器自动发现 Application Load Balancer 使用的子网。
解决方法
1. 为 Amazon EKS 集群部署 AWS Load Balancer(亚马逊云科技负载均衡器)控制器。
2. 验证已安装了 AWS Load Balancer 控制器:
kubectl get deployment -n kube-system aws-load-balancer-controller
**注意:**如果部署在不同的命名空间中,则用适当的命名空间替换 -n kube-system。
3. 使用以下注释在集群上创建 Kubernetes 入口资源:
annotations:
kubernetes.io/ingress.class: alb
**注意:**AWS Load Balancer(亚马逊云科技负载均衡器)控制器会创建负载均衡器。入口资源将 Application Load Balancer 配置为将 HTTP(S) 流量路由到集群中的不同 Pod。
4. 添加 internal(内部)或 internet-facing(面向互联网)注释,以指定您希望入口在何处创建负载均衡器:
alb.ingress.kubernetes.io/scheme: internal
-或者-
alb.ingress.kubernetes.io/scheme: internet-facing
**注意:**选择 internal(内部)可创建内部负载平衡器,选择 internet-facing(面向互联网)可创建公有负载均衡器。
5. 使用标签允许 Application Load Balancer 入口控制器使用自动发现创建负载均衡器。例如:
kubernetes.io/role/internal-elb Set to 1 or empty tag value for internal load balancers
kubernetes.io/role/elb Set to 1 or empty tag value for internet-facing load balancers
**注意:**您可以使用标签进行自动发现,代替手动查看 alb.ingress.kubernetes.io/subnet 注释。
使用内部负载均衡器的集群的子网的正确标签示例:
kubernetes.io/role/internal-elb 1
使用公有负载均衡器的集群的子网的正确标签示例:
kubernetes.io/role/elb 1
**注意:**对于集群 1.18 及更早版本,Amazon EKS 会将以下标签添加到集群创建期间传入的所有子网。该标签没有添加到版本 1.19 集群中。如果您正在使用该标签并且从早期版本更新到集群版本 1.19,则无需再次添加该标签。该标签保留在您的子网上。您可以使用以下标签控制 Application Load Balancer 的预置位置。除了自动预置 Application Load Balancer 所需的子网标签之外,还可以使用此标签。
kubernetes.io/cluster/$CLUSTER_NAME shared
重要提示:AWS Load Balancer(亚马逊云科技负载均衡器)控制器工作流程会检查子网标签的值是否为" "(空字符串)和 1。对于私有子网,将 kubernetes.io/role/internal-elb 标签的值设置为空字符串或 1。对于公有子网,将 kubernetes.io/role/elb 标签的值设置为空字符串或 1。这些标签允许从 Application Load Balancer 的 Amazon EKS VPC 子网中自动发现您的子网。
6. 验证您的 Amazon EKS VPC 子网是否具有正确的标签:
aws ec2 describe-subnets --subnet-ids your-subnet-xxxxxxxxxxxxxxxxx
7. 部署示例应用程序,以验证 AWS Load Balancer 控制器因入口对象而创建了 Application Load Balancer:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/examples/2048/2048_full.yaml
8. 验证入口资源已创建并与 Application Load Balancer 关联:
kubectl get ingress/2048-ingress -n 2048-game
创建内部或面向互联网的负载均衡器,具体取决于您在入口对象和子网中定义的注释 (alb.ingress.kubernetes.io/scheme:)。