View a markdown version of this page

Solução de problemas do gateway do Amazon EKS Hybrid Nodes - Amazon EKS

Ajudar a melhorar esta página

Para contribuir com este guia de usuário, escolha o link Editar esta página no GitHub, disponível no painel direito de cada página.

Solução de problemas do gateway do Amazon EKS Hybrid Nodes

Esta página fornece orientações para diagnosticar e resolver problemas comuns com o gateway do Amazon EKS Hybrid Nodes. Cada seção descreve um sintoma, causas possíveis, etapas de diagnóstico e resoluções. Para obter detalhes operacionais, consulte Operações de gateway do Amazon EKS Hybrid Nodes.

Pods em nós híbridos inacessíveis por meio da VPC

Os pods executados em nós híbridos não estão acessíveis por meio de recursos na VPC, como as instâncias do EC2, os balanceadores de carga ou o ambiente de gerenciamento do Kubernetes.

Causas possíveis:

  • As entradas da tabela de rotas da VPC estão ausentes ou direcionam para a ENI incorreta.

  • O pod líder do gateway não está em execução ou não concluiu a configuração.

  • O Cilium VTEP não está habilitado ou configurado nos nós híbridos.

  • A verificação de origem e de destino está habilitada na instância EC2 do gateway.

Etapas de diagnóstico:

  1. Verifique as entradas da tabela de rotas da VPC. Verifique se as rotas para os CIDRs dos pods híbridos existem e direcionam para a ENI primária da instância de gateway ativa:

    aws ec2 describe-route-tables \ --route-table-ids ROUTE_TABLE_ID \ --query "RouteTables[].Routes[?DestinationCidrBlock=='[.replaceable]`POD_CIDR`']"

    Se as rotas estiverem ausentes, verifique os logs do gateway em busca de erros na tabela de rotas. Se as rotas direcionarem para a ENI incorreta, é possível que um failover não tenha sido concluído com êxito.

  2. Verifique o status do pod do gateway e a eleição de líder. Confirme se dois pods de gateway estão em execução e se um mantém o lease de líder:

    kubectl get pods -n eks-hybrid-nodes-gateway kubectl get lease -n eks-hybrid-nodes-gateway

    Se nenhum pod detiver o lease, consulte Questões relacionadas à eleição de líder.

  3. Verifique a configuração do Cilium VTEP nos nós híbridos. Confirme se o recurso CiliumVTEPConfig existe e contém o IP do nó líder:

    kubectl get ciliumvtepconfig hybrid-gateway -o yaml

    O spec.endpoints[0].tunnelEndpoint deve corresponder ao endereço IP do nó do gateway líder. Se o recurso estiver ausente ou com um IP desatualizado, o gateway pode não ter concluído a configuração do líder.

  4. Verifique a verificação de origem e de destino. Confirme se a verificação de origem e de destino está desabilitada nas instâncias do EC2 do gateway:

    aws ec2 describe-instance-attribute \ --instance-id GATEWAY_INSTANCE_ID \ --attribute sourceDestCheck

    Se sourceDestCheck for true, desabilite-o. Consulte Comece a usar o gateway do EKS Hybrid Nodes.

Chamadas de webhook para nós híbridos falham

O servidor da API do Kubernetes não consegue acessar endpoints de webhook em execução nos nós híbridos. As solicitações de admissão de webhook expiram ou retornam erros de conexão.

Causas possíveis:

  • O gateway não está roteando o tráfego do ambiente de gerenciamento para os pods híbridos.

  • O recurso CiliumVTEPConfig está ausente ou tem um IP de endpoint desatualizado.

Etapas de diagnóstico:

  1. Verifique se o ambiente de gerenciamento consegue acessar o IP do nó do gateway. O ambiente de gerenciamento envia tráfego para a tabela de rotas da VPC, que o encaminha para a ENI do gateway. Confirme se as entradas da tabela de rotas da VPC estão corretas seguindo as etapas apresentadas em Pods em nós híbridos inacessíveis por meio da VPC.

  2. Verifique o recurso CiliumVTEPConfig. Confirme se o recurso existe e se o tunnelEndpoint corresponde ao IP do nó do líder atual:

    kubectl get ciliumvtepconfig hybrid-gateway -o yaml

    Se o endpoint do túnel estiver desatualizado (direcionar para um líder anterior), o gateway pode não ter concluído a sequência de configuração do líder. Verifique os logs do gateway em busca de erros durante a atualização ou inserção do CiliumVTEPConfig.

