如何自动发现 Application Load Balancer 在 Amazon EKS 中使用的子网?

上次更新日期:2021 年 8 月 3 日

我想自动发现我的 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:)。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?