AWSSupport-TroubleshootEKSALBControllerIssues - AWS Systems Manager Referenz zum Automatisierungs-Runbook

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWSSupport-TroubleshootEKSALBControllerIssues

Beschreibung

Das AWSSupport-TroubleshootEKSALBControllerIssues Automation Runbook hilft bei der Diagnose häufiger Probleme, die verhindern, dass der Load AWS Balancer Controller Application Load Balancer (ALB) und Network Load Balancer (NLB) für Kubernetes-Ingresses und -Services ordnungsgemäß bereitstellt und verwaltet.

Dieses Runbook überprüft wichtige Komponenten wie die Einrichtung end-to-end des OIDC-Identitätsanbieters, die IRSA-Konfiguration, die Netzwerkvoraussetzungen, die Konfiguration und die Ressourcenkontingente. ingress/service Es erfasst auch Controller-Logs und relevante Kubernetes-Ressourcenkonfigurationen, um Fehlkonfigurationen oder Betriebsprobleme zu identifizieren.

Wichtig

Dieses Automatisierungs-Runbook wurde für Amazon EKS-Cluster entwickelt, die Amazon Elastic Compute Cloud (Amazon EC2) -Knotengruppen verwenden, und unterstützt derzeit keine Cluster, auf denen ausgeführt wird. AWS Fargate

Wie funktioniert es?

Das Runbook AWSSupport-TroubleshootEKSALBControllerIssues führt die folgenden allgemeinen Schritte aus:

  • Überprüft den Amazon EKS-Clusterstatus, die Konfiguration des Zugriffseintrags und die Einrichtung des OIDC-Anbieters.

  • Erstellt einen temporären Lambda-Proxy für die Kubernetes-API-Kommunikation.

  • Überprüft die Bereitstellung des Load AWS Balancer Controllers und die Konfiguration des Dienstkontos.

  • Überprüft die Pod-Identität, den Webhook und die IAM-Rolleninjektion.

  • Überprüft die Subnetzkonfiguration und das Tagging für die Bereitstellung von Application Load Balancer und Network Load Balancer.

  • Vergleicht die Kontokontingente für Application Load Balancer und Network Load Balancer mit der aktuellen Nutzung.

  • Überprüft Anmerkungen zu Eingangs- und Serviceressourcen.

  • Überprüft das Tagging von Worker-Knoten-Sicherheitsgruppen auf die Load Balancer-Integration.

  • Sammelt Controller-Pod-Protokolle für Diagnosen.

  • Bereinigt temporäre Authentifizierungsressourcen.

  • Generiert einen Diagnosebericht mit Ergebnissen und Korrekturmaßnahmen.

Anmerkung
  • Für den Amazon EKS-Cluster muss ein Zugriffseintrag für die IAM-Entität konfiguriert sein, die diese Automatisierung ausführt. Der Authentifizierungsmodus des Clusters muss entweder auf API oder API_AND_CONFIG_MAP eingestellt sein. Ohne die richtige Konfiguration des Zugriffseintrags wird die Automatisierung bei der ersten Validierung beendet.

  • Der LambdaRoleArn Parameter ist erforderlich und muss über die AWS verwalteten Richtlinien verfügen AWSLambdaBasicExecutionRole und AWSLambdaVPCAccessExecutionRole angehängt sein, damit die Proxyfunktion mit der Kubernetes-API kommunizieren kann.

  • Der AWS Load Balancer Controller muss Version v2.1.1 oder höher sein.

  • Die Automatisierung umfasst einen Bereinigungsschritt, bei dem temporäre Infrastrukturressourcen für die Authentifizierung entfernt werden. Dieser Bereinigungsschritt wird auch dann ausgeführt, wenn die vorherigen Schritte fehlschlagen, und stellt so sicher, dass keine verwaisten Ressourcen in Ihrem Konto verbleiben. AWS

Führen Sie diese Automatisierung aus (Konsole)

Art des Dokuments

Automatisierung

Eigentümer

Amazon

Plattformen

/

Erforderliche IAM-Berechtigungen

Der AutomationAssumeRole Parameter erfordert die folgenden Aktionen, um das Runbook erfolgreich zu verwenden.

  • 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

Anweisungen

Gehen Sie wie folgt vor, um die Automatisierung zu konfigurieren und auszuführen:

Anmerkung