Falhas nas atualizações da tabela de rotas da VPC

Os logs do gateway apresentam erros relacionados às operações da tabela de rotas da VPC, e as rotas para os CIDRs de pods híbridos não são criadas ou atualizadas.

Causas possíveis:

  • O perfil do IAM do gateway não tem as permissões do EC2 necessárias.

  • Os IDs da tabela de rotas na configuração estão incorretos ou as tabelas de rotas não existem.

  • O gateway não consegue acessar o endpoint da API do EC2.

Etapas de diagnóstico:

  1. Verifique as permissões do IAM. O gateway requer as seguintes ações do IAM:

    • ec2:DescribeRouteTables

    • ec2:CreateRoute

    • ec2:ReplaceRoute

    • ec2:DescribeInstances

      Verifique o perfil do IAM associado ao perfil de instância do nó do gateway ou à configuração de identidade de pods.

  2. Verifique os IDs da tabela de rotas na configuração. Confirme se a variável de ambiente ROUTE_TABLE_IDS contém IDs de tabela de rotas válidos na implantação do gateway:

    kubectl get deployment eks-hybrid-nodes-gateway -n eks-hybrid-nodes-gateway -o jsonpath='{.spec.template.spec.containers[0].env}' | jq .

    Confirme se os IDs da tabela de rotas existem na VPC:

    aws ec2 describe-route-tables --route-table-ids ROUTE_TABLE_ID
  3. Verifique os logs do gateway em busca de erros na tabela de rotas. Procure mensagens de erro relacionadas às operações da tabela de rotas:

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD | grep -i "route table"

    As mensagens de erro mais comuns incluem:

    • Failed to verify route table access: o gateway não consegue descrever a tabela de rotas. Verifique as permissões do IAM e os IDs da tabela de rotas.

    • Failed to update route tables: o gateway não consegue criar ou substituir rotas. Verifique as permissões do IAM.

    • failed to access route table: o ID da tabela de rotas pode estar incorreto ou o perfil do IAM não tem a permissão ec2:DescribeRouteTables.

Pods do gateway falham ao iniciar ou não estão íntegros

Os pods do gateway estão no estado CrashLoopBackOff, Error ou Pending, ou o endpoint de integridade retorna um erro.

Causas possíveis:

  • As variáveis de ambiente necessárias (VPC_CIDR, POD_CIDRS e ROUTE_TABLE_IDS) não estão definidas.

  • O encaminhamento de IP não está habilitado no nó do gateway.

  • As restrições de rótulo de nó ou de antiafinidade impedem o agendamento.

Etapas de diagnóstico:

  1. Verifique os logs do pod. Visualize os logs do pod com falha para identificar o erro:

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD
  2. Verifique as variáveis de ambiente necessárias. O gateway requer NODE_IP, VPC_CIDR e POD_CIDRS. Se alguma estiver ausente, o gateway é encerrado imediatamente. Verifique a especificação do pod:

    kubectl get pod -n eks-hybrid-nodes-gateway LEADER_POD -o jsonpath='{.spec.containers[0].env}' | jq .
    • NODE_IP é definido automaticamente usando status.hostIP na especificação do pod. Se estiver vazio, é possível que o pod ainda não tenha sido agendado em um nó.

    • VPC_CIDR e POD_CIDRS são provenientes dos valores do Helm. Verifique se esses valores estão configurados corretamente.

  3. Verifique o encaminhamento de IP. O gateway verifica se o encaminhamento de IP está habilitado na inicialização e é encerrado caso contrário. Procure a mensagem de erro IP forwarding is not enabled nos logs do pod. Habilite o encaminhamento de IP no nó:

    # Check current setting cat /proc/sys/net/ipv4/ip_forward # Enable if not set sudo sysctl -w net.ipv4.ip_forward=1

    Para uma configuração persistente, configure o encaminhamento de IP por meio do kubelet ou adicione net.ipv4.ip_forward=1 ao /etc/sysctl.d/.

  4. Verifique o rótulo do nó e as restrições de agendamento. Os pods do gateway requerem nós com o rótulo hybrid-gateway-node=true. A antiafinidade de pod garante que cada pod seja executado em um nó separado. Caso os pods estejam no estado Pending, verifique se há problemas de agendamento:

    kubectl describe pod -n eks-hybrid-nodes-gateway LEADER_POD

    Procure eventos que indiquem nós insuficientes, rótulos ausentes ou conflitos de antiafinidade.

