View a markdown version of this page

AWSSupport-TroubleshootEKSDNSFailure - AWS Systems Manager Referência do Automation Runbook

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AWSSupport-TroubleshootEKSDNSFailure

Descrição

O AWSSupport-TroubleshootEKSDNSFailure runbook ajuda a solucionar problemas com os pods e a configuração do CoreDNS no Amazon Elastic Kubernetes Service (Amazon EKS) quando aplicativos ou pods encontram falhas na resolução do DNS. O runbook valida as configurações de DNS da VPC, inspeciona a implantação do CoreDNS e verifica a configuração do Horizontal Pod Autoscaler (HPA) ConfigMap, coleta registros do CoreDNS e realiza verificações de resolução de DNS nos nós de trabalho. Opcionalmente, uma instância de sondagem do Amazon Elastic Compute Cloud pode ser criada na mesma sub-rede do nó de trabalho problemático para realizar verificações de resolução de DNS sem exigir acesso direto ao nó.

Importante

O modo de autenticação do cluster Amazon EKS deve ser definido como API ouAPI_AND_CONFIG_MAP. Esse runbook implanta uma função ( AWS Lambda Lambda) como proxy para fazer chamadas autenticadas da API Kubernetes e limpar todos os recursos criados no final da execução.

Executar esta automação (console)

Tipo de documento

Automação

Proprietário

Amazon

Plataformas

Linux, macOS, Windows

Parâmetros

  • AutomationAssumeRole

    Tipo AWS::IAM::Role: :Arn

    Descrição: (opcional) o nome do recurso da Amazon (ARN) do perfil do AWS Identity and Access Management (IAM) que permite que o Systems Manager Automation realize ações em seu nome. Se nenhum perfil for especificado, o Systems Manager Automation usa as permissões do usuário que inicia este runbook.

  • EksClusterName

    Tipo: string

    Descrição: (Obrigatório) O nome do cluster Amazon EKS de destino.

  • DnsName

    Tipo: string

    Padrão: amazon.com

    Descrição: (Opcional) O sufixo do domínio stub para o nome de domínio que o aplicativo ou pod não está conseguindo resolver.

  • ProblematicNodeInstanceId

    Tipo AWS::EC2::Instance: :Id

    Descrição: (Opcional) O ID da instância do nó de trabalho em que o aplicativo com erros de resolução de DNS está sendo executado. Quando fornecido, o runbook cria uma instância de sondagem do Amazon EC2 na mesma sub-rede para realizar verificações de resolução de DNS. Use esse parâmetro se o nó de trabalho não estiver em uma sub-rede pública ou se a instalação bind-utils no nó de trabalho não for permitida.

  • CoreDnsNamespace

    Tipo: string

    Padrão: kube-system

    Descrição: (Opcional) O namespace Kubernetes para pods CoreDNS.

  • S3 BucketName

    Tipo: AWS::S3::Bucket: :Nome

    Descrição: (Opcional) O nome do bucket do Amazon Simple Storage Service no qual os registros de solução de problemas do CoreDNS são carregados.

  • LambdaRoleArn

    Tipo AWS::IAM::Role: :Arn

    Descrição: (Opcional) O ARN da função do IAM para a função de proxy Lambda. Se não for fornecido, o runbook cria uma função nomeada Automation-K8sProxy-Role-<ExecutionId> com as políticas AWSLambdaBasicExecutionRole AWSLambdaVPCAccessExecutionRole gerenciadas. É recomendável fornecer sua própria função.

Permissões obrigatórias do IAM

O parâmetro AutomationAssumeRole requer as seguintes ações para usar o runbook com êxito.

  • eks:DescribeCluster

  • ec2:DescribeVpcs

  • ec2:DescribeInstances

  • ec2:DescribeSubnets

  • ec2:DescribeSecurityGroups

  • cloudformation:CreateStack

  • cloudformation:DescribeStacks

  • cloudformation:DeleteStack

  • lambda:InvokeFunction

  • s3:GetBucketPublicAccessBlock

  • s3:GetBucketAcl

  • s3:PutObject

  • ssm:DescribeInstanceInformation

  • ssm:SendCommand

  • ssm:GetCommandInvocation

  • ssm:StartAutomationExecution

  • ssm:GetAutomationExecution