Gehen Sie vor dem Ausführen der Automatisierung folgendermaßen vor, um die erforderlichen IAM-Rollen zu konfigurieren: eine für Systems Manager Automation, um das Runbook auszuführen, und eine weitere für Lambda, um mit der Kubernetes-API zu kommunizieren:

  1. Erstellen Sie eine SSM-Automatisierungsrolle in Ihrem Konto. TroubleshootEKSALBController-SSM-Role Überprüfen Sie, dass die Vertrauensstellung die folgende Richtlinie enthält.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. Fügen Sie die folgende IAM-Richtlinie bei, um die erforderlichen Berechtigungen zu gewähren:

    { "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. Konfigurieren Sie den Zugriffseintrag für Ihren Amazon EKS-Cluster. Dies ist eine zwingende Voraussetzung für die Automatisierung. Schritte zur Konfiguration des Authentifizierungsmodus für Zugriffseinträge finden Sie unter Zugangseinträge einrichten.

    Navigieren Sie in der Amazon EKS-Konsole zu Ihrem Cluster und gehen Sie wie folgt vor:

    • Stellen Sie im Abschnitt Zugriff sicher, dass Ihre Authentifizierungskonfiguration entweder auf API oder eingestellt istAPI_AND_CONFIG_MAP.

    • Wählen Sie Zugangseintrag erstellen und konfigurieren Sie:

      • Wählen Sie für den IAM-Prinzipal-ARN die IAM-Rolle aus, die Sie erstellt haben ()TroubleshootEKSALBController-SSM-Role.

      • Wählen Sie als Typ die Option aus Standard.

    • Fügen Sie eine Zugriffsrichtlinie hinzu:

      • Wählen Sie als Richtlinienname die Option ausAmazonEKSAdminViewPolicy.

      • Wählen Sie als Zugriffsbereich die Option ausCluster.

    • Wählen Sie Richtlinie hinzufügen aus.

    • Überprüfen Sie die Details und wählen Sie Erstellen aus.

  4. Erstellen Sie eine IAM-Rolle für die Lambda-Funktion (referenziert wie LambdaRoleArn in den Eingabeparametern):

    • Erstellen Sie eine neue IAM-Rolle mit der folgenden Vertrauensrichtlinie:

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    • Fügen Sie dieser Rolle die folgenden AWS verwalteten Richtlinien hinzu:

      • AWSLambdaBasicExecutionRole

      • AWSLambdaVPCAccessExecutionRole

    • Notieren Sie sich den ARN dieser Rolle, da Sie ihn für den LambdaRoleArn Eingabeparameter benötigen.

  1. Navigieren Sie AWSSupport-TroubleshootEKSALBControllerIssuesin der AWS Systems Manager Manager-Konsole zu.

  2. Wählen Sie Automatisierung ausführen.

  3. Geben Sie für die Eingabeparameter Folgendes ein:

    • AutomationAssumeRole (Fakultativ):

      Typ:: AWS::IAM::Role: Arn

      Beschreibung: (Optional) Der Amazon-Ressourcenname (ARN) der AWS Identity and Access Management (IAM) -Rolle, mit der Systems Manager Automation Aktionen in Ihrem Namen ausführen kann. Wenn keine Rolle angegeben ist, verwendet Systems Manager Automation die Berechtigungen des Benutzers, der dieses Runbook startet.

      Zulässiges Muster: ^arn :(? :aws|aws-cn|aws-us-gov) :iam::\ d {12} :role/? [a-zA-Z_0-9+=, .@\ -_/] +$

    • EksClusterName (Erforderlich):

      Typ: Zeichenfolge

      Beschreibung: (Erforderlich) Name des Amazon Elastic Kubernetes Service (Amazon EKS) -Clusters.

      Zulässiges Muster: ^ [0-9A-Za-Z] [A-Za-Z0-9-_] {0,99} $

    • ALBControllerDeploymentName (Fakultativ):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Der Name der Load AWS Balancer Controller-Bereitstellung in Ihrem Amazon EKS-Cluster. Dies ist normalerweise 'aws-load-balancer-controller', sofern Sie ihn nicht während der Installation angepasst haben.

      Zulässiges Muster: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

      Standard: aws-load-balancer-controller

    • ALBControllerNamespace (optional):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Der Kubernetes-Namespace, in dem der Load AWS Balancer Controller bereitgestellt wird. Standardmäßig ist dies 'kube-system', aber es kann anders sein, wenn Sie den Controller in einem benutzerdefinierten Namespace installiert haben.

      Zulässiges Muster: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

      Standard: kube-system

    • ServiceAccountName (Fakultativ):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Der Name des Kubernetes-Dienstkontos, das dem AWS Load Balancer Controller zugeordnet ist. Dies ist normalerweise 'aws-load-balancer-controller', sofern er nicht während der Installation angepasst wurde.

      Zulässiges Muster: ^ [a-z0-9] ([-.a-z0-9] {0,251} [a-z0-9])? $

      Standard: aws-load-balancer-controller

    • ServiceAccountNamespace (Fakultativ):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Der Kubernetes-Namespace, in dem sich das Dienstkonto für den Load AWS Balancer Controller befindet. Dies ist in der Regel „kube-system“, kann sich jedoch unterscheiden, wenn Sie einen benutzerdefinierten Namespace verwendet haben.

      Zulässiges Muster: ^ [a-z0-9] ([-a-z0-9] {0,61} [a-z0-9])? $

      Standard: kube-system

    • IngressName (Fakultativ):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Name der zu validierenden Ingress-Ressource (Application Load Balancer). Wenn nicht angegeben, wird die Eingangsvalidierung übersprungen.

      Zulässiges Muster: ^$|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

      Standard: „“ (leere Zeichenfolge)

    • IngressNamespace (Fakultativ):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Namespace der Ingress-Ressource. Erforderlich, wenn IngressName angegeben.

      Zulässiges Muster: ^$|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

      Standard: „“ (leere Zeichenfolge)

    • ServiceName (Fakultativ):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Name einer bestimmten Dienstressource zur Überprüfung von Network Load Balancer (Network Load Balancer) -Annotationen. Wenn nicht angegeben, wird die Überprüfung der Dienstressourcen übersprungen.

      Zulässiges Muster: ^$|^ [a-z0-9] [a-z0-9.-] {0,251} [a-z0-9] $

      Standard: „“ (leere Zeichenfolge)

    • ServiceNamespace (Fakultativ):

      Typ: Zeichenfolge

      Beschreibung: (Optional) Namespace der Dienstressource. Erforderlich, wenn ServiceName angegeben.

      Zulässiges Muster: ^$|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $

      Standard: „“ (leere Zeichenfolge)

    • LambdaRoleArn (Erforderlich):

      Typ:: AWS::IAM::Role: Arn

      Beschreibung: (Erforderlich) Der ARN der IAM-Rolle, der der AWS Lambda (Lambda-) Funktion den Zugriff auf die erforderlichen AWS Dienste und Ressourcen ermöglicht. Ordnen Sie die AWS verwalteten Richtlinien: AWSLambdaBasicExecutionRole und Ihrer AWSLambdaVPCAccessExecutionRole IAM-Rolle für die Ausführung der Lambda-Funktion zu.

      Zulässiges Muster: ^arn :(? :aws|aws-cn|aws-us-gov) :iam::\ d {12} :role/? [a-zA-Z_0-9+=, .@\ -_/] +$

  4. Wählen Sie Ausführen.

  5. Die Automatisierung wird initiiert.

  6. Das Dokument führt die folgenden Schritte aus:

    1. ValidateAccessEntryAndOIDCProvider:

      Validiert das Amazon EKS-Cluster-IAM-Setup, indem die Zugriffsberechtigungen und die OIDC-Anbieterkonfiguration überprüft werden.

    2. sAuthenticationClientK8 einrichten:

      Führen Sie das SAW-Dokument AWSSupport-SetupK 8 sApiProxy für EKS aus, um eine Lambda-Funktion für die Ausführung von Amazon EKS-API-Aufrufen auf dem Cluster einzurichten.

    3. Überprüfen undALBController: IRSASetup

      Überprüft, ob der angegebene Service Account & Application Load Balancer Balancer-Controller in ihren jeweiligen Namespaces vorhanden ist. Überprüft auch die Service Account Role Annotation & Trust-Richtlinie des Application Load Balancer Balancer-Controllers.

    4. VerifyPodIdentityWebhookAndEnv:

      Prüft, ob pod-identity-webhook läuft. Überprüft auch, ob IRSA in die ENV-Variablen des Pods eingefügt wurde.

    5. ValidateSubnetRequirements:

      Prüft mindestens zwei Subnetze in zwei AZs mit 8 verfügbaren IP-Adressen. Für Load Balancer ist die richtige Subnetzkennzeichnung vorhanden. public/private

    6. CheckLoadBalancerLimitsAndUsage:

      Vergleichen Sie das Kontolimit mit der Anzahl der Application Load Balancer und Network Load Balancer.

    7. CheckIngressOrServiceAnnotations:

      Überprüft die Ingress- und Service-Ressourcen auf korrekte Anmerkungen und Spezifikationen, um sicherzustellen, dass sie für die Verwendung von Application Load Balancer und Network Load Balancer ordnungsgemäß konfiguriert sind.

    8. CheckWorkerNodeSecurityGroupTags:

      Stellen Sie sicher, dass genau eine Sicherheitsgruppe, die an die Worker-Knoten angehängt ist, über das erforderliche Cluster-Tag verfügt.

    9. ALBControllerProtokolle erfassen:

      Ruft die neuesten Diagnoseprotokolle von den Load AWS Balancer Controller-Pods ab, die im Amazon EKS-Cluster ausgeführt werden.

    10. CleanUp K8: sAuthenticationClient

      Führt das SAW-Dokument 'AWSSupport-SetupK8 sApiProxy für Eks' mithilfe der Operation 'Cleanup' aus, um Ressourcen zu bereinigen, die im Rahmen der Automatisierung erstellt wurden.

    11. GenerateReport:

      Generiert den Automatisierungsbericht.

  7. Nach Abschluss der Ausführung finden Sie im Abschnitt Ausgaben die detaillierten Ergebnisse der Ausführung:

    1. Bericht:

      Bietet eine umfassende Zusammenfassung aller durchgeführten Prüfungen, einschließlich des Status des Amazon EKS-Clusters, der Einrichtung des Application Load Balancer Controllers, der IRSA-Konfiguration, der Subnetzanforderungen, der Load Balancer-Grenzwerte, ingress/service Anmerkungen, Worker-Node-Sicherheitsgruppen-Tags und der Application Load Balancer Controller-Protokolle. Es enthält auch alle identifizierten Probleme und empfohlene Schritte zur Behebung.

Referenzen

Systems Manager Automation

Dokumentation zum AWS Load Balancer Controller