Como faço para configurar o AWS Load Balancer Controller em um cluster do Amazon EKS para o Fargate?

7 minuto de leitura
0

Quero configurar o AWS Load Balancer Controller em um cluster do Amazon Elastic Kubernetes Service (Amazon EKS) para o AWS Fargate.

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.

É possível configurar o AWS Load Balancer Controller sem nenhuma implantação do Application Load Balancer Ingress Controller.

Pré-requisitos:

  • Desinstale o AWS ALB Ingress Controller para Kubernetes atual. O AWS Load Balancer Controller substitui sua funcionalidade.
  • Use eksctl versão 0.109.0 ou posterior. Para mais informações, consulte Instalação no site do eksctl.
  • Instale o Helm em sua estação de trabalho.

Crie um cluster do Amazon EKS, uma política de conta de serviço da AWS e políticas de controle de acesso baseado em perfil

Conclua as seguintes etapas:

  1. Para usar o eksctl para criar um cluster do Amazon EKS, execute o seguinte comando:

    eksctl create cluster \
      --name YOUR_CLUSTER_NAME \
      --version 1.28 \
      --fargate

    Observação: substitua YOUR_CLUSTER_NAME pelo nome do cluster. Você não precisa criar um perfil de execução de pod do Fargate para clusters que usam somente pods do Fargate (--fargate).

  2. Para permitir que o cluster use o AWS Identity and Access Management (AWS IAM) para contas de serviço, execute o seguinte comando:

    eksctl utils associate-iam-oidc-provider \
      --cluster YOUR_CLUSTER_NAME \
      --approve

    Observação: substitua YOUR_CLUSTER_NAME pelo nome do cluster. O kubelet e o kube-proxy usam o FargateExecutionRole para executar seu pod do Fargate. No entanto, FargateExecutionRole não é o perfil do IAM do pod do Fargate. Para pods do Fargate, você deve usar o perfil do IAM para a conta de serviço.

  3. Para baixar uma política do IAM que permita ao AWS Load Balancer Controller fazer chamadas para as APIs da AWS em seu nome, execute o seguinte comando:

  4.  curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/install/iam_policy.json
  5. Para criar uma política do IAM com a política baixada, execute o seguinte comando create-policy da AWS CLI:

    aws iam create-policy \
      --policy-name AWSLoadBalancerControllerIAMPolicy \
      --policy-document file://iam_policy.json
  6. Para criar uma conta de serviço para o AWS Load Balancer Controller, execute o seguinte comando:

    eksctl create iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --namespace=kube-system \
      --name=aws-load-balancer-controller \
      --attach-policy-arn=arn:aws:iam::AWS_ACCOUNT_ID:policy/AWSLoadBalancerControllerIAMPolicy \
      --override-existing-serviceaccounts \
      --approve

    Observação: substitua YOUR_CLUSTER_NAME pelo nome do seu cluster e AWS_ACCOUNT_ID pelo ID da sua conta. O comando anterior cria uma conta de serviço chamada aws-load-balancer-controller no namespace kube-system.

  7. Para verificar se o novo perfil de serviço foi criado, execute um dos seguintes comandos:

    eksctl get iamserviceaccount \
      --cluster=YOUR_CLUSTER_NAME \
      --name=aws-load-balancer-controller \
      --namespace=kube-system

    Observação: substitua YOUR_CLUSTER_NAME pelo nome do cluster.
    -or-

    kubectl get serviceaccount aws-load-balancer-controller \
      --namespace kube-system \
      -o yaml

Instale o AWS Load Balancer Controller com o Helm

Conclua as seguintes etapas:

  1. Para adicionar o gráfico do Amazon EKS ao Helm, execute o seguinte comando:

    helm repo add eks https://aws.github.io/eks-charts
  2. Para atualizar o repositório e obter o gráfico mais recente, execute o seguinte comando:

    helm repo update eks
  3. Para instalar o chart do Helm, execute o seguinte comando:

    helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
      --set clusterName=YOUR_CLUSTER_NAME \
      --set serviceAccount.create=false \
      --set region=YOUR_REGION_CODE \
      --set vpcId=EKS_CLUSTER_VPC_ID \
      --set serviceAccount.name=aws-load-balancer-controller \
      --version 1.11.0 \
      -n kube-system

    Observação: substitua YOUR_CLUSTER_NAME pelo nome do seu cluster e YOUR_REGION_CODE pela região da AWS do seu cluster. Além disso, substitua EKS_CLUSTER_VPC_ID pelo ID da nuvem privada virtual (VPC) do cluster.

  4. Para verificar se o controlador foi instalado corretamente, execute o seguinte comando:

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

    Exemplo de saída:

    NAME                           READY   UP-TO-DATE   AVAILABLE   AGE
    aws-load-balancer-controller   2/2     2            2           84s

Teste o AWS Load Balancer Controller

Para testar sua implementação, use o AWS Load Balancer Controller para criar um dos seguintes recursos:

  • Um Application Load Balancer para entrada
  • Um Network Load Balancer em que, para Serviço, o Tipo é LoadBalancer

Um recurso de entrada encaminha o tráfego para diferentes serviços com base em conceitos da Web, como URIs, nomes de host e caminhos. É uma prática recomendada usar um recurso de entrada para compartilhar um balanceador de carga com vários serviços ou controlar o roteamento do serviço. Use um Service LoadBalancer para atribuir um balanceador de carga dedicado ao seu serviço.

Observação: as etapas de teste a seguir implantam um exemplo de aplicação de jogo chamado 2048.

Criar um Application Load Balancer

Para criar um Application Load Balancer para entrada, conclua as seguintes etapas:

  1. Para criar um perfil do Fargate que seja necessário para a implantação do jogo, execute o seguinte comando:

    eksctl create fargateprofile \
      --cluster YOUR_CLUSTER_NAME \
      --region YOUR_REGION_CODE \
      --name your-alb-sample-app \
      --namespace game-2048

    Observação: substitua YOUR_CLUSTER_NAME pelo nome do seu cluster e YOUR_REGION_CODE pela sua região.

  2. Para implantar a aplicação, execute o seguinte comando:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. Espere alguns minutos. Em seguida, execute o comando a seguir para verificar se o AWS Load Balancer Controller criou um recurso de entrada:

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

    Exemplo de saída:

    NAME         CLASS HOSTS ADDRESS                                                                PORTS AGE
    ingress-2048 alb   *     k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.region.elb.amazonaws.com   80    3d4h

    Se não ver o recurso de entrada 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

    Verifique se há mensagens de erro nos logs que ajudam a diagnosticar problemas com a implantação.

  4. Para visualizar a aplicação, abra um navegador e navegue até o URL na saída do comando de recurso de entrada.
    Observação: se você não encontrar a aplicação, aguarde alguns minutos e atualize seu navegador.

Criar um Network Load Balancer

Para implantar uma aplicação com o serviço de modo de endereço IP do Network Load Balancer, conclua as seguintes etapas:

  1. Para criar um perfil do Fargate, execute o seguinte comando:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048

    Observação: substitua your-cluster pelo nome do seu cluster e your-region-code pela região do seu cluster.

  2. Para obter o manifesto para implantar o jogo 2048, execute o seguinte comando:

    curl -o 2048-game.yaml https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.11.0/docs/examples/2048/2048_full.yaml
  3. No manifesto, exclua a seguinte seção de Entrada:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      namespace: game-2048
      name: ingress-2048
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
        alb.ingress.kubernetes.io/target-type: ip
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Prefix
                backend:
                  service:
                    name: service-2048           
                    port:
                      number: 80
  4. Modifique o objeto de Serviço para usar os seguintes valores:

    apiVersion: v1
    kind: Service
    metadata:
      namespace: game-2048
      name: service-2048
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-nlb-target-type: "ip"
        service.beta.kubernetes.io/aws-load-balancer-type: external
        service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing
    spec:
      ports:
        - port: 80
          targetPort: 80
          protocol: TCP
      type: LoadBalancer
      selector:
        app.kubernetes.io/name: app-2048
  5. Para criar o manifesto de serviço e implantação, execute o seguinte comando:

    kubectl apply -f 2048-game.yaml
  6. Para verificar a criação do serviço e o nome DNS do Network Load Balancer, execute o seguinte comando:

    kubectl get svc -n game-2048

    Exemplo de saída:

    NAME           TYPE           CLUSTER-IP       EXTERNAL-IP                                                               PORT(S)        AGE
    service-2048   LoadBalancer   10.100.114.197   k8s-game2048-service2-xxxxxxxxxx-yyyyyyyyyy.us-east-2.elb.amazonaws.com   80:xxxxx/TCP   23m
  7. Aguarde alguns minutos até que o balanceador de carga esteja ativo. Para verificar se é possível acessar a implantação, abra um navegador da Web. Em seguida, abra o nome de domínio totalmente qualificado (FQDN) na saída do comando em EXTERNAL-IP.

Solucione problemas do AWS Load Balancer Controller

Se você encontrar problemas ao configurar o AWS Load Balancer Controller, execute os seguintes comandos:

kubectl logs -n kube-system deployment.apps/aws-load-balancer-controller
kubectl get endpoints -n game-2048
kubectl get ingress/ingress-2048 -n game-2048

Verifique se há mensagens de erro na saída do comando logs, como problemas com tags ou sub-redes. Para ver as etapas de solução de problemas de erros comuns, consulte Problemas no site do GitHub. Além disso, consulte Como posso solucionar problemas ao criar um balanceador de carga usando o AWS Load Balancer Controller?

O comando get endpoints mostra se você registrou corretamente os pods de implantação com backup. Os comandos get ingress mostram se recursos de entrada estão implantados.

Para obter mais informações, consulte AWS Load Balancer Controller no site do Kubernetes.

AWS OFICIAL
AWS OFICIALAtualizada há 2 meses