

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# `AWSSupport-TroubleshootEKSALBControllerIssues`
<a name="automation-awssupport-troubleshoot-eks-alb-controller-issues"></a>

 **Descrizione** 

 Il runbook di `AWSSupport-TroubleshootEKSALBControllerIssues` automazione aiuta a diagnosticare i problemi comuni che impediscono al AWS Load Balancer Controller di effettuare correttamente il provisioning e la gestione di Application Load Balancer (ALB) e Network Load Balancer (NLB) per gli ingressi e i servizi Kubernetes. 

 Questo runbook esegue la convalida end-to-end dei componenti essenziali, tra cui la configurazione del provider di identità OIDC, la configurazione IRSA, i prerequisiti di rete, la configurazione e le quote di risorse. ingress/service Inoltre, acquisisce i log dei controller e le configurazioni pertinenti delle risorse Kubernetes per aiutare a identificare configurazioni errate o problemi operativi. 

**Importante**  
Questo runbook di automazione è progettato per i cluster Amazon EKS che utilizzano gruppi di nodi Amazon Elastic Compute Cloud (Amazon EC2) e attualmente non supporta i cluster in esecuzione su. AWS Fargate

 **Come funziona? ** 

 Il runbook `AWSSupport-TroubleshootEKSALBControllerIssues` esegue i seguenti passaggi di alto livello: 
+ Convalida lo stato del cluster Amazon EKS, la configurazione degli accessi e la configurazione del provider OIDC.
+ Crea un proxy Lambda temporaneo per la comunicazione tramite API Kubernetes.
+ Verifica la distribuzione AWS del Load Balancer Controller e la configurazione dell'account di servizio.
+ Verifica l'identità del pod, il webhook e l'inserimento dei ruoli IAM.
+ Convalida la configurazione e l'etichettatura della sottorete per il provisioning di Application Load Balancer e Network Load Balancer.
+ Verifica le quote degli account Application Load Balancer e Network Load Balancer rispetto all'utilizzo corrente.
+ Convalida le annotazioni sulle risorse di ingresso e di servizio.
+ Verifica la codifica dei gruppi di sicurezza dei nodi di lavoro per l'integrazione del sistema di bilanciamento del carico.
+ Raccoglie i log dei pod del controller per la diagnostica.
+ Pulisce le risorse di autenticazione temporanee.
+ Genera un rapporto diagnostico con i risultati e le fasi di correzione.

**Nota**  
Il cluster Amazon EKS deve avere una voce di accesso configurata per l'entità IAM che esegue questa automazione. La modalità di autenticazione del cluster deve essere impostata su `API` o`API_AND_CONFIG_MAP`. Senza una corretta configurazione dell'accesso, l'automazione verrà interrotta durante la convalida iniziale.
Il `LambdaRoleArn` parametro è obbligatorio e deve avere le politiche AWS gestite `AWSLambdaBasicExecutionRole` e `AWSLambdaVPCAccessExecutionRole` allegate per consentire alla funzione proxy di comunicare con l'API Kubernetes.
La versione del AWS Load Balancer Controller deve essere una versione successiva. `v2.1.1`
L'automazione include una fase di pulizia che rimuove le risorse temporanee dell'infrastruttura di autenticazione. Questa fase di pulizia viene eseguita anche quando i passaggi precedenti falliscono, assicurando che nell'account non rimangano risorse orfane. AWS 

 [Esegui questa automazione (console) ](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSALBControllerIssues) 

**Tipo di documento **

Automazione

**Proprietario**

Amazon

**Piattaforme**

/

**Autorizzazioni IAM richieste **

Il `AutomationAssumeRole` parametro richiede le seguenti azioni per utilizzare correttamente il runbook.
+ `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`

 **Istruzioni** 

Segui questi passaggi per configurare ed eseguire l'automazione:

**Nota**  
Prima di eseguire l'automazione, segui questi passaggi per configurare i ruoli IAM richiesti: uno per consentire a Systems Manager Automation di eseguire il runbook e un altro per consentire a Lambda di comunicare con l'API Kubernetes:  
Crea un ruolo di automazione SSM nel tuo account. `TroubleshootEKSALBController-SSM-Role` Verifica che la relazione di trust includa la policy seguente.  

   ```
   {
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Sid": "",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           }
   ```
Allega la seguente policy IAM per concedere le autorizzazioni richieste:  

   ```
   {
               "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"
                           ]
                       }
                   }
               }]
           }
   ```
