

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`
<a name="automation-awssupport-troubleshoot-eks-alb-controller-issues"></a>

 **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` ou`API_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)](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSALBControllerIssues) 

**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:  
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"
                   }
               ]
           }
   ```
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"
                           ]
                       }
                   }
               }]
           }
   ```
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](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html).  
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` ou`API_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*, selecione`AmazonEKSAdminViewPolicy`.
Em *Escopo do Access*, selecione`Cluster`.
Escolha **Add policy**.
Verifique os detalhes e escolha **Criar**.
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-TroubleshootEKSALBControllerIssues](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)o console do AWS Systems Manager.

1. Escolha **Execute automation**.

1. 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\$1aws-cn\$1aws-us-gov) :iam::\$1 d \$112\$1 :função/? [A-zA-Z\$10-9\$1=, .@\$1 -\$1/] \$1\$1
   + **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-\$1] \$10,99\$1 \$1
   + **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] \$10,251\$1 [a-z0-9])? \$1

     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] \$10,61\$1 [a-z0-9])? \$1

     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] \$10,251\$1 [a-z0-9])? \$1

     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] \$10,61\$1 [a-z0-9])? \$1

     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: ^\$1\$1^ [a-z0-9] [a-z0-9.-] \$10,251\$1 [a-z0-9] \$1

     Padrão: “” (string vazia)
   + **IngressNamespace (Opcional):**

     Tipo: string

     Descrição: (Opcional) Namespace do recurso Ingress. Necessário, se `IngressName` for especificado.

     Padrão permitido: ^\$1\$1^ [a-z0-9] [a-z0-9-] \$10,61\$1 [a-z0-9] \$1

     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: ^\$1\$1^ [a-z0-9] [a-z0-9.-] \$10,251\$1 [a-z0-9] \$1

     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: ^\$1\$1^ [a-z0-9] [a-z0-9-] \$10,61\$1 [a-z0-9] \$1

     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\$1aws-cn\$1aws-us-gov) :iam::\$1 d \$112\$1 :função/? [A-zA-Z\$10-9\$1=, .@\$1 -\$1/] \$1\$1

1. Clique em **Executar**.

1. A automação é iniciada.

1. 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.

   1. **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.

   1. **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.

   1. **VerifyPodIdentityWebhookAndEnv:**

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

   1. **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 

   1. **CheckLoadBalancerLimitsAndUsage:**

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

   1. **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.

   1. **CheckWorkerNodeSecurityGroupTags:**

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

   1. **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.

   1. **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.

   1. **GenerateReport:**

      Gera o relatório de automação.

1. 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
+ [Execute esta automação (console)](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)
+ [Executar uma automação](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [Configurando a automação](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [Fluxos de trabalho de automação de suporte](https://aws.amazon.com/premiumsupport/technology/saw/)

Documentação relacionada ao AWS Load Balancer Controller
+ [AWS Controlador de balanceador de carga](https://docs.aws.amazon.com//eks/latest/userguide/aws-load-balancer-controller.html)
+ [Configurando entradas de acesso](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)