Ir para o conteúdo

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

6 minuto de leitura
0

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

Resolução

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

Pré-requisito: configure suas sub-redes para permitir o acesso de saída à Internet a partir de seus nós de processamento. O AWS Load Balancer Controller exige uma conexão de saída com a Internet.

Para implantar o AWS Load Balancer Controller no AWS Fargate, consulte Como faço para configurar o AWS Load Balancer Controller em um cluster do Amazon EKS para o Fargate?

Marcar as sub-redes

Marque as sub-redes do Amazon Virtual Private Cloud (Amazon VPC) em seu cluster do Amazon EKS. Depois de marcar suas sub-redes, seu AWS Load Balancer Controller descobre 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 a tag kubernetes.io/role/elb.

Para Application Load Balancers privados, você precisa ter pelo menos duas sub-redes privadas na VPC do seu cluster com a tag kubernetes.io/role/elb.

Criar um provedor de identidade OIDC

Use o console do Amazon EKS, a AWSL CLI ou eksctl para criar um provedor de identidade OIDC para usar com perfis do AWS Identity and Access Management (AWS IAM) para contas de serviço (IRSA).

Console Amazon EKS

Para usar o console, consulte Create an OIDC identity provider (AWS Console) (Criar um provedor de identidade OIDC (Console da AWS)).

AWSL CLI

Localize a impressão digital da autoridade de certificação (CA) raiz que seu cluster usa. Em seguida, execute o seguinte comando create-open-id-connect-provider:

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.

eksctl

Para usar a ferramenta de linha de comandos eksctl, consulte create an OIDC identity provider (eksctl) (criar um provedor de identidade OIDC (eksctl)).

Crie uma política do IAM

Crie uma política de IAM que permita que o AWS Load Balancer Controller faça chamadas para APIs da AWS.

Importante: é uma prática recomendada usar o IRSA ao conceder acesso às APIs da AWS.

Conclua as etapas a seguir:

  1. Execute um dos seguintes comandos com base na sua região para baixar uma política do IAM para o AWS Load Balancer Controller no GitHub.
    Para todas as regiões, exceto as regiões de Pequim e Ningxia, China, execute o seguinte comando describe-cluster:

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

    Observação: substitua example-cluster-name pelo nome do cluster, example-region-name pela sua região e example-issuer-url pelo URL do emissor.
    Para as regiões de Pequim e Ningxia, na China, execute o seguinte comando curl:

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

    aws iam create-policy \    --policy-name AWSLoadBalancerControllerIAMPolicy \    --policy-document file://iam-policy.json
  3. Observe o nome do recurso da Amazon (ARN) da política que o comando retorna.

  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. Execute o seguinte comando attach-role-policy para anexar AWSLoadBalancerControllerIAMPolicy ao seu perfil do IAM:

    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

Conclua as etapas a seguir:

  1. Verifique se você tem a tag necessária para o balanceador de carga associado às suas sub-redes.

  2. Execute o seguinte comando com o Kubernetes 1.16 ou posterior para instalar cert-manager:

    kubectl apply --validate=false -f https://github.com/jetstack/cert-manager/releases/download/example-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/example-version/v2_13_3_full.yaml  
    

    Observação: substitua example-version pela versão do AWS Load Balancer Controller que você deseja implantar. Para verificar a versão do AWS Load Balancer Controller, consulte Kubernetes SIGs (SIGs do Kubernetes) no site do GitHub. Certifique-se de modificar o nome do arquivo para que corresponda à sua versão. No exemplo de código anterior, v2_13_3_full.yaml corresponde ao AWS Load Balancer Controller v2.13.3. Para obter mais informações, consulte aws-load-balancer-controller no site do GitHub.

  4. Faça as seguintes atualizações na seção ServiceAccount do arquivo .yaml:

    spec:        containers:  
        - args:  
            - --cluster-name=example-cluster-name  
            - --ingress-class=alb

    Observação: substitua example-cluster-name pelo nome do seu cluster.
    No exemplo a seguir, 111122223333 é o ID da conta e example-role-name é o nome do perfil do IAM:

    apiVersion: v1  
    kind: ServiceAccount  
    metadata:  
      labels:  
        app.kubernetes.io/component: controller  
        app.kubernetes.io/name: aws-load-balancer-controller  
      annotations:                                                                         
        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/example-role-name       
      name: aws-load-balancer-controller  
      namespace: kube-system
  5. Execute o seguinte comando para implantar o AWS Load Balancer Controller:

    kubectl apply -f ingress-controller.yaml

Implemente uma aplicação de amostra

Implante uma aplicação de amostra para verificar se o AWS Load Balancer Controller cria um Application Load Balancer público por causa do objeto de entrada.

Conclua as etapas a seguir:

  1. Execute o comando a seguir para implantar um jogo chamado 2048:

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

    Observação: substitua example-version pela versão do AWS Load Balancer Controller que você deseja implantar. Para verificar sua versão do AWS Load Balancer Controller, consulte Kubernetes SIGs (SIGs do Kubernetes) no site do GitHub.

  2. Depois de alguns minutos, execute o comando a seguir para verificar se o Kubernetes criou o recurso de entrada:

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

    Exemplo de saída:

    NAME           CLASS    HOSTS   ADDRESS                                                                   PORTS   AGEingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-west-2.elb.amazonaws.com   80      2m32s
  3. Se o Kubernetes não criar seu recurso de entrada, execute o seguinte comando para analisar os logs do AWS Load Balancer Controller quanto a mensagens de erro de implantação:

    kubectl logs -n kube-system   deployment.apps/aws-load-balancer-controller
  4. Para ver o jogo, abra um navegador da Web e insira o endereço URL da saída na etapa 2.

  5. Para excluir o jogo, execute o seguinte comando:

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

    Observação: substitua example-version pela versão do AWS Load Balancer Controller que você deseja implantar.

AWS OFICIALAtualizada há 3 meses