View a markdown version of this page

AWSSupport-TroubleshootEKSALBControllerIssues - AWS Systems Manager Referência do runbooks de automação

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-TroubleshootEKSALBControllerIssues

Descrição

O runbook de AWSSupport-TroubleshootEKSALBControllerIssues automação ajuda a diagnosticar problemas comuns que impedem o AWS Load Balancer Controller de provisionar e gerenciar adequadamente o Application Load Balancer (ALB) e o Network Load Balancer (NLB) para entradas e serviços do Kubernetes.

Esse runbook realiza a validação completa de componentes essenciais, incluindo configuração do provedor de identidade OIDC, configuração IRSA, pré-requisitos de rede, configuração e cotas de recursos. ingress/service Ele também captura registros do controlador e configurações relevantes de recursos do Kubernetes para ajudar a identificar configurações incorretas ou problemas operacionais.

Importante

Esse runbook de automação foi desenvolvido para clusters do Amazon EKS usando grupos de nós do Amazon Elastic Compute Cloud (Amazon EC2) e atualmente não oferece suporte a clusters em execução. AWS Fargate

Como funciona?

O runbook AWSSupport-TroubleshootEKSALBControllerIssues executa as seguintes etapas de alto nível:

  • Valida o status do cluster Amazon EKS, a configuração da entrada de acesso e a configuração do provedor OIDC.

  • Cria um proxy Lambda temporário para comunicação com a API Kubernetes.

  • Verifica a implantação do AWS Load Balancer Controller e a configuração da conta de serviço.

  • Verifica a identidade do pod, o webhook e a injeção de função do IAM.

  • Valida a configuração e a marcação da sub-rede para o provisionamento do Application Load Balancer e do Network Load Balancer.

  • Verifica as cotas das contas do Application Load Balancer e do Network Load Balancer em relação ao uso atual.

  • Valida as anotações de entrada e de recursos de serviço.

  • Verifica a marcação do grupo de segurança do nó de trabalho quanto à integração do balanceador de carga.

  • Coleta registros do pod do controlador para diagnóstico.

  • Limpa os recursos de autenticação temporários.

  • Gera relatório de diagnóstico com descobertas e etapas de correção.

nota
  • O cluster Amazon EKS deve ter uma entrada de acesso configurada para a entidade IAM que executa essa automação. O modo de autenticação do cluster deve ser definido como API ouAPI_AND_CONFIG_MAP. Sem a configuração adequada da entrada de acesso, a automação será encerrada durante a validação inicial.

  • O LambdaRoleArn parâmetro é obrigatório e deve ter as políticas AWS gerenciadas AWSLambdaBasicExecutionRole e AWSLambdaVPCAccessExecutionRole anexadas para permitir que a função proxy se comunique com a API Kubernetes.

  • O AWS Load Balancer Controller deve ser uma versão v2.1.1 ou posterior.

  • A automação inclui uma etapa de limpeza que remove os recursos temporários da infraestrutura de autenticação. Essa etapa de limpeza é executada mesmo quando as etapas anteriores falham, garantindo que nenhum recurso órfão permaneça em sua conta. AWS

Executar esta automação (console)

Tipo de documento

Automação

Proprietário

Amazon

Plataformas

/

Permissões obrigatórias do IAM

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

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

  • cloudformation:DescribeStacks

  • cloudformation:UpdateStack

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

  • ec2:DescribeInstances

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

  • eks:DescribeCluster

  • eks:ListAssociatedAccessPolicies

  • elasticloadbalancing:DescribeAccountLimits

  • elasticloadbalancing:DescribeLoadBalancers

  • iam:GetRole

  • iam:ListOpenIDConnectProviders

  • iam:PassRole

  • lambda:CreateFunction

  • lambda:DeleteFunction

  • lambda:GetFunction

  • lambda:InvokeFunction

  • lambda:ListTags

  • lambda:TagResource

  • lambda:UntagResource

  • lambda:UpdateFunctionCode

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:DescribeLogGroups

  • logs:DescribeLogStreams

  • logs:ListTagsForResource

  • logs:PutLogEvents

  • logs:PutRetentionPolicy

  • logs:TagResource

  • logs:UntagResource

  • ssm:DescribeAutomationExecutions

  • ssm:GetAutomationExecution

  • ssm:StartAutomationExecution

  • tag:GetResources

  • tag:TagResources

Instruções

Siga estas etapas para configurar e executar a automação:

nota

