Como solucionar falhas de criação de grupos de nós gerenciados do Amazon EKS?

Data da última atualização: 03/06/2022

Falha ao criar meu grupo de nós gerenciados do Amazon Elastic Kubernetes Service (Amazon EKS). Os nós não conseguem ingressar no cluster, e recebi um erro parecido com o seguinte:

“As instâncias falharam ao ingressar no cluster Kubernetes”.

Breve descrição

Para resolver falhas de criação de grupo de nós gerenciados pelo Amazon EKS, siga estas etapas:

  • Use o runbook AWS Systems Manager Automation para identificar problemas comuns.
  • Confirme os requisitos de tráfego do grupo de segurança do nó de processamento.
  • Verifique as permissões do Identity and Access Management (IAM) do nó de processamento.
  • Confirme se a Amazon Virtual Private Cloud (Amazon VPC) do seu cluster tem suporte para um nome de host DNS e a resolução de DNS.
  • Atualize o ConfigMap aws-auth com o NodeInstanceRole dos nós de processamento.
  • Defina as tags para seus nós de processamento.
  • Confirme se as sub-redes da Amazon VPC para o nó de processamento têm endereços IP disponíveis.
  • Confirme se os nós de processamento conseguem acessar o endpoint do servidor de APIs do seu cluster.
  • Verifique se os endpoints de API do Amazon Elastic Compute Cloud (Amazon EC2), do Amazon Elastic Container Registry (Amazon ECR) e do Amazon Simple Storage Service (Amazon S3) podem chegar à sua região da AWS.

Resolução

Observação: se receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se você está usando a versão mais recente da AWS CLI.

Use o runbook de automação do Systems Manager para identificar problemas comuns

Use o runbook AWSSupport-TroubleshootEKSWorkerNode para encontrar problemas comuns que impedem que os nós de processamento ingressem no cluster.

Importante: para que a automação funcione, seus nós de processamento devem ter permissão para acessar o Systems Manager e estar com o Systems Manager em execução. Para conceder permissão, anexe a política gerenciada pela AWS AmazonSSMManagedInstanceCore ao perfil do IAM que corresponde ao seu perfil de instância do EC2. Essa é a configuração padrão para grupos de nós gerenciados pelo EKS que são criados por meio do eksctl.

  1. Abra o runbook.
  2. Verifique se a região da AWS no Console de Gerenciamento da AWS está definida como a mesma região do seu cluster.
    Observação: analise a seção do runbook Detalhes do documento para obter mais informações sobre o runbook.
  3. Na seção Parâmetros de entrada, especifique o nome do cluster no campo ClusterName e o ID da instância no campo WorkerID.
  4. (Opcional) No campo AutomationAssumeRole, especifique o perfil do IAM para permitir que o Systems Manager execute ações. Se isso não for especificado, as permissões do IAM da sua entidade do IAM atual serão usadas para executar as ações no runbook.
  5. Escolha Execute (Executar).
  6. Verifique a seção Saídas para ver por que seu nó de processamento não está ingressando no cluster e as etapas que você pode seguir para resolver isso.

Confirmar requisitos de tráfego do grupo de segurança do nó de processamento

Confirme se o grupo de segurança do seu ambiente de gerenciamento e o grupo de segurança do nó de processamento estão definidos com as configurações recomendadas para tráfego de entrada e saída. Por padrão, o Amazon EKS aplica o grupo de segurança do cluster às instâncias em seu grupo de nós para facilitar a comunicação entre os nós e o ambiente de gerenciamento. Se você especificar grupos de segurança personalizados no modelo de execução para seu grupo de nós gerenciados, o Amazon EKS não adicionará o grupo de segurança do cluster.

Verifique as permissões do nó de processamento do IAM

Certifique-se de que a função da instância do IAM associada ao nó de processamento tenha as políticas AmazonEKSWorkerNodePolicy e AmazonEC2ContainerRegistryReadOnly vinculadas.

Observação: você deve anexar a política gerenciada da Amazon AmazonEKS_CNI_Policy a um perfil do IAM. Você pode anexá-lo ao perfil de instância do nó. No entanto, é uma prática recomendada anexar a política a um perfil associado à conta de serviço do Kubernetes aws-node no namespace kube-system. Para obter mais informações, consulte Configuração do plugin da Amazon VPC CNI para usar perfis do IAM para contas de serviço.

Confirme se a Amazon VPC para seu cluster tem suporte para um nome de host DNS e resolução DNS

