Como configurar o AWS Load Balancer Controller em um cluster do Amazon EKS para Fargate e depois implantar o jogo 2048?
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:
-
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).
-
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.
-
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
-
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
-
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
-
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:
-
Para adicionar o gráfico do Amazon EKS ao Helm, execute o seguinte comando:
helm repo add eks https://aws.github.io/eks-charts
-
Atualize o repositório para extrair o gráfico mais recente:
helm repo update eks
-
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
-
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:
-
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
-
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
-
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.
-
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:
-
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
-
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
-
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
-
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
-
Para criar o manifesto de serviço e implantação, execute o seguinte comando:
kubectl apply -f 2048-game.yaml
-
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
-
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.
Vídeos relacionados
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos