View a markdown version of this page

AWSSupport-TroubleshootEKSCNI - AWS Systems Manager Riferimento al runbook dell’automazione

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWSSupport-TroubleshootEKSCNI

Description

Il AWSSupport-TroubleshootEKSCNI runbook diagnostica i problemi con il plug-in CNI Amazon Virtual Private Cloud (Amazon VPC) sui nodi di lavoro Amazon Elastic Kubernetes Service (Amazon EKS). Esegue controlli diagnostici completi, tra cui lo stato dell'addon, l'autenticazione AWS Identity and Access Management (IAM), la configurazione di rete e la connettività.

Il runbook esegue i seguenti controlli diagnostici:

  • Stato dell'addon Amazon VPC CNI (gestito e autogestito), compatibilità delle versioni e disponibilità dei pod

  • Autenticazione IAM (Pod Identity, IAM Roles for Service Accounts (IRSA), ruolo IAM del nodo, provider OpenID Connect (OIDC))

  • Connettività di rete al server API Amazon EKS e agli endpoint Amazon Elastic Compute Cloud

  • Stato del nodo, file di configurazione CNI e stato del pod di sistema

  • Configurazione di rete (famiglia IP, rete personalizzata, delega dei prefissi, densità dei pod, disponibilità della sottorete)

  • Configurazione del gruppo di sicurezza per i pod

  • Raccolta dei log mediante caricamento opzionale eks-log-collector.sh di Amazon Simple Storage Service

Importante

Questo runbook utilizza risorse temporanee AWS Lambda (Lambda) e potrebbe comportare costi associati. Tutte le risorse temporanee vengono ripulite automaticamente al termine dell'esecuzione.

Esegui questo runbook

Esegui questa automazione (console)

Tipo di documento

Automazione

Owner

Amazon

Piattaforme

Linux

Parameters

  • AutomationAssumeRole

    Tipo: AWS: :IAM: :Role: :Arn

    Descrizione: (Facoltativo) L'Amazon Resource Name (ARN) del ruolo IAM che consente a Systems Manager Automation di eseguire le azioni per tuo conto. Se non viene specificato alcun ruolo, Systems Manager Automation utilizza le autorizzazioni dell'utente che avvia questo runbook.

  • EksClusterName

    Tipo: stringa

    Schema consentito: ^[a-zA-Z0-9][a-zA-Z0-9_-]{0,99}$

    Descrizione: (obbligatorio) Il nome del cluster Amazon EKS per la risoluzione dei problemi.

  • InstanceId

    Tipo: AWS: :EC2: :Instance: :Id

    Descrizione: (Obbligatorio) L'ID dell'istanza Amazon Elastic Compute Cloud (Amazon EC2) del nodo di lavoro.

  • S3BucketName

    Tipo: AWS: :S3: :Bucket: :Name

    Descrizione: (Facoltativo) Il bucket Amazon S3 per log dettagliati. Il bucket deve essere sicuro (non pubblico, crittografia abilitata).

  • S3BucketOwnerAccount

    Tipo: stringa

    Impostazione predefinita: {{ global:ACCOUNT_ID }}

    Schema consentito: ^$|^\{\{ global:ACCOUNT_ID \}\}$|^[0-9]{12}$

    Descrizione: (Facoltativo) L' AWS account proprietario del bucket Amazon S3. Se non si specifica questo parametro, il runbook presuppone che il bucket si trovi in questo account.

  • LambdaRoleArn

    Tipo: AWS: :IAM: :Role: :Arn

    Descrizione: (Facoltativo) L'ARN del ruolo IAM per l'autenticazione della funzione Lambda nel cluster Amazon EKS. Se non viene fornito, il runbook crea un ruolo temporaneo.

Autorizzazioni IAM richieste

Il AutomationAssumeRole parametro richiede le seguenti azioni per utilizzare correttamente il runbook.

Importante

AutomationAssumeRoleDeve essere mappato nella configurazione di accesso del cluster Amazon EKS per consentire chiamate API autenticateKubernetes. È possibile mappare il ruolo tramite le voci di accesso di Amazon EKS o il. aws-auth ConfigMap Senza questa mappatura, l'automazione non può verificare la registrazione del nodo e fallisce con un errore di autenticazione.

Autorizzazioni Amazon EKS
  • eks:DescribeCluster

  • eks:DescribeAddon

  • eks:DescribeAddonVersions

  • eks:ListPodIdentityAssociations

  • eks:DescribePodIdentityAssociation

