View a markdown version of this page

AWSSupport-TroubleshootEKSCNI - AWS Systems Manager Runbook-Referenz für Automation

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

  • AutomationAssumeRole

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

  • EksClusterName

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

  • InstanceId

    Geben Sie Folgendes ein: AWS: :EC2: :Instance: :Id

    Beschreibung: (Erforderlich) Die Amazon Elastic Compute Cloud (Amazon EC2) -Instanz-ID des Worker-Knotens.

  • S3BucketName

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

  • S3BucketOwnerAccount

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

  • LambdaRoleArn

    Geben 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:DescribeCluster

  • eks:DescribeAddon

  • eks:DescribeAddonVersions

  • eks:ListPodIdentityAssociations

  • eks:DescribePodIdentityAssociation

Amazon EC2-Berechtigungen
  • ec2:DescribeInstances

  • ec2:DescribeInstanceTypes

  • ec2:DescribeSubnets

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeVpcAttribute

  • ec2:DescribeRouteTables

  • ec2:DescribeVpcs

  • ec2:DescribeSecurityGroups

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

IAM-Berechtigungen
  • iam:GetRole

  • iam:GetInstanceProfile

  • iam:ListAttachedRolePolicies

  • iam:GetRolePolicy

  • iam:GetPolicy

  • iam:GetPolicyVersion

  • iam:SimulatePrincipalPolicy

  • iam:ListOpenIDConnectProviders

  • iam:GetOpenIDConnectProvider

  • iam:PassRole

  • iam:CreateRole

  • iam:TagRole

  • iam:AttachRolePolicy

  • iam:DetachRolePolicy

  • iam:DeleteRole

Lambda-Berechtigungen
  • lambda:CreateFunction

  • lambda:InvokeFunction

  • lambda:DeleteFunction

  • lambda:UpdateFunctionCode

  • lambda:GetFunction

  • lambda:TagResource

Amazon CloudWatch Logs-Berechtigungen
  • logs:CreateLogGroup

  • logs:TagResource

  • logs:DeleteLogGroup

  • logs:PutRetentionPolicy

AWS Systems Manager Berechtigungen
  • ssm:StartAutomationExecution

  • ssm:SendCommand

  • ssm:GetCommandInvocation

  • ssm:GetAutomationExecution

  • ssm:DescribeAutomationExecutions

  • ssm:DescribeAutomationStepExecutions

  • ssm:DescribeInstanceInformation

Berechtigungen zur Kennzeichnung von Ressourcen
  • tag:GetResources

  • tag:TagResources

AWS CloudFormation Berechtigungen
  • cloudformation:DescribeStacks

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

Amazon S3-Berechtigungen (nur erforderlich, wenn der S3BucketName Parameter angegeben wird)
  • s3:ListBucket

  • s3:GetBucketEncryption

  • s3:GetBucketAcl

  • s3:GetBucketPublicAccessBlock

  • s3:GetAccountPublicAccessBlock

  • s3:GetBucketPolicyStatus

  • s3:GetBucketLocation

  • s3: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

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

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

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

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

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

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

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

  8. CleanupResources- Bereinigt die Lambda-Funktion und die zugehörigen Ressourcen, die während der Diagnoseprüfungen bereitgestellt wurden, indem das AWSSupport-SetupK8sApiProxyForEKS untergeordnete Runbook zusammen mit dem Vorgang ausgeführt wird. Cleanup

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