Como configuro um Application Load Balancer usando o AWS Load Balancer Controller em um grupo de nós do Amazon EC2 no Amazon EKS?

6 minuto de leitura
0

Quero configurar um Application Load Balancer usando o AWS Load Balancer Controller em um grupo de nós do Amazon Elastic Compute Cloud (Amazon EC2) no Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descrição

Conecte o AWS Load Balancer Controller a um dos seguintes endpoints de serviço da AWS:

  • AWS Identity and Access Management (IAM)
  • Amazon EC2
  • AWS Certificate Manager (ACM)
  • Elastic Load Balancing (ELB)
  • Amazon Cognito
  • AWS WAF
  • AWS Shield

Para que o AWS Load Balancer Controller funcione, você deve ter uma conexão de saída com a Internet. Para obter mais informações, consulte Como configuro sub-redes para um cluster do Amazon EKS?

Para implantar o AWS Load Balancer Controller no AWS Fargate, consulte Como configuro o AWS Load Balancer Controller em um cluster do Amazon EKS para o Fargate e implanto o jogo 2048?

Resolução

Marque suas sub-redes para permitir a descoberta automática

Marque as sub-redes do Amazon Virtual Private Cloud (Amazon VPC) em seu cluster Amazon EKS. Isso permite que seu controlador do AWS Load Balancer descubra automaticamente sub-redes quando você cria o recurso Application Load Balancer.

Para Application Load Balancers públicos, você deve ter pelo menos duas sub-redes públicas na VPC do seu cluster com as seguintes tags:

kubernetes.io/role/elb

Para Application Load Balancers internos, você deve ter pelo menos duas sub-redes privadas na VPC do seu cluster com as seguintes tags:

kubernetes.io/role/internal-elb

Crie um provedor de identidade OIDC para seu cluster

Use o eksctl ou o Console de Gerenciamento da AWS para criar um provedor de identidade OpenID Connect (OIDC) para usar com perfis do IAM para contas de serviço.

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Você também pode usar a CLI do AWSL para criar um provedor de identidade OIDC para seu cluster. Por exemplo:

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

Observação: substitua cluster-name pelo nome do cluster, region-name pela região da AWS e ca-thumbprint pela impressão digital do seu certificado CA raiz. Você pode obter a impressão digital do certificado de CA raiz que seu cluster usa com oidc.eks.region-name.amazonaws.com.

Crie uma política do IAM para o AWS Load Balancer Controller

A política do Amazon EKS que você cria permite que o AWS Load Balancer Controller faça chamadas para as APIs da AWS. É uma prática recomendada usar perfis do AWS IAM para contas de serviço quando você concede acesso às APIs da AWS.

  1. Baixe uma política de IAM para o AWS Load Balancer Controller no GitHub. Execute um dos seguintes comandos com base na sua região.
    Todas as regiões, exceto as regiões da China:

    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

    Regiões de Pequim e Ningxia na China:

    curl -o iam-policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy_cn.json
  2. Para criar uma política do IAM chamada AWSLoadBalancerControllerIAMPolicy para seu perfil de instância do nó de processamento, execute o seguinte comando:

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \
        --policy-document file://iam-policy.json
  3. Observe o ARN da política que é retornado na saída.

  4. Use o perfil do IAM existente ou crie um novo perfil do IAM para o AWS Load Balancer Controller.
    Observação: para usar eksctl para criar um perfil do IAM, use o parâmetro —attach-policy-arn com o ARN da política do IAM AWSLoadBalancerControllerIAMPolicy.

  5. Para anexar o AWSLoadBalancerControllerIamPolicy aos perfis do IAM, execute o seguinte comando:

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

    **Observação:**Substitua 111122223333 pelo ID da conta da AWS e role-name pelo nome do perfil do IAM.

Implante o AWS Load Balancer Controller

  1. Verifique se você tem as tags necessárias para o balanceador de carga associado às suas sub-redes.

  2. Instale o cert-manager para que você possa injetar a configuração do certificado nos webhooks. Use o Kubernetes 1.16 ou posterior para executar o seguinte comando:

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/$VERSION/cert-manager.yaml
  3. No arquivo de manifesto que você baixou do GitHub, execute o seguinte comando:

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

    Observação: substitua $VERSION pela versão do AWS Load Balancer Controller que você deseja implantar e modifique o nome do arquivo, como v2_6_2_full.yaml para v2.6.2. Para obter mais informações, consulte The Kubernetes repository no GitHub. 

  4. Edite o cluster-name para seu cluster. Por exemplo:

    spec:    
        containers:
        - args:
            - --cluster-name=your-cluster-name # edit the cluster name
            - --ingress-class=alb
  5.  Atualize somente a seção ServiceAccount do arquivo. Por exemplo:

    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

    Observação: substitua 111122223333 pelo ID da conta da AWS e role-name pelo nome do perfil do IAM.

  6. Para implantar o AWS Load Balancer Controller, execute o seguinte comando:

    kubectl apply -f ingress-controller.yaml

Implante um aplicativo de amostra para testar o AWS Load Balancer Controller

Implante um aplicativo de amostra para verificar se o AWS Load Balancer Controller cria um Application Load Balancer público por causa do objeto Ingress.

  1. Para implantar um jogo chamado 2048 como aplicativo de amostra, execute o seguinte comando:
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Observação: substitua $VERSION pela versão (do site Kubernetes SIGs no GitHub) do AWS Load Balancer Controller que você deseja implantar.
  2. Para verificar se o recurso Ingress foi criado, aguarde alguns minutos e execute o seguinte comando:
    kubectl get ingress/ingress-2048 -n game-2048
    Você recebe uma saída semelhante ao seguinte exemplo:
    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
     
  3. Se Ingress não for criado após alguns minutos, execute o seguinte comando para visualizar os logs do AWS Load Balancer Controller:
    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
    Observação: os logs do AWS Load Balancer Controller podem mostrar mensagens de erro para ajudar você a solucionar problemas com sua implantação.
  4. Para ver o aplicativo de amostra, abra um navegador da Web e acesse o endereço URL da saída na etapa 2.
  5. Para limpar o aplicativo de amostra, execute o seguinte comando:
    kubectl delete -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/$VERSION/docs/examples/2048/2048_full.yaml
    Observação: substitua $VERSION pela versão (do site Kubernetes SIGs no GitHub) do AWS Load Balancer Controller que você deseja implantar.

Informações relacionadas

Como soluciono problemas de balanceadores de carga criados pelo controlador de serviço Kubernetes no Amazon EKS?

Como posso solucionar problemas ao criar um balanceador de carga usando o AWS Load Balancer Controller?

AWS OFICIAL
AWS OFICIALAtualizada há um ano