

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`
<a name="automation-awssupport-troubleshootekscni"></a>

## Description
<a name="automation-awssupport-troubleshootekscni-description"></a>

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
<a name="automation-awssupport-troubleshootekscni-run"></a>

 [Führen Sie diese Automatisierung aus (Konsole) ](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSCNI) 

## Dokumenttyp
<a name="automation-awssupport-troubleshootekscni-type"></a>

Automatisierung

## Eigentümer
<a name="automation-awssupport-troubleshootekscni-owner"></a>

Amazon

## Plattformen
<a name="automation-awssupport-troubleshootekscni-platforms"></a>

Linux

## Parameters
<a name="automation-awssupport-troubleshootekscni-parameters"></a>
+ `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
<a name="automation-awssupport-troubleshootekscni-permissions"></a>

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
<a name="automation-awssupport-troubleshootekscni-steps"></a>

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.

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

1. `BranchOnValidation`— Leitet die Ausführung auf der Grundlage der Ergebnisse der erforderlichen Überprüfung weiter. Wenn alle Voraussetzungen erfüllt sind, fahren Sie mit fort`DeployK8sApiProxy`. Andernfalls springen Sie zu`GenerateReport`.

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

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

1. `BranchOnNodeValidation`— Leitet die Ausführung auf der Grundlage der Ergebnisse der Knotenvalidierung weiter. Wenn der Knoten gültig ist, fahren Sie mit fort`RunCNIChecks`. Andernfalls springt zu`CleanupResources`.

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

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

1. `GenerateReport`- Generiert einen Diagnosebericht mit für Menschen lesbaren Meldungen und umsetzbaren Empfehlungen für jeden Befund.

## Outputs
<a name="automation-awssupport-troubleshootekscni-outputs"></a>

`GenerateReport.Report`- Eine umfassende Zusammenfassung aller Ergebnisse mit Fehlercodes, Meldungen und umsetzbaren Empfehlungen.