Depois de configurar o acesso privado para o endpoint de cluster do EKS, você deve ativar um nome de host DNS e uma resolução de DNS para sua Amazon VPC. Quando você ativa o acesso privado do endpoint, o Amazon EKS cria uma zona hospedada privada do Amazon Route 53 para você. Em seguida, o Amazon EKS o associa à Amazon VPC do seu cluster. Para obter mais informações, consulte Controle de acesso ao endpoint do cluster do Amazon EKS.

Atualize o ConfigMap aws-auth com o NodeInstanceRole dos nós de processamento

Verifique se o ConfigMap aws-auth está configurado corretamente com o perfil do IAM de seus nós de processamento, não o perfil de instância.

Defina as tags para seus nós de processamento

Para a propriedade Tag dos nós de processamento, defina key (chave) como kubernetes.io/cluster/clusterName e defina value (valor) como owned (particular).

Confirme se as sub-redes da Amazon VPC para o nó de processamento têm endereços IP disponíveis

Se a sua Amazon VPC estiver ficando sem endereços IP, você poderá associar um CIDR secundário à sua Amazon VPC. Para obter mais informações, consulte Aumentar os endereços IP disponíveis para a sua Amazon VPC.

Confirme se os nós de processamento do Amazon EKS conseguem acessar o endpoint do servidor de APIs do seu cluster

Você pode executar nós de processamento em qualquer sub-rede dentro de sua VPC de cluster ou sub-rede emparelhada se houver uma rota de Internet por meio dos seguintes gateways:

  • NAT
  • Internet
  • Trânsito

Se os seus nós de processamento forem iniciados em uma rede privada restrita, confirme se eles conseguem acessar o endpoint do servidor de APIs do Amazon EKS. Para obter mais informações, consulte os requisitos para executar o Amazon EKS em um cluster privado sem acesso de saída à Internet.

Observação: para nós que estão em uma sub-rede privada apoiada por um gateway NAT, é uma prática recomendada criar o gateway NAT em uma sub-rede pública.

Se você não estiver usando endpoints do AWS PrivateLink, verifique o acesso aos endpoints da API por meio de um servidor de proxy para os seguintes serviços da AWS:

  • Amazon EC2
  • Amazon ECR
  • Amazon S3

Para verificar se o nó de processamento tem acesso ao servidor de API, conecte-se ao seu nó de processamento usando SSH e execute o seguinte comando netcat:

nc -vz 9FCF4EA77D81408ED82517B9B7E60D52.yl4.eu-north-1.eks.amazonaws.com 443

Observação: substitua 9FCF4EA77D81408ED82517B9B7E60D52.yl4.eu-north-1.eks.amazonaws.com pelo endpoint do servidor de APIs.

Verifique os logs do kubelet enquanto ainda estiver conectado à sua instância:

journalctl -f -u kubelet

Se os logs do kubelet não fornecerem informações sobre a origem do problema, verifique o status do kubelet no nó de processamento:

sudo systemctl status kubelet

Colete os logs do Amazon EKS e os logs do sistema operacional para solucionar falhas adicionais.

Verifique se os endpoints de API do Amazon EC2, Amazon ECR e Simple Storage Service (Amazon S3) podem alcançar sua região da AWS

Use o SSH para se conectar a um dos nós de processamento e, em seguida, execute os seguintes comandos para cada serviço:

$ nc -vz ec2.region.amazonaws.com 443
$ nc -vz ecr.region.amazonaws.com 443
$ nc -vz s3.region.amazonaws.com 443

Observação: substitua region (região) pela região da AWS do nó de processamento.

Configurar os dados do usuário do seu nó de processamento

Para modelos de execução de grupo de nós gerenciados com uma AMI especificada, você deve fornecer comandos de bootstrap para que os nós de processamento ingressem no cluster. O Amazon EKS não mescla os comandos de bootstrap padrão com seus dados do usuário. Para obter mais informações, consulte Apresentação do template de inicialização e suporte para AMIs personalizadas em grupos de nós gerenciados do Amazon EKS e Especificar uma AMI.

Exemplo de modelo de lançamento com comandos bootstrap:

#!/bin/bash
set -o xtrace
/etc/eks/bootstrap.sh ${ClusterName} ${BootstrapArguments}

Observação: substitua ${ClusterName} pelo nome do seu cluster do Amazon EKS. Substitua ${BootstrapArguments} por valores adicionais de bootstrap.