Como configurar o AWS Load Balancer Controller em um cluster do Amazon EKS para Fargate e depois implantar o jogo 2048?

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. Depois, quero implantar o jogo 2048.

Breve descrição

Você pode configurar o AWS Load Balancer Controller sem nenhuma implantação do Application Load Balancer (ALB) Ingress Controller.

Antes de configurar o AWS Load Balancer Controller em um novo cluster do Fargate, conclua as seguintes ações:

  • Desinstale o AWS ALB Ingress Controller para Kubernetes. O AWS Load Balancer Controller substitui a funcionalidade do AWS ALB Ingress Controller.
  • Use o eksctl versão 0.109.0 ou superior. Para obter mais informações, consulte Instalação no site do eksctl.
  • Instale o Helm na estação de trabalho.
  • Substitua valores de espaço reservado em trechos de código por seus próprios valores.

Resolução

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

Para criar um cluster e políticas, faça o seguinte:

  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: você não precisa criar um perfil de execução de pod do Fargate para clusters que usam somente pods do Fargate (--fargate).

  2. Permita que o cluster use o AWS Identity and Access Management (IAM) para contas de serviço com o seguinte comando:

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

    Observação: FargateExecutionRole é o perfil usado pelo kubelet e pelo kube-proxy para executar seu pod do Fargate. No entanto, esse não é o perfil usado para o pod do Fargate (ou seja, aws-load-balancer-controller). Para pods do Fargate, você deve usar o perfil do IAM para a conta de serviço. Para obter mais informações, consulte Perfis do IAM para contas 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:

    curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/install/iam_policy.json
  4. Crie uma política do IAM com a política que você baixou. Use o comando a seguir:

    aws iam create-policy \
    --policy-name AWSLoadBalancerControllerIAMPolicy \
    --policy-document file://iam_policy.json
  5. Crie uma conta de serviço chamada aws-load-balancer-controller no namespace kube-system para o AWS Load Balancer Controller. Use o comando a seguir:

    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
  6. Execute um dos comandos a seguir para verificar se o novo perfil de serviço foi criado:

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

    -ou-

    kubectl get serviceaccount aws-load-balancer-controller --namespace kube-system

Instale o AWS Load Balancer Controller com o Helm

Para instalar o AWS Load Balancer Controller, faça o seguinte:

  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. Atualize o repositório para extrair o gráfico mais recente:

      helm repo update eks
  3. Execute o seguinte comando para instalar o gráfico do Helm. Observação: substitua clusterName, region e vpcID pelos seus valores:

    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=<VPC_ID> \  
    --set serviceAccount.name=aws-load-balancer-controller \  
    -n kube-system
  4. Verifique se o controlador foi instalado com êxito:

    $ 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

Use o AWS Load Balancer Controller para criar um Application Load Balancer para Entrada ou um Network Load Balancer. Você usa um desses para criar um serviço k8s. Para implantar uma aplicação de exemplo chamada 2048 com Entrada do Application Load Balancer, faça o seguinte:

  1. Crie um perfil do Fargate que seja necessário para a implantação do jogo. Use o comando a seguir:

    eksctl create fargateprofile --cluster your-cluster --region your-region-code --name your-alb-sample-app --namespace game-2048
  2. Para implantar o jogo de exemplo e verificar se o AWS Load Balancer Controller cria um recurso de Entrada do ALB, execute o seguinte comando:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.6.1/docs/examples/2048/2048_full.yaml
  3. Depois de alguns minutos, verifique se o recurso de Entrada foi criado, com o seguinte comando:

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

    Você recebe a seguinte saída:

    NAME           CLASS    HOSTS   ADDRESS. PORTS   AGE
    ingress-2048   <none>   *       k8s-game2048-ingress2-xxxxxxxxxx-yyyyyyyyyy.us-

    Observação: se a Entrada não tiver sido criada 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

    Os logs podem conter mensagens de erro que ajudam a diagnosticar problemas com a implantação.

  4. Para visualizar a aplicação de amostra, abra um navegador. Em seguida, navegue até o URL do ENDEREÇO da saída do comando anterior.
    Observação: se você não encontrar o exemplo de aplicação, aguarde alguns minutos e atualize seu navegador.

Implemente uma aplicação de exemplo

Para implantar uma aplicação de exemplo com o serviço de modo de endereço IP do Network Load Balancer, faça o seguinte:

  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
  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.6.1/docs/examples/2048/2048_full.yaml
  3. No manifesto da etapa 2, exclua esta seção de ingresso:

    apiVersion: networking.k8s.io/v1kind: 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 Serviço:

    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

    Você recebeu a seguinte 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:30159/TCP   23m
  7. Aguarde alguns minutos até que o balanceador de carga esteja ativo. Em seguida, verifique se você consegue acessar a implantação. Abra o nome de domínio totalmente qualificado (FQDN) do NLB que é referenciado na seção EXTERNAL-IP em um navegador da Web.

Solucione problemas do AWS Load Balancer Controller

Se você tiver problemas com a configuração do controlador, 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

A saída do comando logs retorna mensagens de erro (por exemplo, com etiquetas ou sub-redes). Essas mensagens de erro podem ajudar você a solucionar problemas de erros comuns no site do Kubernetes no GitHub. O comando get endpoints mostra se os pods de implantação com backup estão registrados corretamente. 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á um mês