Antes de executar a automação, siga estas etapas para configurar as funções do IAM necessárias: uma para o Systems Manager Automation executar o runbook e outra para o Lambda se comunicar com a API Kubernetes:

  1. Crie uma função de automação de SSM TroubleshootEKSALBController-SSM-Role em sua conta. Verifique se a relação de confiança contém a seguinte política.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Para conceder as permissões necessárias, anexe a política do IAM a seguir:

    { "Version": "2012-10-17", "Statement": [{ "Sid": "TroubleshootEKSALBControllerIssuesActions", "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListAssociatedAccessPolicies", "iam:GetRole", "iam:ListOpenIDConnectProviders", "ssm:StartAutomationExecution", "ssm:GetAutomationExecution", "ssm:DescribeAutomationExecutions", "ec2:DescribeSubnets", "ec2:DescribeRouteTables", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeAccountLimits", "ec2:DescribeInstances", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Sid": "SetupK8sApiProxyForEKSActions", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "eks:DescribeCluster", "iam:GetRole", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:InvokeFunction", "lambda:ListTags", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:ListTagsForResource", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource", "ssm:DescribeAutomationExecutions", "tag:GetResources", "tag:TagResources" ], "Resource": "*" }, { "Sid": "PassRoleToAutomation", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringLikeIfExists": { "iam:PassedToService": [ "lambda.amazonaws.com", "ssm.amazonaws.com" ] } } }] }
  3. Configure a entrada de acesso para seu cluster Amazon EKS. Esse é um requisito obrigatório para a automação. Para ver as etapas para configurar o modo de autenticação para entradas de acesso, consulte Configurando entradas de acesso.

    No console do Amazon EKS, navegue até seu cluster e siga estas etapas:

    • Na seção Acesso, verifique se sua configuração de autenticação está definida como API ouAPI_AND_CONFIG_MAP.

    • Escolha Criar entrada de acesso e configure:

      • Para o ARN principal do IAM, selecione a função do IAM que você criou (TroubleshootEKSALBController-SSM-Role).

      • Em Tipo, selecione Standard.

    • Adicione uma política de acesso:

      • Em Nome da política, selecioneAmazonEKSAdminViewPolicy.

      • Em Escopo de acesso, selecioneCluster.

    • Escolha Add policy.

    • Verifique os detalhes e escolha Criar.

  4. Crie uma função do IAM para a função Lambda (referenciada como LambdaRoleArn nos parâmetros de entrada):

    • Crie uma nova função do IAM com a seguinte política de confiança:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    • Anexe as seguintes políticas AWS gerenciadas a essa função:

      • AWSLambdaBasicExecutionRole

      • AWSLambdaVPCAccessExecutionRole

    • Observe o ARN dessa função, pois você precisará dele para o parâmetro LambdaRoleArn de entrada.

  1. Navegue até AWSSupport-TroubleshootEKSALBControllerIssues no console do AWS Systems Manager.

  2. Escolha Execute automation.

  3. Você pode usar os seguintes parâmetros de entrada:

    • AutomationAssumeRole (Opcional):

      Tipo: AWS: :IAM: :Role: :Arn

      Descrição: (Opcional) O nome de recurso da Amazon (ARN) da função AWS Identity and Access Management (IAM) que permite que o Systems Manager Automation execute 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.

      Padrão permitido: ^arn :(? :aws|aws-cn|aws-us-gov) :iam::\ d {12} :role/? [a-z A-Z _0-9+=, .@\ -_/] +$

    • EksClusterName (Obrigatório):

      Tipo: string

      Descrição: (Obrigatório) Nome do cluster Amazon Elastic Kubernetes Service (Amazon EKS).

      Padrão permitido: ^ [0-9A-Za-z] [A-Za-z0-9-_] {0,99} $

    • ALBControllerDeploymentName (Opcional):

      Tipo: string

      Descrição: (Opcional) O nome da implantação do AWS Load Balancer Controller em seu cluster Amazon EKS. Normalmente, é o 'aws-load-balancer-controller', a menos que você o tenha personalizado durante a instalação.

      Padrão permitido: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

      Padrão: aws-load-balancer-controller

    • ALBControllerNamespace (Opcional):

      Tipo: string

      Descrição: (Opcional) O namespace Kubernetes em que o AWS Load Balancer Controller está implantado. Por padrão, isso é 'kube-system', mas pode ser diferente se você tiver instalado o controlador em um namespace personalizado.

      Padrão permitido: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

      Padrão: kube-system

    • ServiceAccountName (Opcional):

      Tipo: string

      Descrição: (Opcional) O nome da conta de serviço do Kubernetes associada ao controlador do balanceador de AWS carga. Normalmente, é o “aws-load-balancer-controller”, a menos que seja personalizado durante a instalação.

      Padrão permitido: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

      Padrão: aws-load-balancer-controller

    • ServiceAccountNamespace (Opcional):

      Tipo: string

      Descrição: (Opcional) O namespace Kubernetes em que a conta de serviço do controlador do balanceador de AWS carga está localizada. Normalmente, isso é 'kube-system', mas pode ser diferente se você tiver usado um namespace personalizado.

      Padrão permitido: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

      Padrão: kube-system

    • IngressName (Opcional):

      Tipo: string

      Descrição: (Opcional) Nome do recurso de entrada a ser validado (Application Load Balancer). Se não for especificada, a validação do Ingress será ignorada.

      Padrão permitido: ^$|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

      Padrão: “” (string vazia)

    • IngressNamespace (Opcional):

      Tipo: string

      Descrição: Namespace (opcional) do recurso de entrada. Necessário, se IngressName for especificado.

      Padrão permitido: ^$|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

      Padrão: “” (string vazia)

    • ServiceName (Opcional):

      Tipo: string

      Descrição: (Opcional) Nome de um recurso de serviço específico para validar as anotações do Network Load Balancer (Network Load Balancer). Se não for especificado, a validação dos recursos do serviço será ignorada.

      Padrão permitido: ^$|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

      Padrão: “” (string vazia)

    • ServiceNamespace (Opcional):

      Tipo: string

      Descrição: Namespace (opcional) do recurso de serviço. Necessário, se ServiceName for especificado.

      Padrão permitido: ^$|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

      Padrão: “” (string vazia)

    • LambdaRoleArn (Obrigatório):

      Tipo: AWS: :IAM: :Role: :Arn

      Descrição: (Obrigatório) O ARN da função do IAM que permite que a função AWS Lambda (Lambda) acesse os AWS serviços e recursos necessários. Associe as políticas AWS gerenciadas: AWSLambdaBasicExecutionRole e AWSLambdaVPCAccessExecutionRole à sua função IAM de execução da função lambda.

      Padrão permitido: ^arn :(? :aws|aws-cn|aws-us-gov) :iam::\ d {12} :role/? [a-z A-Z _0-9+=, .@\ -_/] +$

  4. Clique em Executar.

  5. A automação é iniciada.

  6. O bucket realiza as seguintes etapas:

    1. ValidateAccessEntryAndOIDCProvider:

      Valida a configuração do IAM do cluster Amazon EKS verificando as permissões de entrada de acesso e a configuração do provedor OIDC.

    2. SetupK8sAuthenticationClient:

      Execute o documento SAW AWSSupport-SetupK8sApiProxyForEKS para configurar uma função lambda para executar chamadas de API do Amazon EKS no cluster.

    3. VerifyALBControllerAndIRSASetup:

      Verifica se a conta de serviço e o controlador do Application Load Balancer fornecidos existem em seus respectivos namespaces. Também verifica a política de confiança e anotação de função da conta de serviço do controlador do Application Load Balancer.

    4. VerifyPodIdentityWebhookAndEnv:

      Verifica se o pod-identity-webhook está em execução. Também verifica se o IRSA é injetado nas variáveis ENV do pod.

    5. ValidateSubnetRequirements:

      Verifique se há pelo menos duas sub-redes em duas AZs com 8 IPs disponíveis. Existe uma marcação de sub-rede adequada para balanceadores de carga. public/private

    6. CheckLoadBalancerLimitsAndUsage:

      Compare o limite da conta com o número de Application Load Balancer e Network Load Balancer.

    7. CheckIngressOrServiceAnnotations:

      Verifica as anotações e especificações corretas nos recursos de entrada e serviço para garantir que estejam configurados corretamente para uso do Application Load Balancer e do Network Load Balancer.

    8. CheckWorkerNodeSecurityGroupTags:

      Verifique se exatamente um grupo de segurança conectado aos nós de trabalho tem a tag de cluster necessária.

    9. CaptureALBControllerLogs:

      Recupera os registros de diagnóstico mais recentes dos pods do AWS Load Balancer Controller em execução no cluster Amazon EKS.

    10. CleanupK8sAuthenticationClient:

      Executa o documento SAW 'AWSSupport-SetupK8sApiProxyForEKS' usando a operação 'Limpeza' para limpar os recursos criados como parte da automação.

    11. GenerateReport:

      Gera o relatório de automação.

  7. Após a conclusão da execução, revise a seção Saídas para ver os resultados detalhados da execução:

    1. Relatório:

      Fornece um resumo abrangente de todas as verificações realizadas, incluindo o status do cluster Amazon EKS, a configuração do Application Load Balancer Controller, a configuração do IRSA, os requisitos de sub-rede, os limites do balanceador de carga, as ingress/service anotações, as tags do grupo de segurança do node de trabalho e os registros do Application Load Balancer Controller. Também inclui todos os problemas identificados e as etapas de correção recomendadas.

Referências

Automação do Systems Manager

Documentação relacionada ao AWS Load Balancer Controller