如何在 Amazon EKS 中的 Amazon EC2 节点组上使用 AWS 负载均衡器控制器设置 Application Load Balancer?

3 分钟阅读
0

我想在 Amazon Elastic Kubernetes Service(Amazon EKS)中的 Amazon Elastic Compute Cloud(Amazon EC2)节点组上使用 AWS 负载均衡器控制器设置 Application Load Balancer。

简短描述

下面的步骤向您介绍如何使用 AWS 负载均衡器控制器在 Amazon EKS 中的 Amazon EC2 节点组上部署 Application Load Balancer。要创建网络负载均衡器,请参阅 AWS 负载均衡器控制器

AWS 负载均衡器控制器必须连接到 AWS 服务终端节点,例如 AWS Identity and Access Management (IAM)、EC2、AWS Certificate Manager (ACM)、Elastic Load Balancing、Amazon Cognito、AWS WAF 或 AWS Shield。这意味着您必须具有出站互联网连接,AWS 负载均衡器控制器才能正常工作。有关更多信息,请参阅如何为 Amazon EKS 集群配置我的子网?

要在 AWS Fargate 上部署 AWS 负载均衡器控制器,请参阅如何在用于 Fargate 的 Amazon EKS 集群上设置 AWS 负载均衡器控制器并部署 2048 游戏?

解决方法

标记子网以允许自动发现

标记 Amazon EKS 集群中的 Amazon VPC 子网,以允许 AWS 负载均衡器控制器在创建 Application Load Balancer 资源时自动发现子网。

对于公有 Application Load Balancer,您的集群 VPC 中必须至少有两个具有以下标签的公有子网:

kubernetes.io/role/elb

对于内部应用程序负载均衡器,您的集群 VPC 中必须至少有两个具有以下标签的私有子网:

kubernetes.io/role/internal-elb

**注意:**如果您在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新的 AWS CLI 版本

为您的集群创建 OIDC 身份提供商

要为您的集群创建 OpenID Connect (OIDC) 身份提供商,以便与服务账户的 AWS Identity and Access Management (IAM) 角色一起使用,请使用 eksctl 或 AWS 管理控制台

您还可以使用 AWSL CLI 为您的集群创建 OIDC 身份提供商。例如:

ISSUER_URL=$(aws eks describe-cluster --name cluster-name \
  --query "cluster.identity.oidc.issuer" --region region-name --output text)
aws iam create-open-id-connect-provider \
  --url ${ISSUER_URL} \
  --thumbprint-list ca-thumbprint \
  --client-id-list sts.amazonaws.com \
  --region region-name

**注意:**请将 cluster-name 替换为您的集群名称,将 region-name 替换为您的 AWS 区域,并将 ca-thumbprint 替换为根 CA 证书的指纹。您可以通过 oidc.eks.region-name.amazonaws.com 获取集群使用的根 CA 证书的指纹

为 AWS Load Balancer 控制器创建 IAM 策略

您创建的 Amazon EKS 策略允许 AWS Load Balancer 控制器代表您调用 AWS API。最佳做法是在授予用户对 AWS API 的访问权限时使用服务账户的 AWS IAM 角色

1.    要从 AWS GitHub 为 AWS Load Balancer 控制器下载 IAM 策略文档,请根据您的区域运行以下命令之一。

除中国区域之外的所有区域:

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json

-或者-

北京和宁夏中国区域:

curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json

2.    要为您的工作线程节点实例配置文件创建名为 AWSLoadBalancerControllerIAMPolicy 的 IAM 策略,请运行以下命令:

aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam-policy.json

3.    记下在步骤 2 的输出中返回的策略的 Amazon 资源名称 (ARN)。

4.    使用现有的 IAM 角色,或为 AWS 负载均衡器控制器创建新 IAM 角色

**提示:**要使用 eksctl 创建 IAM 角色,请结合使用 --attach-policy-arn 参数与 IAM 策略 AWSLoadBalancerControllerIAMPolicy 的 ARN。

5.    要将 AWSLoadBalancerControllerIAMPolicy 附加到您此前识别的 IAM 角色,请运行以下命令:

aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--role-name role-name

**注意:**请将 111122223333 替换为您的 AWS 账户 ID,将 role-name 替换为您的 IAM 角色名称。

部署 AWS Load Balancer 控制器

1.    对与您的子网关联的负载均衡器,验证您拥有所需的标签

2.    安装 cert-manager,以便您可以将证书配置注入 Webhook。

对于 Kubernetes 1.16 或更高版本:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml

对于 Kubernetes 1.15 或之前版本:

kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager-legacy.yaml

注意:用要部署的 cert-manager 版本(来自 Jetstack GitHub 网站,例如‘v1.6.0’)替换 $VERSION。

3.    在从 AWS GitHub 下载的 AWS 负载均衡器控制器的清单文件中,运行以下命令:

curl -Lo ingress-controller.yaml https://github.com/kubernetes-sigs/aws-load-balancer-controller/releases/download/$VERSION/v2_4_1_full.yaml

**注意:**用要部署的 AWS 负载均衡器控制器的版本(来自 Kubernetes SIGs GitHub 网站,例如“v2.4.1”)替换 $VERSION

4.    编辑集群的 cluster-name。例如:

spec:
    containers:
    - args:
        - --cluster-name=your-cluster-name # edit the cluster name
        - --ingress-class=alb

5.    仅更新文件的 ServiceAccount 部分。例如:

apiVersion: v1
kind: ServiceAccount
metadata:
  labels:
    app.kubernetes.io/component: controller
    app.kubernetes.io/name: aws-load-balancer-controller
  annotations:                                                                        # Add the annotations line
    eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/role-name              # Add the IAM role
  name: aws-load-balancer-controller
  namespace: kube-system

**注意:**请将 111122223333 替换为您的 AWS 账户 ID,将 role-name 替换为您的 IAM 角色名称。

6.    要部署 AWS Load Balancer 控制器,请运行以下命令:

kubectl apply -f ingress-controller.yaml

部署示例应用程序来测试 AWS 负载均衡器控制器

部署示例应用程序,以验证 AWS 负载均衡器控制器因入口对象而创建了公有 Application Load Balancer。

1.    要部署名为 2048 的游戏作为示例应用程序,请运行以下命令:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

**注意:**用要部署的 AWS Load Balancer 控制器的版本(来自 Kubernetes SIGs GitHub 网站,例如‘v2.3.0’)替换 $VERSION

2.    要验证入口资源已创建,请等待几分钟,然后运行以下命令:

kubectl get ingress/ingress-2048 -n game-2048

您会收到类似如下内容的输出:

NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGE
ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s

如果在几分钟之后仍未创建入口,则运行以下命令以查看 AWS 负载均衡器控制器日志:

kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller

**注意:**AWS 负载均衡器控制器日志会显示错误消息,有助于您排查部署问题。

3.    要查看示例应用程序,请打开 Web 浏览器,然后转到从步骤 2 的输出中获得的 URL 地址。

4.    要清除示例应用程序,请运行以下命令:

kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml

**注意:**用要部署的 AWS Load Balancer 控制器的版本(来自 Kubernetes SIGs GitHub 网站,例如‘v2.3.0’)替换 $VERSION


相关视频

AWS 官方
AWS 官方已更新 2 年前