AmazonLoad Balancer - Amazon EKS
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AmazonLoad Balancer

这些区域有:AmazonLoad Balancer 控制器管理Amazon库贝内特群集的弹性负载均衡器。控制器配置以下资源。

  • 一个Amazon当您创建 Kubernetes 时,Application Load Balancer (ALB)Ingress

  • 一个AmazonNetwork Load Balancer (NLB) 当您创建一个库贝内特Service的类型LoadBalancer。在过去,您使用 Kubernetes 树内负载均衡器实例目标,但使用Amazon负载均衡器控制器IP目标。随着Amazon负载平衡器控制器 2.2.0 版或更高版本,您可以使用任一目标类型创建网络 Load Balancer。有关 NLB 目标类型的更多信息,请参阅Target type网络负载均衡器用户指南中。

控制器以前被命名为AmazonALB 入口控制器。这是一个开源项目GitHub。本主题帮助您使用默认选项安装控制器。您可以查看完整的文档用于 GitHub 上的控制器。在部署控制器之前,我们建议您查看Amazon EKS 上的 Application Load BalancingAmazon EKS 上的网络负载均衡器。这些主题还包括部署示例应用程序的步骤,这些应用程序要求控制器置备Amazon资源的费用。

Prerequisites

  • 使用现有 集群。如果您没有现有集群,请参阅Amazon EKS 入门

  • 为您的集群提供 OpenID Connect (OIDC) 提供商。要确定您是否有现有的 OIDC 提供程序,或为您的集群启用 OIDC 提供程序,请参阅为您的集群创建 IAM OIDC 提供商

部署AmazonLoad Balancer 控制器连接到 Amazon EKS 群集