Autorizzazioni Amazon EC2
  • ec2:DescribeInstances

  • ec2:DescribeInstanceTypes

  • ec2:DescribeSubnets

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeVpcAttribute

  • ec2:DescribeRouteTables

  • ec2:DescribeVpcs

  • ec2:DescribeSecurityGroups

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

autorizzazioni IAM
  • 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

Autorizzazioni Lambda
  • lambda:CreateFunction

  • lambda:InvokeFunction

  • lambda:DeleteFunction

  • lambda:UpdateFunctionCode

  • lambda:GetFunction

  • lambda:TagResource

Autorizzazioni Amazon Logs CloudWatch
  • logs:CreateLogGroup

  • logs:TagResource

  • logs:DeleteLogGroup

  • logs:PutRetentionPolicy

AWS Systems Manager autorizzazioni
  • ssm:StartAutomationExecution

  • ssm:SendCommand

  • ssm:GetCommandInvocation

  • ssm:GetAutomationExecution

  • ssm:DescribeAutomationExecutions

  • ssm:DescribeAutomationStepExecutions

  • ssm:DescribeInstanceInformation

Autorizzazioni di etichettatura delle risorse
  • tag:GetResources

  • tag:TagResources

AWS CloudFormation autorizzazioni
  • cloudformation:DescribeStacks

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

Autorizzazioni Amazon S3 (richieste solo quando viene S3BucketName fornito un parametro)
  • s3:ListBucket

  • s3:GetBucketEncryption

  • s3:GetBucketAcl

  • s3:GetBucketPublicAccessBlock

  • s3:GetAccountPublicAccessBlock

  • s3:GetBucketPolicyStatus

  • s3:GetBucketLocation

  • s3:PutObject

Per eseguire questo runbook, il tuo utente IAM AutomationAssumeRole o il tuo utente IAM richiede le seguenti azioni. L'esempio seguente mostra una policy IAM con privilegi minimi che assegna le autorizzazioni a modelli di risorse specifici utilizzati dall'automazione:

{ "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": "*" } ] }

Fasi del documento

  1. CheckConcurrency- Assicura che vi sia una sola esecuzione di questo runbook destinata alla stessa AWS regione. Se è in corso un'altra esecuzione, il runbook restituisce un errore e termina.

  2. ValidatePrerequisites- Convalida tutti i prerequisiti, tra cui lo stato del cluster, lo stato dell'istanza, la connettività di Amazon EC2 Systems Manager, le impostazioni DNS di Amazon VPC e le autorizzazioni IAM. Se la convalida dei prerequisiti fallisce, il runbook passa a. GenerateReport

  3. BranchOnValidation- Esecuzione dei percorsi in base ai risultati della convalida dei prerequisiti. Se tutti i prerequisiti sono validi, procede a. DeployK8sApiProxy Altrimenti, passa a. GenerateReport

  4. DeployK8sApiProxy- Implementa una funzione Lambda per effettuare chiamate Kubernetes API autenticate al cluster Amazon EKS eseguendo il runbook secondario. AWSSupport-SetupK8sApiProxyForEKS

  5. ValidateNodeInCluster- Verifica che l'istanza Amazon EC2 sia un nodo registrato nel cluster Amazon EKS tramite l'API. Kubernetes Se il nodo non viene trovato nel cluster, il runbook passa a. CleanupResources

  6. BranchOnNodeValidation- Esecuzione dei percorsi in base ai risultati della convalida del nodo. Se il nodo è valido, procede a. RunCNIChecks Altrimenti, passa a. CleanupResources

  7. RunCNIChecks- Esegue tutti i controlli diagnostici CNI, inclusi lo stato dell'addon, l'autenticazione IAM, la connettività, lo stato dei nodi, la configurazione di rete, i gruppi di sicurezza e la raccolta dei log. Passa alla fase successiva anche se i controlli rilevano errori.

  8. CleanupResources- Pulisce la funzione Lambda e le risorse associate distribuite durante i controlli diagnostici eseguendo il runbook AWSSupport-SetupK8sApiProxyForEKS secondario con l'operazione. Cleanup

  9. GenerateReport- Genera un rapporto diagnostico con messaggi leggibili dall'uomo e consigli pratici per ogni risultato.

Output

GenerateReport.Report- Un riepilogo completo di tutti i risultati con codici di errore, messaggi e consigli utilizzabili.