View a markdown version of this page

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

Descrição

O runbook de AWSSupport-TroubleshootEKSALBControllerIssues automação ajuda a diagnosticar problemas comuns que impedem o Load AWS 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 executa a end-to-end validação de componentes essenciais, incluindo configuração do provedor de identidade OIDC, configuração do IRSA, pré-requisitos de rede, configuração e cotas de recursos. ingress/service Ele também captura registros do controlador e configurações de recursos relevantes do Kubernetes para ajudar a identificar configurações incorretas ou problemas operacionais.

Importante

Esse runbook de automação foi projetado 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 os registros do pod do controlador para diagnóstico.

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

  • Gera relatório de diagnóstico com descobertas e etapas de remediaçã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 na 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 necessárias do IAM: uma para que o Systems Manager Automation execute 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. Anexe a seguinte política do IAM para conceder as permissões necessárias:

    { "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 do Access, selecioneCluster.

    • Escolha Add policy.

    • Verifique os detalhes e escolha Criar.

  4. Crie uma função do IAM para a função Lambda (referenciada 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-TroubleshootEKSALBControllerIssueso 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 Amazon Resource Name (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} :função/? [A-zA-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, é '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 Load Balancer AWS Controller é 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 Load Balancer Controller AWS . Normalmente, isso é '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 Load Balancer AWS Controller 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 do Ingress 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: (Opcional) Namespace do recurso Ingress. 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: (Opcional) Namespace 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 serviços e recursos necessários AWS . 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} :função/? [A-zA-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. Configurar K8: sAuthenticationClient

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

    3. Verifique ALBController eIRSASetup:

      Verifica se o controlador de Service Account & Application Load Balancer fornecido existe em seus respectivos namespaces. Também verifica a política de Anotação e Confiança da Função da Conta de Serviço do controlador do Application Load Balancer.

    4. VerifyPodIdentityWebhookAndEnv:

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

    5. ValidateSubnetRequirements:

      Verifique 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 do Ingress e do Service para garantir que estejam configurados adequadamente para o uso do Application Load Balancer e do Network Load Balancer.

    8. CheckWorkerNodeSecurityGroupTags:

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

    9. ALBControllerRegistros de captura:

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

    10. Limpeza K8: sAuthenticationClient

      Executa o documento SAW 'AWSSupport-SetupK8 sApiProxy forEks' usando a operação 'Cleanup' 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 obter 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 nó 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