Configura l'accesso per il tuo cluster Amazon EKS. Questo è un requisito obbligatorio per l'automazione. Per i passaggi per configurare la modalità di autenticazione per le voci di accesso, vedere [ Impostazione delle voci di accesso](https://docs.aws.amazon.com/eks/latest/userguide/setting-up-access-entries.html).  
Nella console Amazon EKS, accedi al tuo cluster e segui questi passaggi:  
**Nella sezione ** Accesso, verifica che la configurazione di autenticazione sia impostata su `API` o`API_AND_CONFIG_MAP`.
Scegli ** Crea voce di accesso ** e configura:  
Per l'ARN principale di * IAM*, seleziona il ruolo IAM che hai creato (`TroubleshootEKSALBController-SSM-Role`).
In *Tipo*, seleziona `Standard`.
Aggiungi una policy di accesso:  
Per Nome * della politica*, seleziona`AmazonEKSAdminViewPolicy`.
Per Ambito di * accesso*, selezionare`Cluster`.
Scegli **Aggiungi policy**.
Verifica i dettagli e scegli ** Crea**.
Crea un ruolo IAM per la funzione Lambda (a cui si fa riferimento `LambdaRoleArn` nei parametri di input):  
Crea un nuovo ruolo IAM con la seguente politica di fiducia:  

     ```
     {
                 "Version": "2012-10-17",		 	 	 
                 "Statement": [
                     {
                         "Effect": "Allow",
                         "Principal": {
                             "Service": "lambda.amazonaws.com"
                         },
                         "Action": "sts:AssumeRole"
                     }
                 ]
             }
     ```
Allega le seguenti politiche AWS gestite a questo ruolo:  
`AWSLambdaBasicExecutionRole`
`AWSLambdaVPCAccessExecutionRole`
Annota l'ARN di questo ruolo poiché ti servirà per il parametro `LambdaRoleArn` di input.

1. Accedere [ AWSSupport-TroubleshootEKSALBControllerIssues ](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description) alla console di AWS Systems Manager.

1. Scegli **Esegui automazione**.

1. Per i parametri di input, immettete quanto segue:
   + **AutomationAssumeRole (Facoltativo): **

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

     Descrizione: (Facoltativo) L'Amazon Resource Name (ARN) del ruolo AWS Identity and Access Management (IAM) che consente a Systems Manager Automation di eseguire azioni per tuo conto. Se non viene specificato alcun ruolo, Systems Manager Automation utilizza le autorizzazioni dell'utente che avvia questo runbook.

     Modello consentito: ^arn :(? :aws\|aws-cn\|aws-us-gov) :iam::\\ d {12} :ruolo/? [a-z \_0-9\+=, .@\\ A-Z -\_/] \+$
   + **EksClusterName (Obbligatorio): **

     Tipo: stringa

     Descrizione: (obbligatorio) Nome del cluster Amazon Elastic Kubernetes Service (Amazon EKS).

     Schema consentito: ^ [0-9A-Za-z] [A-Za-z0-9-\_] {0,99} $
   + **ALBControllerDeploymentName (Opzionale): **

     Tipo: stringa

     Descrizione: (Facoltativo) Il nome della distribuzione del AWS Load Balancer Controller nel cluster Amazon EKS. In genere si tratta di «aws-load-balancer-controller» a meno che tu non l'abbia personalizzato durante l'installazione.

     Schema consentito: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

     Predefinito: aws-load-balancer-controller
   + **ALBControllerNamespace (Opzionale): **

     Tipo: stringa

     Descrizione: (Facoltativo) Lo spazio dei nomi Kubernetes in cui è distribuito il AWS Load Balancer Controller. Per impostazione predefinita, si tratta di 'kube-system', ma potrebbe essere diverso se hai installato il controller in uno spazio dei nomi personalizzato.

     Schema consentito: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

     Predefinito: kube-system
   + **ServiceAccountName (Opzionale): **

     Tipo: stringa

     Descrizione: (Facoltativo) Il nome dell'account di servizio Kubernetes associato al AWS Load Balancer Controller. In genere si tratta di «aws-load-balancer-controller» a meno che non sia personalizzato durante l'installazione.

     Schema consentito: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

     Predefinito: aws-load-balancer-controller
   + **ServiceAccountNamespace (Opzionale): **

     Tipo: stringa

     Descrizione: (Facoltativo) Lo spazio dei nomi Kubernetes in cui si trova l'account di servizio per il AWS Load Balancer Controller. Si tratta in genere di «kube-system», ma può essere diverso se hai utilizzato un namespace personalizzato.

     Schema consentito: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

     Predefinito: kube-system
   + **IngressName (Opzionale): **

     Tipo: stringa

     Descrizione: (Facoltativo) Nome della risorsa Ingress da convalidare (Application Load Balancer). Se non viene specificato, la convalida di Ingress verrà ignorata.

     Schema consentito: ^$\|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

     Predefinito: «» (stringa vuota)
   + **IngressNamespace (Facoltativo): **

     Tipo: stringa

     Descrizione: (Facoltativo) Namespace della risorsa Ingress. Obbligatorio se è specificato`IngressName`.

     Schema consentito: ^$\|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

     Predefinito: «» (stringa vuota)
   + **ServiceName (Facoltativo): **

     Tipo: stringa

     Descrizione: (Facoltativo) Nome di una risorsa di servizio specifica per convalidare le annotazioni Network Load Balancer (Network Load Balancer). Se non specificato, la convalida delle risorse del servizio verrà ignorata.

     Schema consentito: ^$\|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

     Predefinito: «» (stringa vuota)
   + **ServiceNamespace (Facoltativo): **

     Tipo: stringa

     Descrizione: (Facoltativo) Namespace della risorsa del servizio. Obbligatorio se `ServiceName` è specificato.

     Schema consentito: ^$\|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

     Predefinito: «» (stringa vuota)
   + **LambdaRoleArn (Obbligatorio): **

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

     Descrizione: (Obbligatorio) L'ARN del ruolo IAM che consente alla funzione AWS Lambda (Lambda) di accedere ai AWS servizi e alle risorse richiesti. AWS Associa le policy gestite: `AWSLambdaBasicExecutionRole` e `AWSLambdaVPCAccessExecutionRole` al ruolo IAM di esecuzione della funzione lambda.

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

1. Scegli **Esegui**.

1. L'automazione viene avviata.

1. Il documento esegue i seguenti passaggi:

   1. **ValidateAccessEntryAndOIDCProvider:**

      Convalida la configurazione IAM del cluster Amazon EKS controllando le autorizzazioni di accesso e la configurazione del provider OIDC.

   1. **SetupK8sAuthenticationClient:**

      Esegui il documento SAW AWSSupport-SetupK8sApiProxyForEKS per configurare una funzione lambda per eseguire chiamate API Amazon EKS sul cluster.

   1. **VerifyALBControllerAndIRSASetup:**

      Verifica se il Service Account e il controller Application Load Balancer specificati esistono nei rispettivi namespace. Controlla anche la politica di annotazione e attendibilità del Service Account Role Annotation & Trust del controller Application Load Balancer.

   1. **VerifyPodIdentityWebhookAndEnv:**

      Controlla se pod-identity-webhook è in esecuzione. Controlla anche se l'IRSA viene inserito nelle variabili ENV del pod.

   1. **ValidateSubnetRequirements:**

      Controlla almeno due sottoreti in due AZ con 8 IP disponibili. Esiste una corretta etichettatura delle sottoreti per i sistemi di bilanciamento del carico. public/private 

   1. **CheckLoadBalancerLimitsAndUsage:**

      Confronta il limite dell'account con il numero di Application Load Balancer e Network Load Balancer.

   1. **CheckIngressOrServiceAnnotations:**

      Verifica la correttezza delle annotazioni e delle specifiche nelle risorse Ingress e Service per assicurarsi che siano configurate correttamente per l'utilizzo di Application Load Balancer e Network Load Balancer.

   1. **CheckWorkerNodeSecurityGroupTags:**

      Verifica che esattamente un gruppo di sicurezza collegato ai nodi di lavoro abbia il tag cluster richiesto.

   1. **CaptureALBControllerLogs:**

      Recupera i log diagnostici più recenti dai pod del AWS Load Balancer Controller in esecuzione nel cluster Amazon EKS.

   1. **CleanupK8sAuthenticationClient:**

      Esegue il documento SAW 'AWSSupport-SetupK8sApiProxyForEKS' utilizzando l'operazione 'Cleanup' per ripulire le risorse create come parte dell'automazione.

   1. **GenerateReport:**

      Genera il report di automazione.

1. Al termine dell'esecuzione, consulta la sezione Output per i risultati dettagliati dell'esecuzione:

   1. **Rapporto: **

      Fornisce un riepilogo completo di tutti i controlli eseguiti, tra cui lo stato del cluster Amazon EKS, la configurazione dell'Application Load Balancer Controller, la configurazione IRSA, i requisiti di sottorete, i limiti del load balancer, ingress/service le annotazioni, i tag dei gruppi di sicurezza dei nodi di lavoro e i log dell'Application Load Balancer Controller. Include anche eventuali problemi identificati e le procedure di risoluzione consigliate.

**Riferimenti**

Systems Manager Automation
+ [Esegui questa automazione (console) ](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)
+ [Esegui un'automazione ](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-working-executing.html)
+ [Configurazione dell'automazione ](https://docs.aws.amazon.com/systems-manager/latest/userguide/automation-setup.html)
+ [Supporta i flussi di lavoro di automazione ](https://aws.amazon.com/premiumsupport/technology/saw/)

Documentazione relativa al AWS Load Balancer Controller
+ [AWS Load Balancer Controller ](https://docs.aws.amazon.com/eks/latest/userguide/aws-load-balancer-controller.html)
+ [Impostazione delle voci di accesso ](https://docs.aws.amazon.com/eks/latest/userguide/setting-up-access-entries.html)