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

As etapas a seguir mostram como implantar o Application Load Balancer usando o AWS Load Balancer Controller em um grupo de nós do Amazon EC2 com o Amazon EKS. Para criar um Network Load Balancer, consulte AWS Load Balancer Controller.

O AWS Load Balancer Controller deve estar conectado a um endpoint de serviço da AWS, como AWS Identity and Access Management (IAM), EC2, AWS Certificate Manager (ACM), Elastic Load Balancing, Amazon Cognito, AWS WAF ou AWS Shield. Isso significa que você deve ter uma conexão externa com a Internet para que o AWS Load Balancer Controller funcione. Para obter mais informações, consulte Como configuro minhas 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 VPC em seu cluster do Amazon EKS para permitir que o AWS Load Balancer Controller descubra automaticamente as sub-redes quando o recurso Application Load Balancer for criado.

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

**Observação:**se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

Crie um provedor de identidade OIDC para seu cluster

Para criar um provedor de identidade OpenID Connect (OIDC) para seu cluster usar com funções do AWS Identity and Access Management (IAM) para contas de serviço, use eksctl ou o Console de Gerenciamento da AWS.

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 em seu nome. É uma prática recomendada usar perfis do AWS IAM para contas de serviço quando você concede acesso às APIs da AWS.

1.    Para baixar um documento de política do IAM para o AWS Load Balancer Controller do AWS GitHub, execute um dos seguintes comandos com base na sua região.

Todas as regiões, exceto as regiões da China:

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

-ou-

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 nome do recurso da Amazon (ARN) da política que é retornado na saída da etapa 2.

4.    Use o perfil do IAM existente ou crie um novo perfil do IAM para o AWS Load Balancer Controller.

**Dica:**Para criar um perfil do IAM com eksctl, use o parâmetro --attach-policy-arn com o ARN da política do IAM AWSLoadBalancerControllerIAMPolicy.

5.    Para anexar AWSLoadBalancerControllerIAMPolicy aos perfis do IAM que você identificou anteriormente, 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.

Para Kubernetes 1.16 ou posterior:

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

Para Kubernetes 1.15 ou anterior:

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

Observação: Substitua $VERSION pela versão (do site do Jetstack no GitHub, por exemplo, 'v1.6.0') do gerenciador de certificados que você deseja implantar.

3.    No arquivo de manifesto baixado para o AWS Load Balancer Controller do AWS GitHub, execute o seguinte comando:

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

**Observação:**Substitua $VERSION pela versão (do site Kubernetes SIGs no GitHub, por exemplo, 'v2.4.1') do AWS Load Balancer Controller que você deseja implantar.

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, por exemplo, 'v2.3.0') 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 à seguinte:

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

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.

3.    Para ver o aplicativo de amostra, abra um navegador da Web e acesse o endereço URL da saída na etapa 2.

4.    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, por exemplo, 'v2.3.0') do AWS Load Balancer Controller que você deseja implantar.


AWS OFICIAL
AWS OFICIALAtualizada há 2 anos