Questões relacionadas à eleição de líder

Os pods do gateway estão em execução, mas nenhum pod adquire o lease de líder, ou as transições de liderança ocorrem com frequência.

Causas possíveis:

  • As permissões do RBAC para objetos Lease estão ausentes.

  • A conectividade de rede entre os pods do gateway e o servidor de API do Kubernetes é instável.

  • Os parâmetros de eleição de líder estão configurados incorretamente.

Etapas de diagnóstico:

  1. Verifique o objeto Lease. Confirme se o Lease existe e inspecione seu detentor atual:

    kubectl get lease -n eks-hybrid-nodes-gateway hybrid-gateway-leader -o yaml

    O campo spec.holderIdentity apresenta o líder atual. O campo spec.renewTime, por sua vez, indica quando o lease foi renovado pela última vez. Caso renewTime esteja desatualizado, é possível que o líder tenha perdido a conectividade com o servidor de API.

  2. Verifique as permissões do RBAC. A conta de serviço do gateway precisa de permissões para obter, criar e atualizar objetos Lease no namespace do gateway. Verifique o Role e o RoleBinding:

    kubectl get role -n eks-hybrid-nodes-gateway kubectl get rolebinding -n eks-hybrid-nodes-gateway

    O Role deve incluir os verbos get, create e update para o recurso leases no grupo de API coordination.k8s.io.

  3. Verifique os logs do pod em busca de erros de lease. Procure erros de eleição de líder nos logs do pod:

    kubectl logs -n eks-hybrid-nodes-gateway LEADER_POD | grep -i "leader\|lease"

    Os problemas comuns incluem:

    • Failed to acquire lease: o pod não consegue criar ou atualizar o objeto Lease. Verifique as permissões do RBAC.

    • Mensagens frequentes de Leadership ended seguidas de Leader setup complete: o líder está perdendo e readquirindo o lease. Isso pode indicar instabilidade de rede entre o pod e o servidor de API. Considere aumentar --leader-election-lease-duration.

  4. Verifique os parâmetros de eleição de líder. Confirme os valores configurados:

    kubectl get deployment eks-hybrid-nodes-gateway -n eks-hybrid-nodes-gateway -o jsonpath='{.spec.template.spec.containers[0].args}'

    Certifique-se de que --leader-election-renew-deadline seja menor do que --leader-election-lease-duration. Caso o prazo de renovação ultrapasse a duração do lease, o líder perderá o lease antes de conseguir renová-lo. Para obter mais informações, consulte Ajuste de eleição de líder.

Mensagens de erro comuns

A tabela a seguir lista as mensagens de erro que podem aparecer nos logs do pod do gateway e como resolvê-las.

A mensagem de erro Causa Resolução

IP forwarding is not enabled

O parâmetro de kernel net.ipv4.ip_forward não está definido como 1 no nó do gateway.

Habilite o encaminhamento de IP por meio da configuração do kubelet ou executando sysctl -w net.ipv4.ip_forward=1.

Failed to setup VXLAN

O gateway não consegue criar a interface de rede VXLAN. Isso ocorre normalmente quando o pod não tem a capacidade NET_ADMIN.

Verifique se a especificação de Deployment inclui NET_ADMIN em securityContext.capabilities.add. Confirme se o chart do Helm foi implantado corretamente.

Failed to verify route table access

O gateway não consegue descrever uma ou mais tabelas de rotas da VPC na inicialização.

Verifique se o perfil do IAM tem a permissão ec2:DescribeRouteTables e se os IDs da tabela de rotas na configuração estão corretos.

Failed to update route tables

O gateway não consegue criar ou substituir rotas nas tabelas de rotas da VPC.

