AWSSupport-TroubleshootEKSALBControllerIssues - AWS Systems Manager Riferimento all'Automation Runbook

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 più comuni che impediscono al Load AWS Balancer Controller di effettuare correttamente il provisioning e la gestione di Application Load Balancer (ALB) e Network Load Balancer (NLB) per ingressi e servizi Kubernetes.

Questo runbook esegue la end-to-end convalida di 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 delle risorse Kubernetes pertinenti 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 di accesso 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'iniezione del ruolo IAM.

  • Convalida la configurazione e il tagging delle sottoreti 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 delle risorse in ingresso e di servizio.

  • Verifica l'etichettatura dei gruppi di sicurezza del nodo 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 terminerà 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 v2.1.1 o successiva.

  • 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 Systems Manager Automation per eseguire il runbook e un altro per Lambda per 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 Configurazione 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 IAM, seleziona il ruolo IAM che hai creato ()TroubleshootEKSALBController-SSM-Role.

      • In Tipo, seleziona Standard.

    • Aggiungi una politica di accesso:

      • Per il 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 come LambdaRoleArn nei parametri di input):

    • Crea un nuovo ruolo IAM con la seguente policy di fiducia:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    • Associa 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 a AWSSupport-TroubleshootEKSALBControllerIssuesnella console 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.

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

    • EksClusterName (Obbligatorio):

      Tipo: String

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

      Modello consentito: ^ [0-9a-zA-Z] [a-zA-Z0-9-_] {0,99} $

    • ALBControllerDeploymentName (Opzionale):

      Tipo: String

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

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

      Predefinito: aws-load-balancer-controller

    • ALBControllerNamespace (opzionale):

      Tipo: String

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

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

      Impostazione predefinita: kube-system

    • ServiceAccountName (Opzionale):

      Tipo: String

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

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

      Predefinito: aws-load-balancer-controller

    • ServiceAccountNamespace (Facoltativo):

      Tipo: String

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

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

      Impostazione predefinita: kube-system

    • IngressName (Opzionale):

      Tipo: String

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

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

      Predefinito: «» (stringa vuota)

    • IngressNamespace (Facoltativo):

      Tipo: String

      Descrizione: (Facoltativo) Namespace della risorsa Ingress. Obbligatorio se specificatoIngressName.

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

      Predefinito: «» (stringa vuota)

    • ServiceName (Facoltativo):

      Tipo: String

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

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

      Predefinito: «» (stringa vuota)

    • ServiceNamespace (Facoltativo):

      Tipo: String

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

      Modello 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 servizi e alle risorse richiesti AWS . Associa le politiche AWS gestite: AWSLambdaBasicExecutionRole e AWSLambdaVPCAccessExecutionRole al ruolo IAM per l'esecuzione della funzione lambda.

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

  4. Scegli Esegui.

  5. L'automazione inizia.

  6. Il documento esegue le seguenti operazioni:

    1. ValidateAccessEntryAndOIDCProvider:

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

    2. sAuthenticationClientConfigurazione K8:

      Esegui SAW Document AWSSupport-SetupK 8 sApiProxy ForEks per configurare una funzione lambda per eseguire chiamate API Amazon EKS sul cluster.

    3. Verifica ALBController e: IRSASetup

      Verifica se l'account di servizio e il controller Application Load Balancer specificati esistono nei rispettivi namespace. Controlla anche la policy Service Account Role Annotation & Trust del controller Application Load Balancer.

    4. VerifyPodIdentityWebhookAndEnv:

      Verifica se pod-identity-webhook è in esecuzione. Controlla anche se IRSA viene iniettato nelle variabili ENV del pod.

    5. ValidateSubnetRequirements:

      Controlla almeno due sottoreti in due AZ con 8 IP disponibili. Esiste una codifica adeguata 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 garantire 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. ALBControllerRegistri di acquisizione:

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

    10. sAuthenticationClientCleanUpK8:

      Esegue il documento SAW 'AWSSupport-SetupK8 sApiProxy ForEks' 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 di Application Load Balancer Controller, la configurazione IRSA, i requisiti di sottorete, i limiti del load balancer, ingress/service le annotazioni, i tag del gruppo di sicurezza del nodo di lavoro e i log di Application Load Balancer Controller. Include anche tutti i problemi identificati e le procedure di riparazione consigliate.

Riferimenti

Systems Manager Automation

Documentazione relativa a AWS Load Balancer Controller