View a markdown version of this page

AWSSupport-TroubleshootEKSALBControllerIssues - AWS Systems Manager Riferimento al runbook dell’automazione

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

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 oAPI_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)

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:

  1. 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" } ] }
  2. 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" ] } } }] }
  3. 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.

    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 oAPI_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, selezionaAmazonEKSAdminViewPolicy.

      • Per Ambito di accesso, selezionareCluster.

    • Scegli Aggiungi policy.

    • Verifica i dettagli e scegli Crea.

  4. 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 alla console di AWS Systems Manager.

  2. Scegli Esegui automazione.

  3. 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 è specificatoIngressName.

      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 -_/] +$

  4. Scegli Esegui.

  5. L'automazione viene avviata.

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

    2. SetupK8sAuthenticationClient:

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

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

    4. VerifyPodIdentityWebhookAndEnv:

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

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

    6. CheckLoadBalancerLimitsAndUsage:

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

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

    8. CheckWorkerNodeSecurityGroupTags:

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

    9. CaptureALBControllerLogs:

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

    10. CleanupK8sAuthenticationClient:

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

    11. GenerateReport:

      Genera il report di automazione.

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

Documentazione relativa al AWS Load Balancer Controller