Etapas do documento

  1. AssertIfTargetClusterExists- Verifica se o cluster Amazon EKS especificado em EksClusterName existe e está no ACTIVE estado. Se o cluster não for encontrado ou não estiver ativo, o runbook pulará para. GenerateReport

  2. UpdateEksClusterExists- Define a eksClusterExists variável interna true para uso na geração de relatórios.

  3. GetVpcDnsSettings- Recupera as enableDnsHostnames configurações enableDnsSupport e as configurações da Amazon Virtual Private Cloud associada ao cluster Amazon EKS.

  4. BranchOnVpcDnsSettings- Verifica se as duas configurações de VPC DNS estão habilitadas. Se um deles estiver desativado, o runbook passa para. GenerateReport Caso contrário, prossegue para. DeployK8sAuthApisResources

  5. DeployK8sAuthApisResources- Executa AWSSupport-SetupK8sApiProxyForEKS para implantar uma função Lambda como proxy para fazer chamadas autenticadas da API Kubernetes para o cluster Amazon EKS.

  6. RetrieveCoreDNSDeployment- Recupera informações sobre a implantação do CoreDNS, incluindo a prontidão do pod, o status do contêiner e a prontidão dos nós que hospedam os pods do CoreDNS. Também recupera o IP do cluster CoreDNS.

  7. RetrieveAndInspectCoreDNSConfigMap- Recupera o ConfigMap CoreDNS do cluster Amazon EKS e verifica se há problemas de configuração, incluindo configurações de domínio stub para o domínio especificado em. DnsName

  8. ValidateHpaConfiguration- Verifica se um escalador automático de pod horizontal (HPA) está configurado para a implantação do CoreDNS no namespace especificado.

  9. CheckS3BucketPublicStatus- Valida que o bucket do Amazon S3 especificado S3BucketName em não permite acesso público ou anônimo de leitura ou gravação.

  10. CollectLogToS3- Coleta os logs do pod CoreDNS e os carrega no bucket do Amazon S3 especificado.

  11. BranchOnProblematicNodeInstanceId- Verifica se ProblematicNodeInstanceId é fornecido e se existem nós de host CoreDNS. Se ambas as condições forem atendidas, prossiga paraVerifyThatProblematicNodeInstanceBelongsToCluster. Caso contrário, ramifica paraBranchOnCoreDnsDeployment.

  12. VerifyThatProblematicNodeInstanceBelongsToCluster- Confirma que a instância especificada em ProblematicNodeInstanceId é um nó de trabalho no cluster Amazon EKS.

  13. UpdateProblematicNodeInstanceStanding- Define a problematicNodeInstanceStanding variável interna comotrue.

  14. GetProblematicInstanceDetails- Recupera o ID da AMI, o tipo de instância, o ID da sub-rede e os IDs do grupo de segurança do nó de trabalho problemático para uso na criação da instância de sondagem do Amazon EC2.

  15. CreateProbingInfrastructure- Cria um perfil de instância e analisa a instância do Amazon EC2 por meio de AWS CloudFormation uma pilha na mesma sub-rede do nó de trabalho problemático. A pilha tem um nomeAWSSupport-TroubleshootEKSDNSFailure-<ExecutionId>.

  16. GetProbingInstanceId- Recupera o ID da instância de sondagem do Amazon EC2 das saídas da CloudFormation pilha.

  17. WaitForProbingInstanceSSMAgentStateToBeOnline- Espera que o agente do Amazon EC2 Systems Manager na instância sondadora do Amazon EC2 relate um status antes de continuarOnline.

  18. RetrieveCoreDNSPodsIPFromProblematicNode- Recupera os endereços IP do pod CoreDNS conforme vistos no nó de trabalho problemático.

  19. PerformDNSResolutionOnProbingEC2Instance- Executa verificações de resolução de DNS na instância de sondagem do Amazon EC2 usando o IP do cluster e o IP do pod CoreDNS.

  20. DeleteCloudFormationStack- Exclui a CloudFormation pilha que criou a instância de sondagem do Amazon EC2 e o perfil da instância.

  21. UpdateCfnStackDeleted- Define a cfnStackDeleted variável interna comotrue.

  22. BranchOnCoreDnsDeployment- Verifica se não ProblematicNodeInstanceId foi fornecido e se existem nós de host CoreDNS. Se ambas as condições forem atendidas, prossiga paraPerformDNSResolutionOnCoreDnsWorkerNodes. Caso contrário, prossegue para. CleanupK8sAuthenticationInfrastructure

  23. BranchOnCoreDnsNodesExistForRunCommandSteps- Verifica se existem nós hospedeiros CoreDNS antes de executar as etapas. aws:runCommand Se não existirem nós (por exemplo, quando o CoreDNS tem zero réplicas), pule para. CleanupK8sAuthenticationInfrastructure

  24. PerformDNSResolutionOnCoreDnsWorkerNodes- Executa verificações de resolução de DNS diretamente nos nós de trabalho do CoreDNS usando o IP do cluster e o IP do pod do CoreDNS.

  25. VerifyNameserverMatchAndKubeProxyLogsAndIPTableEntries- Verifica se o IP do servidor de nomes corresponde ao IP do cluster, verifica o acesso do pod kube-proxy ao servidor da API e valida as entradas kube-dns iptables nos nós de trabalho do CoreDNS.

  26. VerifyPPSThrottlingOnENIs- Verifica o limite de DNS packets-per-second (PPS) por Elastic Network Interface (ENI) nos nós de trabalho do CoreDNS para identificar possíveis limitações.

  27. UpdateChecksOnNodes- Define a checksOnNodes variável interna true para indicar que as verificações em nível de nó foram realizadas.

  28. CleanupK8sAuthenticationInfrastructure- Executa AWSSupport-SetupK8sApiProxyForEKS com a Cleanup operação para remover a função de proxy Lambda e os recursos associados criados durante a automação.

  29. UpdateK8sInfrastructreDeleted- Define a K8sInfrastructreDeleted variável interna comotrue.

  30. CleanUpAllResources- Executa uma limpeza abrangente de todos os recursos restantes, incluindo a CloudFormation pilha e a função de proxy Lambda, caso as etapas de limpeza anteriores não tenham sido concluídas com êxito.

  31. CollectOutputFromAllRunCommandSteps- Coleta e consolida a saída de todas as aws:runCommand etapas que foram executadas durante a automação.

  32. GenerateReport- Compila os resultados de todas as etapas anteriores em um relatório de avaliação abrangente que abrange as configurações de DNS da VPC, a integridade da implantação do CoreDNS, a configuração, a configuração do HPA ConfigMap , o status da coleta de registros e os resultados da verificação da resolução do DNS.

Saídas

GenerateReport.EvalReport- Um relatório abrangente de todas as verificações de solução de problemas de DNS realizadas, incluindo descobertas e etapas de correção recomendadas.