在AWS EKS部署ALB

金何平
2023-12-01

一、前置条件

在AWS EKS中service默认的LoadBalance模式是CLB

如果需要使用ALBNLB则需要安装AWS Load Balancer Controller

安装AWS负载均衡器控制器前需要为集群创建IAM OIDC提供商

二、创建IAM OIDC提供商

  1. 确定集群是否拥有现有 IAM OIDC 提供商。

    查看集群的 OIDC 提供商 URL。

    aws eks describe-cluster --name <cluster_name> --query "cluster.identity.oidc.issuer" --output text
    

    输出示例:

    https://oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E
    

    列出您账户中的所有 OIDC 提供商。将 <EXAMPLED539D4633E53DE1B716D3041E>(包括 <>)替换为上一个命令返回的值。

    aws iam list-open-id-connect-providers | grep <EXAMPLED539D4633E53DE1B716D3041E>
    

    输出示例

    "Arn": "arn:aws-cn:iam::111122223333:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/EXAMPLED539D4633E53DE1B716D3041E"
    

    如果上一个命令返回了输出,则表示您的集群已经有提供商。如果没有返回输出,则您必须创建 IAM OIDC 提供商。

  2. 使用以下命令为您的集群创建 IAM OIDC 身份提供商。将 <cluster_name>(包括 <>)替换为您自己的值。

    eksctl utils associate-iam-oidc-provider --cluster <cluster_name> --approve
    

三、安装AWS Load Balancer Controller

  1. 下载AWS负载均衡器控制器的 IAM 策略,该策略允许负载均衡器代表您调用 AWS API。您可以查看 GitHub 上的策略文档

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

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

    记下返回的策略 ARN。

  3. my_cluster 替换为您的集群的名称,并将 111122223333 替换为您的账户 ID,然后运行命令。

    eksctl create iamserviceaccount \
      --cluster=my_cluster \
      --namespace=kube-system \
      --name=aws-load-balancer-controller \
      --attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
      --override-existing-serviceaccounts \
      --approve          
    
  4. 使用 Helm V3 或更高版本来安装AWS负载均衡器控制器

    a. 安装 TargetGroupBinding 自定义资源定义。

    kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master"
    

    b. 添加 eks-charts 存储库。

    helm repo add eks https://aws.github.io/eks-charts
    

    c. 更新您的本地存储库,以确保您拥有最新的图表。

    helm repo update
    

    d. 安装AWS负载均衡器控制器。

    重要

    如果要将控制器部署到被限制访问 Amazon EC2 实例元数据服务 (IMDS) 的 Amazon EC2 节点,或者部署到 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 \
      -n kube-system
    
  5. 验证控制器是否已安装。

    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
    

四、应用中部署ALB

https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.3/guide/ingress/annotations/

参考

AWS Load Balancer Controller: https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.3/

 类似资料: