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-TroubleshootEKSCNI
Description
Das AWSSupport-TroubleshootEKSCNI Runbook diagnostiziert Probleme mit dem Amazon Virtual Private Cloud (Amazon VPC) CNI-Plugin auf Amazon Elastic Kubernetes Service (Amazon EKS) -Worker-Knoten. Es führt umfassende Diagnosetests durch, einschließlich Addon-Status, AWS Identity and Access Management (IAM) -Authentifizierung, Netzwerkkonfiguration und Konnektivität.
Das Runbook führt die folgenden Diagnosetests durch:
Amazon VPC CNI-Addon-Status (verwaltet und selbstverwaltet), Versionskompatibilität und Pod-Bereitschaft
IAM-Authentifizierung (Pod-Identität, IAM-Rollen für Dienstkonten (IRSA), Node-IAM-Rolle, OpenID Connect (OIDC) -Anbieter)
Netzwerkkonnektivität zum Amazon EKS-API-Server und zu Amazon Elastic Compute Cloud-Endpunkten
Zustand des Knotens, CNI-Konfigurationsdateien und System-Pod-Status
Netzwerkkonfiguration (IP-Familie, benutzerdefinierte Netzwerke, Präfixdelegierung, Pod-Dichte, Subnetzverfügbarkeit)
Konfiguration der Sicherheitsgruppe für Pods
Erfassung von Protokollen
eks-log-collector.shmithilfe des optionalen Amazon Simple Storage Service-Uploads
Wichtig
Dieses Runbook stellt temporäre AWS Lambda (Lambda-) Ressourcen bereit, für die möglicherweise Gebühren anfallen. Alle temporären Ressourcen werden am Ende der Ausführung automatisch bereinigt.
Führen Sie dieses Runbook aus
Führen Sie diese Automatisierung aus (Konsole)
Dokumenttyp
Automatisierung
Eigentümer
Amazon
Plattformen
Linux
Parameters
-
AutomationAssumeRoleGeben Sie Folgendes ein: AWS: :IAM: :Role: :Arn
Beschreibung: (Optional) Der Amazon-Ressourcenname (ARN) der IAM-Rolle, die es Systems Manager Automation ermöglicht, die Aktionen in Ihrem Namen auszuführen. Wenn keine Rolle angegeben ist, verwendet Systems Manager Automation die Berechtigungen des Benutzers, der dieses Runbook startet.
-
EksClusterNameTyp: Zeichenfolge
Zulässiges Muster:
^[a-zA-Z0-9][a-zA-Z0-9_-]{0,99}$Beschreibung: (Erforderlich) Der Name des Amazon EKS-Clusters, für das eine Fehlerbehebung durchgeführt werden soll.
-
InstanceIdGeben Sie Folgendes ein: AWS: :EC2: :Instance: :Id
Beschreibung: (Erforderlich) Die Amazon Elastic Compute Cloud (Amazon EC2) -Instanz-ID des Worker-Knotens.
-
S3BucketNameGeben Sie Folgendes ein: AWS: :S3: :Bucket: :Name
Beschreibung: (Optional) Der Amazon S3-Bucket für detaillierte Protokolle. Der Bucket muss sicher sein (nicht öffentlich, Verschlüsselung aktiviert).
-
S3BucketOwnerAccountTyp: Zeichenfolge
Standard:
{{ global:ACCOUNT_ID }}Zulässiges Muster:
^$|^\{\{ global:ACCOUNT_ID \}\}$|^[0-9]{12}$Beschreibung: (Optional) Das AWS Konto, dem der Amazon S3-Bucket gehört. Wenn Sie diesen Parameter nicht angeben, geht das Runbook davon aus, dass sich der Bucket in diesem Konto befindet.
-
LambdaRoleArnGeben Sie Folgendes ein: AWS: :IAM: :Role: :Arn
Beschreibung: (Optional) Der ARN der IAM-Rolle für die Lambda-Funktion zur Authentifizierung gegenüber dem Amazon EKS-Cluster. Wenn nicht angegeben, erstellt das Runbook eine temporäre Rolle.
Erforderliche IAM-Berechtigungen
Der AutomationAssumeRole Parameter erfordert die folgenden Aktionen, um das Runbook erfolgreich zu verwenden.
Wichtig
Die AutomationAssumeRole müssen in der Zugriffskonfiguration des Amazon EKS-Clusters zugeordnet werden, um authentifizierte Kubernetes API-Aufrufe zu ermöglichen. Sie können die Rolle über Amazon EKS-Zugriffseinträge oder die zuordnen. aws-auth ConfigMap Ohne diese Zuordnung kann die Automatisierung die Knotenregistrierung nicht überprüfen und schlägt mit einem Authentifizierungsfehler fehl.
Amazon EKS-Berechtigungen
eks:DescribeClustereks:DescribeAddoneks:DescribeAddonVersionseks:ListPodIdentityAssociationseks:DescribePodIdentityAssociation
Amazon EC2-Berechtigungen
ec2:DescribeInstancesec2:DescribeInstanceTypesec2:DescribeSubnetsec2:DescribeNetworkInterfacesec2:DescribeVpcAttributeec2:DescribeRouteTablesec2:DescribeVpcsec2:DescribeSecurityGroupsec2:CreateNetworkInterfaceec2:DeleteNetworkInterface
IAM-Berechtigungen
iam:GetRoleiam:GetInstanceProfileiam:ListAttachedRolePoliciesiam:GetRolePolicyiam:GetPolicyiam:GetPolicyVersioniam:SimulatePrincipalPolicyiam:ListOpenIDConnectProvidersiam:GetOpenIDConnectProvideriam:PassRoleiam:CreateRoleiam:TagRoleiam:AttachRolePolicyiam:DetachRolePolicyiam:DeleteRole
Lambda-Berechtigungen
lambda:CreateFunctionlambda:InvokeFunctionlambda:DeleteFunctionlambda:UpdateFunctionCodelambda:GetFunctionlambda:TagResource
Amazon CloudWatch Logs-Berechtigungen
logs:CreateLogGrouplogs:TagResourcelogs:DeleteLogGrouplogs:PutRetentionPolicy
AWS Systems Manager Berechtigungen
ssm:StartAutomationExecutionssm:SendCommandssm:GetCommandInvocationssm:GetAutomationExecutionssm:DescribeAutomationExecutionsssm:DescribeAutomationStepExecutionsssm:DescribeInstanceInformation
Berechtigungen zur Kennzeichnung von Ressourcen
tag:GetResourcestag:TagResources
AWS CloudFormation Berechtigungen
cloudformation:DescribeStackscloudformation:CreateStackcloudformation:DeleteStack
Amazon S3-Berechtigungen (nur erforderlich, wenn der S3BucketName Parameter angegeben wird)
s3:ListBuckets3:GetBucketEncryptions3:GetBucketAcls3:GetBucketPublicAccessBlocks3:GetAccountPublicAccessBlocks3:GetBucketPolicyStatuss3:GetBucketLocations3:PutObject
Um dieses Runbook auszuführen, benötigt der AutomationAssumeRole oder Ihr IAM-Benutzer die folgenden Aktionen. Das folgende Beispiel zeigt eine IAM-Richtlinie mit geringsten Rechten, die Berechtigungen auf bestimmte Ressourcenmuster beschränkt, die von der Automatisierung verwendet werden:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EKSReadOnly", "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:DescribeAddon", "eks:DescribeAddonVersions", "eks:ListPodIdentityAssociations", "eks:DescribePodIdentityAssociation" ], "Resource": [ "arn:aws:eks:REGION:ACCOUNTID:cluster/CLUSTER_NAME", "arn:aws:eks:REGION:ACCOUNTID:addon/CLUSTER_NAME/*", "arn:aws:eks:REGION:ACCOUNTID:podidentityassociation/CLUSTER_NAME/*" ] }, { "Sid": "EC2ReadOnly", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceTypes", "ec2:DescribeSubnets", "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcAttribute", "ec2:DescribeRouteTables", "ec2:DescribeVpcs", "ec2:DescribeSecurityGroups" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "EC2NetworkInterfaceForLambdaVPC", "Effect": "Allow", "Action": [ "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:network-interface/*", "arn:aws:ec2:REGION:ACCOUNTID:subnet/SUBNET_ID", "arn:aws:ec2:REGION:ACCOUNTID:security-group/CLUSTER_SECURITY_GROUP_ID" ] }, { "Sid": "IAMReadOnly", "Effect": "Allow", "Action": [ "iam:GetRole", "iam:GetInstanceProfile", "iam:ListAttachedRolePolicies", "iam:GetRolePolicy", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:SimulatePrincipalPolicy", "iam:ListOpenIDConnectProviders", "iam:GetOpenIDConnectProvider" ], "Resource": [ "arn:aws:iam::ACCOUNTID:role/*", "arn:aws:iam::ACCOUNTID:instance-profile/*", "arn:aws:iam::ACCOUNTID:policy/*", "arn:aws:iam::ACCOUNTID:oidc-provider/*" ] }, { "Sid": "IAMRoleManagementForLambda", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:TagRole", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:DeleteRole" ], "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*" }, { "Sid": "PassRoleToLambdaOnly", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*", "Condition": { "StringEquals": { "iam:PassedToService": "lambda.amazonaws.com" } } }, { "Sid": "LambdaManagement", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:InvokeFunction", "lambda:DeleteFunction", "lambda:UpdateFunctionCode", "lambda:GetFunction", "lambda:TagResource" ], "Resource": "arn:aws:lambda:REGION:ACCOUNTID:function:AWSSupport-SetupK8sApiProxy-*" }, { "Sid": "CloudWatchLogs", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:TagResource", "logs:DeleteLogGroup", "logs:PutRetentionPolicy" ], "Resource": "arn:aws:logs:REGION:ACCOUNTID:log-group:/aws/lambda/AWSSupport-SetupK8sApiProxy-*" }, { "Sid": "SSMAutomationScopedToChildDoc", "Effect": "Allow", "Action": "ssm:StartAutomationExecution", "Resource": [ "arn:aws:ssm:REGION:ACCOUNTID:automation-definition/AWSSupport-SetupK8sApiProxyForEKS:*", "arn:aws:ssm:REGION:ACCOUNTID:automation-execution/*" ] }, { "Sid": "SSMAutomationRead", "Effect": "Allow", "Action": [ "ssm:GetAutomationExecution", "ssm:DescribeAutomationExecutions", "ssm:DescribeAutomationStepExecutions" ], "Resource": "arn:aws:ssm:REGION:ACCOUNTID:automation-execution/*" }, { "Sid": "SSMCommandExecution", "Effect": "Allow", "Action": [ "ssm:SendCommand", "ssm:GetCommandInvocation" ], "Resource": [ "arn:aws:ssm:REGION::document/AWS-RunShellScript", "arn:aws:ec2:REGION:ACCOUNTID:instance/INSTANCE_ID" ] }, { "Sid": "SSMDescribeInstances", "Effect": "Allow", "Action": "ssm:DescribeInstanceInformation", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "CloudFormation", "Effect": "Allow", "Action": [ "cloudformation:DescribeStacks", "cloudformation:CreateStack", "cloudformation:DeleteStack" ], "Resource": "arn:aws:cloudformation:REGION:ACCOUNTID:stack/AWSSupport-SetupK8sApiProxyForEKS-*/*" }, { "Sid": "ResourceTagging", "Effect": "Allow", "Action": [ "tag:GetResources", "tag:TagResources" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "S3LogUpload", "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketEncryption", "s3:GetBucketAcl", "s3:GetBucketPublicAccessBlock", "s3:GetBucketPolicyStatus", "s3:GetBucketLocation", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::S3_BUCKET_NAME", "arn:aws:s3:::S3_BUCKET_NAME/*" ], "Condition": { "StringEquals": { "s3:ResourceAccount": "ACCOUNTID" } } }, { "Sid": "S3AccountPublicAccessBlock", "Effect": "Allow", "Action": "s3:GetAccountPublicAccessBlock", "Resource": "*" } ] }
Schritte dokumentieren
-
CheckConcurrency- Stellt sicher, dass dieses Runbook nur einmal ausgeführt wird, das auf dieselbe AWS Region abzielt. Wenn eine weitere Ausführung im Gange ist, gibt das Runbook einen Fehler zurück und wird beendet. -
ValidatePrerequisites— Überprüft alle Voraussetzungen, einschließlich Clusterstatus, Instance-Status, Amazon EC2 Systems Manager-Konnektivität, Amazon VPC-DNS-Einstellungen und IAM-Berechtigungen. Wenn eine der erforderlichen Validierungen fehlschlägt, springt das Runbook zu.GenerateReport -
BranchOnValidation— Leitet die Ausführung auf der Grundlage der Ergebnisse der erforderlichen Überprüfung weiter. Wenn alle Voraussetzungen erfüllt sind, fahren Sie mit fortDeployK8sApiProxy. Andernfalls springen Sie zuGenerateReport. -
DeployK8sApiProxy— Stellt eine Lambda-Funktion bereit, um authentifizierte Kubernetes API-Aufrufe an den Amazon EKS-Cluster zu senden, indem das untergeordnete Runbook ausgeführt wird.AWSSupport-SetupK8sApiProxyForEKS -
ValidateNodeInCluster— Überprüft mithilfe der API, ob die Amazon EC2-Instance ein registrierter Knoten im Amazon EKS-Cluster ist. Kubernetes Wenn der Knoten nicht im Cluster gefunden wird, springt das Runbook zu.CleanupResources -
BranchOnNodeValidation— Leitet die Ausführung auf der Grundlage der Ergebnisse der Knotenvalidierung weiter. Wenn der Knoten gültig ist, fahren Sie mit fortRunCNIChecks. Andernfalls springt zuCleanupResources. -
RunCNIChecks- Führt alle CNI-Diagnosetests aus, einschließlich Addon-Status, IAM-Authentifizierung, Konnektivität, Knotenzustand, Netzwerkkonfiguration, Sicherheitsgruppen und Protokollerfassung. Geht auch dann zum nächsten Schritt über, wenn bei den Prüfungen Fehler auftreten. -
CleanupResources- Bereinigt die Lambda-Funktion und die zugehörigen Ressourcen, die während der Diagnoseprüfungen bereitgestellt wurden, indem dasAWSSupport-SetupK8sApiProxyForEKSuntergeordnete Runbook zusammen mit dem Vorgang ausgeführt wird.Cleanup -
GenerateReport- Generiert einen Diagnosebericht mit für Menschen lesbaren Meldungen und umsetzbaren Empfehlungen für jeden Befund.
Outputs
GenerateReport.Report- Eine umfassende Zusammenfassung aller Ergebnisse mit Fehlercodes, Meldungen und umsetzbaren Empfehlungen.