Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
AWSSupport-TroubleshootEKSCNI
Description
Le AWSSupport-TroubleshootEKSCNI runbook diagnostique les problèmes liés au plug-in CNI Amazon Virtual Private Cloud (Amazon VPC) sur les nœuds de travail Amazon Elastic Kubernetes Service (Amazon EKS). Il exécute des tests de diagnostic complets, notamment l'état des modules complémentaires, l'authentification Gestion des identités et des accès AWS (IAM), la configuration réseau et la connectivité.
Le runbook effectue les contrôles de diagnostic suivants :
État du module complémentaire CNI Amazon VPC (géré et autogéré), compatibilité des versions et état de préparation des pods
Authentification IAM (identité du pod, rôles IAM pour les comptes de service (IRSA), rôle IAM du nœud, fournisseur OpenID Connect (OIDC))
Connectivité réseau au serveur API Amazon EKS et aux points de terminaison Amazon Elastic Compute Cloud
État du nœud, fichiers de configuration CNI et état du module système
Configuration réseau (famille IP, réseau personnalisé, délégation de préfixes, densité de pods, disponibilité des sous-réseaux)
Configuration des groupes de sécurité pour les pods
Collecte de journaux à l'
eks-log-collector.shaide du téléchargement optionnel d'Amazon Simple Storage Service
Important
Ce runbook déploie des ressources temporaires AWS Lambda (Lambda) et peut entraîner des frais associés. Toutes les ressources temporaires sont nettoyées automatiquement à la fin de l'exécution.
Exécutez ce runbook
Exécutez cette automatisation (console)
Type de document
Automatisation
Propriétaire
Amazon
Plateformes
Linux
Parameters
-
AutomationAssumeRoleType : AWS : :IAM : :Role : :Arn
Description : (Facultatif) Le nom de ressource Amazon (ARN) du rôle IAM qui permet à Systems Manager Automation d'effectuer les actions en votre nom. Si aucun rôle n'est spécifié, Systems Manager Automation utilise les autorisations de l'utilisateur qui démarre ce runbook.
-
EksClusterNameType : Chaîne
Schéma autorisé :
^[a-zA-Z0-9][a-zA-Z0-9_-]{0,99}$Description : (Obligatoire) Le nom du cluster Amazon EKS à résoudre.
-
InstanceIdType : AWS : :EC2 : :Instance : :ID
Description : (Obligatoire) L'ID d'instance Amazon Elastic Compute Cloud (Amazon EC2) du nœud de travail.
-
S3BucketNameType : AWS : :S3 : :Bucket : :Nom
Description : (Facultatif) Le compartiment Amazon S3 pour les journaux détaillés. Le bucket doit être sécurisé (non public, chiffrement activé).
-
S3BucketOwnerAccountType : Chaîne
Valeur par défaut :
{{ global:ACCOUNT_ID }}Schéma autorisé :
^$|^\{\{ global:ACCOUNT_ID \}\}$|^[0-9]{12}$Description : (Facultatif) Le AWS compte propriétaire du compartiment Amazon S3. Si vous ne spécifiez pas ce paramètre, le runbook suppose que le bucket se trouve dans ce compte.
-
LambdaRoleArnType : AWS : :IAM : :Role : :Arn
Description : (Facultatif) L'ARN du rôle IAM pour que la fonction Lambda s'authentifie auprès du cluster Amazon EKS. S'il n'est pas fourni, le runbook crée un rôle temporaire.
Autorisations IAM requises
Le AutomationAssumeRole paramètre nécessite les actions suivantes pour utiliser correctement le runbook.
Important
AutomationAssumeRoleIl doit être mappé dans la configuration d'accès du cluster Amazon EKS pour permettre des appels d'KubernetesAPI authentifiés. Vous pouvez mapper le rôle via les entrées d'accès Amazon EKS ou le aws-auth ConfigMap. Sans ce mappage, l'automatisation ne peut pas vérifier l'enregistrement des nœuds et échoue avec une erreur d'authentification.
Autorisations Amazon EKS
eks:DescribeClustereks:DescribeAddoneks:DescribeAddonVersionseks:ListPodIdentityAssociationseks:DescribePodIdentityAssociation
Autorisations Amazon EC2
ec2:DescribeInstancesec2:DescribeInstanceTypesec2:DescribeSubnetsec2:DescribeNetworkInterfacesec2:DescribeVpcAttributeec2:DescribeRouteTablesec2:DescribeVpcsec2:DescribeSecurityGroupsec2:CreateNetworkInterfaceec2:DeleteNetworkInterface
Autorisations IAM
iam:GetRoleiam:GetInstanceProfileiam:ListAttachedRolePoliciesiam:GetRolePolicyiam:GetPolicyiam:GetPolicyVersioniam:SimulatePrincipalPolicyiam:ListOpenIDConnectProvidersiam:GetOpenIDConnectProvideriam:PassRoleiam:CreateRoleiam:TagRoleiam:AttachRolePolicyiam:DetachRolePolicyiam:DeleteRole
Autorisations Lambda
lambda:CreateFunctionlambda:InvokeFunctionlambda:DeleteFunctionlambda:UpdateFunctionCodelambda:GetFunctionlambda:TagResource
Autorisations Amazon CloudWatch Logs
logs:CreateLogGrouplogs:TagResourcelogs:DeleteLogGrouplogs:PutRetentionPolicy
AWS Systems Manager des autorisations
ssm:StartAutomationExecutionssm:SendCommandssm:GetCommandInvocationssm:GetAutomationExecutionssm:DescribeAutomationExecutionsssm:DescribeAutomationStepExecutionsssm:DescribeInstanceInformation
Autorisations de balisage des ressources
tag:GetResourcestag:TagResources
AWS CloudFormation des autorisations
cloudformation:DescribeStackscloudformation:CreateStackcloudformation:DeleteStack
Autorisations Amazon S3 (requises uniquement lorsque S3BucketName le paramètre est fourni)
s3:ListBuckets3:GetBucketEncryptions3:GetBucketAcls3:GetBucketPublicAccessBlocks3:GetAccountPublicAccessBlocks3:GetBucketPolicyStatuss3:GetBucketLocations3:PutObject
Pour exécuter ce runbook, le AutomationAssumeRole ou votre utilisateur IAM a besoin des actions suivantes. L'exemple suivant illustre une politique IAM de moindre privilège qui étend les autorisations à des modèles de ressources spécifiques utilisés par l'automatisation :
{ "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": "*" } ] }
Étapes du document
-
CheckConcurrency- Garantit qu'il n'y a qu'une seule exécution de ce runbook ciblant la même AWS région. Si une autre exécution est en cours, le runbook renvoie une erreur et s'arrête. -
ValidatePrerequisites- Valide tous les prérequis, notamment l'état du cluster, l'état de l'instance, la connectivité Amazon EC2 Systems Manager, les paramètres DNS Amazon VPC et les autorisations IAM. Si la validation d'une des conditions préalables échoue, le runbook passe à.GenerateReport -
BranchOnValidation- Exécution des itinéraires en fonction des résultats de validation des prérequis. Si tous les prérequis sont valides, passez àDeployK8sApiProxy. Sinon, passe à.GenerateReport -
DeployK8sApiProxy- Déploie une fonction Lambda pour effectuer des appels d'KubernetesAPI authentifiés vers le cluster Amazon EKS en exécutant leAWSSupport-SetupK8sApiProxyForEKSrunbook enfant. -
ValidateNodeInCluster- Vérifie que l'instance Amazon EC2 est un nœud enregistré dans le cluster Amazon EKS via l'KubernetesAPI. Si le nœud n'est pas trouvé dans le cluster, le runbook passe à.CleanupResources -
BranchOnNodeValidation- Exécution des itinéraires en fonction des résultats de validation des nœuds. Si le nœud est valide, passez àRunCNIChecks. Sinon, passe à.CleanupResources -
RunCNIChecks- Exécute toutes les vérifications de diagnostic CNI, y compris l'état des modules complémentaires, l'authentification IAM, la connectivité, l'état des nœuds, la configuration réseau, les groupes de sécurité et la collecte des journaux. Passe à l'étape suivante même si les vérifications contiennent des erreurs. -
CleanupResources- Nettoie la fonction Lambda et les ressources associées déployées lors des contrôles de diagnostic en exécutant le runbookAWSSupport-SetupK8sApiProxyForEKSenfant contenant l'opération.Cleanup -
GenerateReport- Génère un rapport de diagnostic contenant des messages lisibles par l'homme et des recommandations exploitables pour chaque résultat.
Sorties
GenerateReport.Report- Un résumé complet de tous les résultats avec des codes d'erreur, des messages et des recommandations exploitables.