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 Automatisierungs-Runbook hilft bei der Diagnose häufiger Probleme, die verhindern, dass der Load AWS Balancer Controller den Application Load Balancer (ALB) und den Network Load Balancer (NLB) für Kubernetes-Eingänge und -Services ordnungsgemäß bereitstellt und verwaltet.
Dieses Runbook führt eine umfassende Validierung wichtiger Komponenten durch, einschließlich der Einrichtung des OIDC-Identitätsanbieters, der IRSA-Konfiguration, der Netzwerkvoraussetzungen, der Konfiguration und der 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 Zugriffskonfiguration und die Einrichtung des OIDC-Providers.
-
Erstellt einen temporären Lambda-Proxy für die Kubernetes-API-Kommunikation.
-
Überprüft die Bereitstellung AWS des Load 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.
-
Überprüft die Kontokontingente für Application Load Balancer und Network Load Balancer anhand der aktuellen Nutzung.
-
Validiert Anmerkungen zu Eingangs- und Serviceressourcen.
-
Überprüft das Tagging von Sicherheitsgruppen im Worker Node auf die Load Balancer-Integration.
-
Sammelt Controller-Pod-Protokolle zur Diagnose.
-
Bereinigt temporäre Authentifizierungsressourcen.
-
Generiert einen Diagnosebericht mit Ergebnissen und Abhilfemaß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 auf entweder
APIoderAPI_AND_CONFIG_MAPeingestellt sein. Ohne eine korrekte Konfiguration der Zugangseingabe wird die Automatisierung bei der ersten Validierung beendet. -
Der
LambdaRoleArnParameter ist erforderlich und muss mit den AWS verwalteten Richtlinien verknüpftAWSLambdaBasicExecutionRolesein, damit die Proxyfunktion mit der Kubernetes-API kommunizieren kann.AWSLambdaVPCAccessExecutionRole -
Der AWS Load Balancer Controller muss eine Version
v2.1.1oder höher haben. -
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. So wird sichergestellt, 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:CreateStackcloudformation:DeleteStackcloudformation:DescribeStackscloudformation:UpdateStackec2:CreateNetworkInterfaceec2:DeleteNetworkInterfaceec2:DescribeInstancesec2:DescribeNetworkInterfacesec2:DescribeRouteTablesec2:DescribeSecurityGroupsec2:DescribeSubnetsec2:DescribeVpcseks:DescribeClustereks:ListAssociatedAccessPolicieselasticloadbalancing:DescribeAccountLimitselasticloadbalancing:DescribeLoadBalancersiam:GetRoleiam:ListOpenIDConnectProvidersiam:PassRolelambda:CreateFunctionlambda:DeleteFunctionlambda:GetFunctionlambda:InvokeFunctionlambda:ListTagslambda:TagResourcelambda:UntagResourcelambda:UpdateFunctionCodelogs:CreateLogGrouplogs:CreateLogStreamlogs:DescribeLogGroupslogs:DescribeLogStreamslogs:ListTagsForResourcelogs:PutLogEventslogs:PutRetentionPolicylogs:TagResourcelogs:UntagResourcessm:DescribeAutomationExecutionsssm:GetAutomationExecutionssm:StartAutomationExecutiontag:GetResourcestag:TagResources
Anweisungen
Folgen Sie diesen Schritten, um die Automatisierung zu konfigurieren und auszuführen:
Anmerkung
Bevor Sie die Automatisierung ausführen, folgen Sie diesen Schritten, 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:
-
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" } ] } -
Hängen Sie die folgende IAM-Richtlinie an, 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" ] } } }] } -
Konfigurieren Sie den Zugriffseintrag für Ihren Amazon EKS-Cluster. Dies ist eine zwingende Voraussetzung für die Automatisierung. Schritte zum Konfigurieren des Authentifizierungsmodus für Zugriffseinträge finden Sie unter Zugriffseinträge einrichten.
Navigieren Sie in der Amazon EKS-Konsole zu Ihrem Cluster und folgen Sie diesen Schritten:
Vergewissern Sie sich, dass Ihre Authentifizierungskonfiguration im Abschnitt Zugriff auf entweder
APIoder festgelegt 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 aus
AmazonEKSAdminViewPolicy.Wählen Sie für Zugriffsumfang die Option aus
Cluster.
Wählen Sie Richtlinie hinzufügen aus.
Überprüfen Sie die Angaben und wählen Sie Erstellen aus.
-
Erstellen Sie eine IAM-Rolle für die Lambda-Funktion (auf die wie
LambdaRoleArnin den Eingabeparametern verwiesen wird):-
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" } ] } -
Hängen Sie die folgenden AWS verwalteten Richtlinien an diese Rolle an:
AWSLambdaBasicExecutionRoleAWSLambdaVPCAccessExecutionRole
-
Notieren Sie sich den ARN dieser Rolle, da Sie ihn für den
LambdaRoleArnEingabeparameter benötigen.
-
-
Navigieren Sie AWSSupport-TroubleshootEKSALBControllerIssues
in der AWS Systems Manager-Konsole zu. -
Wählen Sie Automatisierung ausführen.
-
Geben Sie für die Eingabeparameter Folgendes ein:
-
AutomationAssumeRole (Fakultativ):
Geben Sie Folgendes ein: AWS: :IAM: :Role: :Arn
Beschreibung: (Optional) Der Amazon-Ressourcenname (ARN) der AWS Identity and Access Management (IAM) -Rolle, die es Systems Manager Automation ermöglicht, Aktionen in Ihrem Namen auszuführen. 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-z _0-9+=, .@A-Z\ -_/] +$
-
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 in der Regel „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 (Fakultativ):
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.
Erlaubtes 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 in der Regel „aws-load-balancer-controller“, sofern er nicht während der Installation angepasst wird.
Erlaubtes 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 normalerweise ein „Kube-System“, kann jedoch abweichen, wenn Sie einen benutzerdefinierten Namespace verwendet haben.
Erlaubtes 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 Ingress-Validierung ü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
IngressNameangegeben.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 der Anmerkungen zum Network Load Balancer (Network Load Balancer). Wenn nicht angegeben, wird die Validierung der Serviceressourcen ü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 Service-Ressource. Erforderlich, wenn
ServiceNameangegeben.Zulässiges Muster: ^$|^ [a-z0-9] [a-z0-9-] {0,61} [a-z0-9] $
Standard: „“ (leere Zeichenfolge)
-
LambdaRoleArn (Erforderlich):
Geben Sie Folgendes ein: AWS: :IAM: :Role: :Arn
Beschreibung: (Erforderlich) Der ARN der IAM-Rolle, der es der AWS Lambda (Lambda-) Funktion ermöglicht, auf die erforderlichen AWS Dienste und Ressourcen zuzugreifen. Ordnen Sie die AWS verwalteten Richtlinien:
AWSLambdaBasicExecutionRoleund IhrerAWSLambdaVPCAccessExecutionRoleIAM-Rolle zur Ausführung der Lambda-Funktion zu.Zulässiges Muster: ^arn :(? :aws|aws-cn|aws-us-gov) :iam::\ d {12} :role/? [a-z _0-9+=, .@A-Z\ -_/] +$
-
-
Wählen Sie Ausführen.
-
Die Automatisierung wird initiiert.
-
Das Dokument führt die folgenden Schritte aus:
-
ValidateAccessEntryAndOIDCProvider:
Validiert das Amazon EKS-Cluster-IAM-Setup, indem es die Zugriffsberechtigungen und die OIDC-Provider-Konfiguration überprüft.
-
SetupK8sAuthenticationClient:
Führen Sie das SAW-Dokument aus AWSSupport-SetupK8sApiProxyForEKS , um eine Lambda-Funktion zur Ausführung von Amazon EKS-API-Aufrufen auf dem Cluster einzurichten.
-
VerifyALBControllerAndIRSASetup:
Überprüft, ob der angegebene Service Account & Application Load Balancer-Controller in den jeweiligen Namespaces vorhanden ist. Überprüft auch die Richtlinie „Service Account Role Annotation & Trust“ des Application Load Balancer-Controllers.
-
VerifyPodIdentityWebhookAndEnv:
Überprüft, ob pod-identity-webhook ausgeführt wird. Überprüft auch, ob IRSA in die ENV-Variablen des Pods eingefügt wird.
-
ValidateSubnetRequirements:
Überprüfen Sie mindestens zwei Subnetze in zwei AZs mit 8 verfügbaren IP-Adressen. Für Load Balancer ist ein korrektes Subnetz-Tagging vorhanden. public/private
-
CheckLoadBalancerLimitsAndUsage:
Vergleichen Sie das Kontolimit mit der Anzahl der Application Load Balancer und Network Load Balancer.
-
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.
-
CheckWorkerNodeSecurityGroupTags:
Stellen Sie sicher, dass genau eine Sicherheitsgruppe, die an die Worker-Knoten angehängt ist, über das erforderliche Cluster-Tag verfügt.
-
CaptureALBControllerLogs:
Ruft die neuesten Diagnoseprotokolle von den Load AWS Balancer Controller-Pods ab, die im Amazon EKS-Cluster ausgeführt werden.
-
CleanupK8sAuthenticationClient:
Führt das SAW-Dokument '' mithilfe der Operation AWSSupport-SetupK8sApiProxyForEKS 'Cleanup' aus, um Ressourcen zu bereinigen, die im Rahmen der Automatisierung erstellt wurden.
-
GenerateReport:
Generiert den Automatisierungsbericht.
-
-
Nach Abschluss der Ausführung finden Sie im Abschnitt Ausgaben die detaillierten Ergebnisse der Ausführung:
-
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, Sicherheitsgruppen-Tags für Worker Nodes und der Application Load Balancer Controller-Protokolle. Es enthält auch alle identifizierten Probleme und empfohlene Abhilfemaßnahmen.
-
Referenzen
Systems Manager Automation
Dokumentation zum AWS Load Balancer Controller