Não consigo executar comandos kubectl. Além disso, alterei a configuração de acesso ao endpoint de público para privado no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS). Agora, meu cluster está preso no estado Falha.
Breve descrição
Com base no seu cenário, conclua as etapas em uma das seções a seguir.
Observação: para configurar o acesso ao endpoint do servidor da API Kubernetes, consulte Modificação do acesso ao endpoint do cluster.
Resolução
Você não pode executar comandos kubectl no cluster novo ou existente
Confirme se seu arquivo kubeconfig se conecta ao seu cluster
Conclua as seguintes etapas:
- Confirme se você está usando os arquivos kubeconfig corretos para se conectar ao seu cluster. Para mais informações, consulte Como organizar o acesso ao cluster usando arquivos kubeconfig do site do Kubernetes.
- Verifique se há vários contextos em cada cluster em seus arquivos kubeconfig.
Exemplo de saída:
$ kubectl config view -o jsonpath='{"Cluster name\tServer\n"}{range .clusters[*]}{.name}{"\t"}{.cluster.server}{"\n"}{end}'
Cluster name Server
new200.us-east-2.eksctl.io https://D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com
Se o arquivo kubeconfig em uso não tiver os detalhes corretos do cluster, execute o seguinte comando para criar uma nova entrada para o cluster:
aws eks update-kubeconfig --name CLUSTER NAME --region REGION
**Observação:**Substitua o CLUSTER NAME pelo nome do seu cluster e a REGION pela sua região da AWS.
- Use o telnet na porta 443 para validar a conectividade do endpoint do servidor de API a partir do seu dispositivo.
Exemplo de saída:
$ echo exit | telnet D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com 443
Trying 18.224.160.210...
Connected to D8DC9092A7985668FF67C3D1C789A9F5.gr7.us-east-2.eks.amazonaws.com.
Escape character is '^]'.
Connection closed by foreign host.
Se o comando telnet não funcionar, conclua as etapas a seguir para solucionar o problema.
Verifique o resolvedor de DNS
Se o servidor da API não estiver resolvendo, há um problema com o resolvedor de DNS.
Execute o comando a seguir no mesmo dispositivo em que os comandos kubectl falharam:
nslookup APISERVER ENDPOINT
**Observação:**Substitua o APISERVER ENDPOINT pelo endpoint do servidor de API do seu cluster.
Verifique se você restringiu o acesso público ao endpoint do servidor de API
Se você especificou blocos CIDR para limitar o acesso ao endpoint público do servidor de API, é recomendável também ativar o acesso ao endpoint privado.
Verifique o comportamento de acesso ao endpoint do servidor de API. Consulte Modificação do acesso ao endpoint do cluster.
Você não pode executar comandos kubectl no cluster depois de alterar o acesso ao endpoint de público para privado
Para solucionar esse problema, realize as etapas a seguir:
- Confirme se você está usando um host bastion ou redes conectadas, como VPCs emparelhados, AWS Direct Connect ou VPNs, para acessar o endpoint da API Amazon EKS.
**Observação:**no modo de acesso privado, acesse o endpoint da API Amazon EKS somente de dentro da VPC do cluster.
- Verifique se grupos de segurança ou listas de controle de acesso à rede bloqueiam solicitações para o servidor da API Kubernetes.
Se você acessar seu cluster por meio de uma VPC emparelhada, confirme se os grupos de segurança do plano de controle permitem o acesso correto. Eles devem permitir o acesso da VPC emparelhada aos grupos de segurança do plano de controle do Amazon EKS na porta 443.
Seu cluster está preso no estado Falha e você não pode alterar a configuração de acesso ao endpoint de público para privado
Seu cluster pode estar no estado Failed devido a um problema de permissões com o AWS Identity and Access Management (IAM).
Para solucionar esse problema, realize as etapas a seguir:
- Confirme se o perfil do IAM para o usuário está autorizada a executar a açãoAssociateVpcWithHostedZone.
**Observação:**se a ação não estiver bloqueada, verifique se a conta do usuário tem políticas do AWS Organizations que estão bloqueando as chamadas de API e causando a falha do cluster.
- Confirme se a permissão do usuário do IAM não está implícita ou explicitamente bloqueada em nenhum nível acima da conta.
Observação: s permissão do usuário do IAM é bloqueada implicitamente se não estiver incluída na declaração de política Permitir. É explicitamente bloqueado se estiver incluído na declaração de política Negar. A permissão é bloqueada mesmo se o administrador da conta anexar a política do IAM AdministratorAccess com permissões */* ao usuário. As permissões das políticas do AWS Organizations substituem as permissões para entidades do IAM.