Verifique se o perfil do IAM tem as permissões ec2:CreateRoute e ec2:ReplaceRoute.

Failed to create route table manager

O gateway não consegue inicializar o cliente do AWS EC2 ou recuperar a ENI primária da instância.

Verifique se o perfil do IAM tem a permissão ec2:DescribeInstances e se o serviço de metadados de instância (IMDS) está acessível.

NODE_IP is required

A variável de ambiente NODE_IP ou o sinalizador --node-ip não está definido.

Verifique se a especificação do pod define NODE_IP de um status.hostIP usando uma fieldRef. Confirme se o chart do Helm foi implantado corretamente.

Invalid NODE_IP

O valor fornecido para NODE_IP não é um endereço IP válido.

Verifique o valor da variável de ambiente NODE_IP na especificação do pod.

pod-cidrs and vpc-cidr are required

A variável de ambiente POD_CIDRS ou VPC_CIDR está vazia.

Defina os valores do Helm podCIDRs e vpcCIDR durante a instalação.

No valid route table IDs provided

O valor de ROUTE_TABLE_IDS foi definido, mas não contém IDs de tabela de rotas válidos após a análise.

Verifique o valor do Helm routeTableIDs em busca de erros de formatação. Os IDs da tabela de rotas devem ser separados por vírgula (por exemplo, rtb-abc123,rtb-def456).

Failed to auto-detect AWS region

O gateway não consegue recuperar a região da AWS usando os metadados da instância do EC2.

Verifique se o serviço de metadados de instância (IMDS) está acessível. Como alternativa, defina explicitamente o sinalizador --aws-region ou a variável de ambiente AWS_REGION.

Failed to auto-detect AWS instance ID

O gateway não consegue recuperar o ID da instância usando os metadados da instância do EC2.

Verifique se o serviço de metadados de instância (IMDS) está acessível. Como alternativa, defina explicitamente o sinalizador --aws-instance-id ou a variável de ambiente AWS_INSTANCE_ID.

CiliumNode has no internal IP

O objeto CiliumNode de um nó híbrido não tem um endereço IP interno em sua especificação.

Verifique se o nó híbrido está registrado corretamente e se o agente do Cilium está em execução. Verifique o recurso CiliumNode do nó.

CiliumNode <name> has no pod CIDRs allocated

O objeto CiliumNode de um nó híbrido não tem CIDRs de pod alocados pelo IPAM do Cilium.

Verifique se o IPAM do Cilium está configurado corretamente no nó híbrido. Verifique o recurso CiliumNode para o status do IPAM do nó.

Failed to upsert CiliumVTEPConfig

O gateway não consegue criar ou atualizar o recurso personalizado CiliumVTEPConfig.

Verifique se o CRD está instalado no cluster e se a conta de serviço do gateway tem permissões para gerenciar recursos CiliumVTEPConfig.

Unable to create manager

O gerenciador do controller-runtime falhou ao inicializar.

Verifique os logs do pod para obter contexto adicional. As causas mais comuns incluem kubeconfig inválido ou impossibilidade de acessar o servidor de API do Kubernetes.

Failed to add gateway setup

O executável eleito como líder não pôde ser registrado no gerenciador de controladores.

Normalmente, trata-se de um erro interno. Verifique os logs completos do pod para obter contexto adicional e relate o problema no repositório do GitHub.

Unable to create Node controller

O reconciliador do CiliumNode não pôde ser registrado no gerenciador de controladores.

Verifique os logs do pod para obter contexto adicional. Confirme se o CRD do CiliumNode está instalado no cluster.

Problem running manager

O gerenciador de controladores foi encerrado inesperadamente.

Verifique os logs do pod para identificar a causa-raiz. As causas comuns incluem a perda de conectividade com o servidor da API do Kubernetes ou um conflito de portas nos endereços de vinculação das métricas ou da sonda de integridade.

failed to access route table <id>

O gateway não consegue descrever uma tabela de rotas da VPC específica durante a verificação de inicialização.

Verifique se o perfil do IAM tem a permissão ec2:DescribeRouteTables e se o ID da tabela de rotas está correto. A tabela de rotas precisa existir na mesma região que a instância do gateway.