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

上次更新时间:2021 年 4 月 21 日

我想自动发现我的 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 或 HTTPS 流量路由到集群中的不同 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/cluster/$CLUSTER_NAME            where $CLUSTER_NAME is the same CLUSTER_NAME that you pass to the controller in the --cluster-name option; the value must be set to owned or shared
kubernetes.io/role/internal-elb                should be set to 1 or an empty tag value for internal load balancers
kubernetes.io/role/elb                         should be set to 1 or an empty tag value for internet-facing load balancers

注意:您可以使用标签进行自动发现,代替手动查看 alb.ingress.kubernetes.io/subnet 注释。

使用内部负载均衡器的集群的子网的正确标签示例:

kubernetes.io/cluster/$CLUSTER_NAME    shared
kubernetes.io/role/internal-elb          1

使用公有负载均衡器的集群的子网的正确标签示例:

kubernetes.io/cluster/$CLUSTER_NAME      shared
kubernetes.io/role/elb                     1

重要提示: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:)。