在以下步骤中,将example values使用您自己的值。

  1. 为下载 IAM 策略AmazonLoad Balancer 控制器,允许它调用Amazon代表您使用 API。您可以查看 GitHub 上的策略文档

    curl -o iam_policy_cn.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/iam_policy_cn.json
  2. 使用上一步中下载的策略创建 IAM 策略。

    记下返回的策略 ARN。

  3. 创建 IAM 角色并注释名为aws-load-balancer-controller中的kube-system命名空间Amazon使用 Load Balancer 控制器eksctl或Amazon Web Services Management Console和kubectl

    eksctl

    Replace我的集群将替换为您集群的名称,111122223333,然后运行命令。

    eksctl create iamserviceaccount \ --cluster=my_cluster \ --namespace=kube-system \ --name=aws-load-balancer-controller \ --attach-policy-arn=arn:aws-cn:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \ --override-existing-serviceaccounts \ --approve
    Amazon Web Services Management Console and kubectl

    使用Amazon Web Services Management Console和 kubectl

    1. 通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/

    2. 在导航面板中,选择角色创建角色

    3. Select type of trusted entity (选择受信任实体的类型) 部分中,选择 Web identity (Web 身份)

    4. Choose a web identity provider (选择 Web 身份提供商) 部分中:

      1. 对于 Identity provider (身份提供商),选择您集群的 URL。

      2. 对于 Audience (受众),请选择 sts.amazonaws.com

    5. 选择 Next:。Permissions (下一步:权限)

    6. 附加策略部分中,选择AWSLoadBalancerControllerIAMPolicy策略,您在步骤 2 中创建以用于服务帐户的策略。

    7. 选择 Next:。标签

    8. Add tags (optional) (添加标签(可选)) 屏幕上,您可以为账户添加标签。选择 Next:。审核

    9. 适用于角色名称中,为您的角色输入一个名称,例如AmazonEKSLoadBalancerControllerRole,然后选择创建角色

    10. 创建角色后,在控制台中选择角色以将其打开进行编辑。

    11. 选择 Trust relationships 选项卡,然后选择 Edit trust relationship

    12. 找到类似于以下内容的行:

      "oidc.eks.cn-north-1.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B716D3041E:aud": "sts.amazonaws.com"

      更改此行,使它与如下一行类似。ReplaceEXAMPLED539D4633E53DE1B716D3041E替换为集群的 OIDC 提供商 ID,并将region-code使用您的集群所在的区域代码。

      "oidc.eks.region-code.amazonaws.com.cn/id/EXAMPLED539D4633E53DE1B716D3041E:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
    13. 选择 Update Trust Policy (更新可信策略) 以完成操作。

    14. 记下角色的 ARN,以便在后续步骤中使用。

    15. 将以下内容保存到名为的文件中。aws-load-balancer-controller-service-account.yaml, 将替换为111122223333将替换为您的账户 ID。

      apiVersion: v1 kind: ServiceAccount metadata: labels: app.kubernetes.io/component: controller app.kubernetes.io/name: aws-load-balancer-controller name: aws-load-balancer-controller namespace: kube-system annotations: eks.amazonaws.com/role-arn: arn:aws-cn:iam::111122223333:role/AmazonEKSLoadBalancerControllerRole
    16. 在群集上创建服务帐户。

      kubectl apply -f aws-load-balancer-controller-service-account.yaml
  4. 如果您当前有AmazonALB 入口控制器安装 Kubernetes,卸载它。这些区域有:AmazonLoad Balancer 器控制器替换AmazonKubernetes 的 ALB 入口控制器。

    1. 检查是否已安装控制器。

      kubectl get deployment -n kube-system alb-ingress-controller

      如果未安装控制器,则输出。跳至步骤 5

      Error from server (NotFound): deployments.apps "alb-ingress-controller" not found

      如果安装了控制器,则输出。

      NAME READY UP-TO-DATE AVAILABLE AGE alb-ingress-controller 1/1 1 1 122d
    2. 输入以下命令以卸下控制器。

      kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/alb-ingress-controller.yaml kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-alb-ingress-controller/v1.1.8/docs/examples/rbac-role.yaml
    3. 将以下 IAM 策略添加到步骤 3 中创建的 IAM 角色。该策略允许AmazonLoad Balancer 器控制器访问由 ALB 入口控制器为 Kubernetes 创建的资源。

      1. 下载 IAM 策略。您还可以查看策略

        curl -o iam_policy_v1_to_v2_additional.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/iam_policy_v1_to_v2_additional.json
      2. 创建 IAM 策略并记下返回的 ARN。

        aws iam create-policy \ --policy-name AWSLoadBalancerControllerAdditionalIAMPolicy \ --policy-document file://iam_policy_v1_to_v2_additional.json
      3. 将 IAM 策略附加到您在步骤 3 中创建的 IAM 角色。Replaceyour-role-name替换为角色的名称。如果您使用eksctl,然后要查找已创建的角色名称,请打开Amazon CloudFormation控制台,然后选择ekscl-您的群集名称-插件 iam服务帐户-kube 系统 Amazon 负载平衡器控制器堆栈。选择 Resources 选项卡。角色名称位于实体 IDcolumn. 如果您使用Amazon Web Services Management Console来创建角色,那么角色名称就是您命名的任何内容,例如AmazonEKSLoadBalancerControllerRole

        aws iam attach-role-policy \ --role-name eksctl-your-role name \ --policy-arn arn:aws-cn:iam::111122223333:policy/AWSLoadBalancerControllerAdditionalIAMPolicy
  5. 安装Amazon使用 Helm V3 或更高版本或通过应用 Kubernetes 清单来 Load Balancer 控制器。

    Helm V3 or later
    1. 安装TargetGroupBinding自定义资源定义。

      kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"
    2. 添加eks-charts存储库。

      helm repo add eks https://aws.github.io/eks-charts
    3. 更新您的本地回购以确保您拥有最新的图表。

      helm repo update
    4. 安装AmazonLoad Balancer 控制器。

      重要

      如果您要将控制器部署到您拥有的 Amazon EC2 节点对 Amazon EC2 实例元数据服务 (IMDS) 的受限访问,或者如果您要部署到 Fargate,则需要将以下标志添加到您运行的命令中:

      • --set region=region-code

      • --set vpcId=vpc-xxxxxxxx

      helm upgrade -i aws-load-balancer-controller eks/aws-load-balancer-controller \ --set clusterName=cluster-name \ --set serviceAccount.create=false \ --set serviceAccount.name=aws-load-balancer-controller \ --set enableShield=false \ --set enableWaf=false \ --set enableWafv2=false \ --set image.repository=918309763551.dkr.ecr.cn-north-1.amazonaws.com.cn/amazon/aws-load-balancer-controller \ -n kube-system
      重要

      部署的图表不会自动接收安全更新。当可用时,您需要手动升级到较新的图表。

    Kubernetes manifest
    1. 安装cert-manager将证书配置注入到 webhook 中。

      kubectl apply \ --validate=false \ -f https://github.com/jetstack/cert-manager/releases/download/v1.1.1/cert-manager.yaml
    2. 安装控制器。

      1. 下载控制器规范。有关控制器的更多信息,请参阅文档(位于 GitHub 上)。

        curl -o v2_2_0_full.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.2.0/docs/install/v2_2_0_full.yaml
      2. v2_2_0_full.yamlfile:

        • 删除存储在设备上的ServiceAccount部分。删除此部分可防止在部署控制器时覆盖带有 IAM 角色的注释,并在删除控制器时保留您在步骤 4 中创建的服务账户。

        • Replaceyour-cluster-name添加到Deployment spec部分,其中包含您的集群的名称。

        • 添加following parametersUnts--ingress-class=alb

          ... spec: containers: - args: - --cluster-name=your-cluster-name - --ingress-class=alb --enable-shield=false --enable-waf=false --enable-wafv2=false ...
      3. 应用文件。

        kubectl apply -f v2_2_0_full.yaml
  6. 验证是否已安装控制器。

    kubectl get deployment -n kube-system aws-load-balancer-controller

    输出

    NAME READY UP-TO-DATE AVAILABLE AGE aws-load-balancer-controller 2/2 2 2 84s
  7. 在使用控制器设置Amazon资源,您的集群必须满足特定要求。有关更多信息,请参阅 Amazon EKS 上的 Application Load BalancingAmazon EKS 上的网络负载均衡器