View a markdown version of this page

AWSSupport-TroubleshootEKSNetwork - AWS Systems Manager Référence du dossier d’exploitation Automation

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

Description

Le AWSSupport-TroubleshootEKSNetwork runbook vous aide à résoudre les problèmes de connectivité réseau dans les conteneurs exécutés dans des clusters Amazon Elastic Kubernetes Service (Amazon EKS). Le runbook collecte des statistiques de calcul et de réseau à partir de la source et de la destination du trafic, en fonction du type de destination.

Comment ça marche

Utilisez ce runbook pour résoudre les problèmes de connectivité aux types de destinations suivants :

  • POD  : Un autre Kubernetes pod.

  • SERVICE  : Un Kubernetes service.

  • IP  : IPv4/IPv6 adresse interne ou externe au cluster ou à Amazon VPC.

  • DNS  : nom de domaine, interne ou externe au cluster ou à Amazon VPC.

Important

Outre les autorisations IAM suivantes, ils AutomationAssumeRole doivent avoir accès aux clusters Amazon EKS à l'aide des méthodes d'accès à l'API Amazon EKS prises en charge. Pour les clusters utilisant des entrées d'AmazonEKSViewPolicyaccès, la politique d'accès est la politique minimale requise.

Exécutez cette automatisation (console)

Autorisations IAM requises

Le AutomationAssumeRole paramètre nécessite les actions suivantes pour utiliser correctement le runbook.

Ce runbook exécute les runbooks AWSSupport-SetupK8sApiProxyForEKS et les runbooks AWSSupport-CollectEKSLinuxNodeStatistics enfants sous le même rôle. Vous AutomationAssumeRole devez autoriser les actions suivantes pour les runbooks parent et enfant :

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

  • cloudformation:DescribeStackResources

  • cloudformation:DescribeStacks

  • cloudformation:UpdateStack

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

  • ec2:DescribeInstances

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeRegions

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcPeeringConnections

  • ec2:DescribeVpcs

  • eks:DescribeCluster

  • eks:DescribeFargateProfile

  • iam:AttachRolePolicy

  • iam:CreateRole

  • iam:DeleteRole

  • iam:DeleteRolePolicy

  • iam:DetachRolePolicy

  • iam:GetRole

  • iam:PassRole

  • iam:PutRolePolicy

  • iam:TagRole

  • iam:UntagRole

  • lambda:CreateFunction

  • lambda:DeleteFunction

  • lambda:GetFunction

  • lambda:InvokeFunction

  • lambda:ListTags

  • lambda:TagResource

  • lambda:UntagResource

  • lambda:UpdateFunctionCode

  • lambda:UpdateFunctionConfiguration

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:DeleteLogGroup

  • logs:DescribeLogGroups

  • logs:DescribeLogStreams

  • logs:ListTagsForResource

  • logs:PutLogEvents

  • logs:PutRetentionPolicy

  • logs:TagResource

  • logs:UntagResource

  • s3:GetBucketLocation

  • s3:GetObject

  • s3:PutObject

  • ssm:DescribeAutomationExecutions

  • ssm:DescribeAutomationStepExecutions

  • ssm:DescribeDocument

  • ssm:DescribeInstanceInformation

  • ssm:GetAutomationExecution

  • ssm:GetCommandInvocation

  • ssm:GetDocument

  • ssm:ListCommands

  • ssm:SendCommand

  • ssm:StartAutomationExecution

  • sts:GetCallerIdentity

  • tag:GetResources

  • tag:TagResources

L'exemple de politique suivant montre les autorisations de moindre privilège requises pour le. AutomationAssumeRole Remplacez REGIONACCOUNTID,SOURCE_CLUSTER_NAME,DESTINATION_CLUSTER_NAME, et S3_BUCKET_NAME par vos propres valeurs :

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EKSClusterAccess", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": [ "arn:aws:eks:REGION:ACCOUNTID:cluster/SOURCE_CLUSTER_NAME", "arn:aws:eks:REGION:ACCOUNTID:cluster/DESTINATION_CLUSTER_NAME" ] }, { "Sid": "EKSFargateProfileAccess", "Effect": "Allow", "Action": "eks:DescribeFargateProfile", "Resource": [ "arn:aws:eks:REGION:ACCOUNTID:fargateprofile/SOURCE_CLUSTER_NAME/*", "arn:aws:eks:REGION:ACCOUNTID:fargateprofile/DESTINATION_CLUSTER_NAME/*" ] }, { "Sid": "EC2DescribePermissions", "Effect": "Allow", "Action": [ "ec2:DescribeInstances", "ec2:DescribeRegions", "ec2:DescribeRouteTables", "ec2:DescribeVpcs", "ec2:DescribeVpcPeeringConnections", "ec2:DescribeSubnets" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "SSMAutomationExecution", "Effect": "Allow", "Action": [ "ssm:StartAutomationExecution", "ssm:GetAutomationExecution", "ssm:DescribeAutomationExecutions", "ssm:DescribeAutomationStepExecutions" ], "Resource": "arn:aws:ssm:REGION:ACCOUNTID:automation-execution/*" }, { "Sid": "SSMDocumentAccess", "Effect": "Allow", "Action": [ "ssm:DescribeDocument", "ssm:GetDocument" ], "Resource": [ "arn:aws:ssm:REGION:ACCOUNTID:document/AWSSupport-TroubleshootEKSNetwork", "arn:aws:ssm:REGION:ACCOUNTID:document/AWSSupport-SetupK8sApiProxyForEKS", "arn:aws:ssm:REGION:ACCOUNTID:document/AWSSupport-CollectEKSLinuxNodeStatistics", "arn:aws:ssm:REGION:*:document/AWS-RunShellScript" ] }, { "Sid": "SSMRunCommandOnNodes", "Effect": "Allow", "Action": [ "ssm:SendCommand", "ssm:GetCommandInvocation" ], "Resource": [ "arn:aws:ec2:REGION:ACCOUNTID:instance/*", "arn:aws:ssm:REGION:*:document/AWS-RunShellScript" ], "Condition": { "StringEquals": { "aws:ResourceTag/eks:cluster-name": [ "SOURCE_CLUSTER_NAME", "DESTINATION_CLUSTER_NAME" ] } } }, { "Sid": "S3TroubleshootingAssets", "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject" ], "Resource": "arn:aws:s3:::S3_BUCKET_NAME/AWSSupport-CollectEKSLinuxNodeStatistics/*" }, { "Sid": "S3BucketLocation", "Effect": "Allow", "Action": "s3:GetBucketLocation", "Resource": "arn:aws:s3:::S3_BUCKET_NAME" }, { "Sid": "LambdaK8sProxyManagement", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:InvokeFunction", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration" ], "Resource": "arn:aws:lambda:REGION:ACCOUNTID:function:Automation-K8sProxy-*" }, { "Sid": "CloudFormationK8sProxyStack", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:DescribeStackResources" ], "Resource": "arn:aws:cloudformation:REGION:ACCOUNTID:stack/AWSSupport-SetupK8sApiProxyForEKS-*/*" }, { "Sid": "IAMForK8sProxyLambdaRole", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:DeleteRole", "iam:GetRole", "iam:AttachRolePolicy", "iam:DetachRolePolicy", "iam:PutRolePolicy", "iam:DeleteRolePolicy" ], "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*" }, { "Sid": "IAMPassRoleToLambda", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role-*", "Condition": { "StringEquals": { "iam:PassedToService": "lambda.amazonaws.com" } } }, { "Sid": "CloudWatchLogsForK8sProxy", "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:DeleteLogGroup" ], "Resource": "arn:aws:logs:REGION:ACCOUNTID:log-group:/aws/lambda/Automation-K8sProxy-*" }, { "Sid": "ResourceTaggingForStackLookup", "Effect": "Allow", "Action": "tag:GetResources", "Resource": "*", "Condition": { "StringEquals": { "aws:RequestedRegion": "REGION" } } }, { "Sid": "STSCallerIdentity", "Effect": "Allow", "Action": "sts:GetCallerIdentity", "Resource": "*" } ] }

Outre l'exemple de politique précédent, qui fournit des autorisations AWSSupport-TroubleshootEKSNetwork uniquement, vous avez besoin de politiques supplémentaires pour les exécutions de AWSSupport-SetupK8sApiProxyForEKS et AWSSupport-CollectEKSLinuxNodeStatistics dans le runbook enfant. Les exemples de politiques suivants s'appliquent à ces documents :

Autorisations requises pour AWSSupport-SetupK8sApiProxyForEKS :

{ "Version":"2012-10-17", "Statement": [ { "Action": [ "tag:GetResources", "tag:TagResources", "ec2:CreateNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "ec2:DeleteNetworkInterface", "eks:DescribeCluster", "iam:GetRole", "cloudformation:DescribeStacks", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "lambda:GetFunction", "lambda:ListTags", "logs:ListTagsForResource" ], "Resource": "*", "Effect": "Allow", "Sid": "AllowActionsWithoutConditions" }, { "Condition": { "StringEquals": { "aws:RequestTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": "iam:CreateRole", "Resource": [ "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AllowCreateRoleWithRequiredTag" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "iam:DeleteRole", "iam:TagRole", "iam:UntagRole" ], "Resource": [ "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "IAMActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" }, "StringLike": { "iam:PolicyARN": [ "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", "arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole" ] } }, "Action": [ "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": [ "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy*" ], "Effect": "Allow", "Sid": "AttachRolePolicy" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode" ], "Resource": "arn:aws:lambda:REGION:ACCOUNTID:function:Automation-K8sProxy*", "Effect": "Allow", "Sid": "LambdaActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:UpdateStack" ], "Resource": "arn:aws:cloudformation:REGION:ACCOUNTID:stack/AWSSupport-SetupK8sApiProxyForEKS*", "Effect": "Allow", "Sid": "CloudFormationActions" }, { "Condition": { "StringEquals": { "aws:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } }, "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource" ], "Resource": [ "arn:aws:logs:REGION:ACCOUNTID:log-group:/aws/lambda/Automation-K8sProxy*", "arn:aws:logs:REGION:ACCOUNTID:log-group:/aws/lambda/Automation-K8sProxy*:*" ], "Effect": "Allow", "Sid": "LogsActions" }, { "Condition": { "StringLikeIfExists": { "iam:PassedToService": "lambda.amazonaws.com" } }, "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::ACCOUNTID:role/Automation-K8sProxy-Role*" ], "Effect": "Allow", "Sid": "PassRoleToLambda" } ] }

Autorisations requises pour AWSSupport-CollectEKSLinuxNodeStatistics :

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetAccountPublicAccessBlock" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetBucketPublicAccessBlock", "s3:GetBucketAcl", "s3:GetBucketPolicyStatus", "s3:GetBucketLocation", "s3:GetEncryptionConfiguration" ], "Resource": "arn:aws:s3:::S3_BUCKET_NAME" }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::S3_BUCKET_NAME/*" }, { "Effect": "Allow", "Action": [ "ssm:DescribeInstanceInformation" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ssm:SendCommand" ], "Resource": [ "arn:aws:ssm:*:*:document/AWS-RunShellScript", "arn:aws:ec2:*:ACCOUNTID:instance/*" ] }, { "Effect": "Allow", "Action": [ "ssm:GetCommandInvocation" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:DescribeInstances" ], "Resource": "*" } ] }

Instructions

  1. Ouvrez AWSSupport-TroubleshootEKSNetwork dans Systems Manager sous Documents.

  2. Choisissez Execute automation (Exécuter l’automatisation).

  3. Pour les paramètres d'entrée, entrez les informations suivantes :

    • AutomationAssumeRole (Facultatif) :

      L'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 vos autorisations pour exécuter ce runbook.

    • S3BucketName (Obligatoire) :

      Nom du compartiment Amazon S3 pour le téléchargement des ressources de dépannage.

    • SourceClusterName (Obligatoire) :

      Nom du cluster Amazon EKS source à résoudre.

    • SourcePodName (Obligatoire) :

      Nom du Kubernetes pod source à l'origine de la connexion réseau.

    • SourcePodNamespace (Obligatoire) :

      Espace de noms dans lequel se trouve le Kubernetes pod source.

    • DestinationType (Obligatoire) :

      Type de destination de connexion réseau. Valeurs valides : POD, SERVICE, IP ou DNS.

    • ConnectionProtocol (Obligatoire) :

      Protocole de connexion réseau. Valeurs valides : tcp, udp ou sctp.

    • DestinationPort (Obligatoire) :

      Port de destination de la connexion réseau.

    • DestinationClusterName (Facultatif) :

      Le nom du cluster Amazon EKS de destination (obligatoire pour les types de destination POD et SERVICE).

    • DestinationPodName (Facultatif) :

      Le nom du Kubernetes pod de destination (obligatoire pour le type de destination du POD).

    • DestinationPodNamespace (Facultatif) :

      Espace de noms où se trouve le Kubernetes pod de destination (obligatoire pour le type de destination du POD).

    • DestinationServiceName (Facultatif) :

      Le nom du Kubernetes service de destination (obligatoire pour le type de destination SERVICE).

    • DestinationServiceNamespace (Facultatif) :

      Espace de noms où réside le Kubernetes service de destination (obligatoire pour le type de destination SERVICE).

    • DestinationIpAddress (Facultatif) :

      Adresse IPv4 ou IPv6 de destination (obligatoire pour le type de destination IP).

    • DestinationDnsName (Facultatif) :

      Nom DNS de destination (obligatoire pour le type de destination DNS).

  4. Sélectionnez Execute (Exécuter).

  5. L'automatisation démarre. Surveillez l'état d'exécution dans l'onglet Exécutions.

  6. Le document exécute automatiquement les étapes suivantes :

    • ValidateTroubleshootingParameters:

      Vérifie les paramètres d'entrée requis pour le dépannage, par exemple si le cluster existe.

    • SetupAuthProxyForSourceEKSCluster:

      Exécute le AWSSupport-SetupK8sApiProxyForEKS document pour configurer une fonction Lambda pour effectuer des appels d'API Amazon EKS sur le cluster Amazon EKS source.

    • BranchOnDestinationProxySetupRequired:

      Détermine s'il faut exécuter SetupK8sApiProxyForEKS pour un cluster de destination en fonction du type de destination.

    • SetupAuthProxyForDestinationEKSCluster:

      Si nécessaire, exécute le AWSSupport-SetupK8sApiProxyForEKS document pour configurer une fonction Lambda pour le cluster Amazon EKS de destination.

    • CollectSourcePodData:

      Collecte et valide les informations du module source.

    • BranchOnSourcePodComputeEngine:

      Branches indiquant si le Kubernetes pod source s'exécute sur Amazon EC2 afin de collecter des statistiques Linux pour le nœud.

    • CollectSourceLinuxNodeStatistics:

      Si le module source s'exécute sur Amazon EC2, exécute le AWSSupport-CollectEKSLinuxNodeStatistics document pour récupérer les statistiques Linux depuis le nœud du Kubernetes module source.

    • CollectDestinationData:

      Collecte et valide les informations de destination.

    • BranchOnDestinationResults:

      Branches indiquant si le Kubernetes pod de destination s'exécute sur Amazon EC2 afin de collecter des statistiques Linux pour le nœud.

    • CollectDestinationLinuxNodeStatistics:

      Si le module de destination s'exécute sur Amazon EC2, exécute le AWSSupport-CollectEKSLinuxNodeStatistics document pour récupérer les statistiques Linux depuis le nœud Amazon EKS de destination.

    • CleanupAuthProxyForSourceEKSCluster:

      Exécute le AWSSupport-SetupK8sApiProxyForEKS document à l'aide de l'opération de nettoyage pour nettoyer les ressources créées pour le cluster source.

    • CleanupAuthProxyForDestinationEKSCluster:

      Le cas échéant, exécute le AWSSupport-SetupK8sApiProxyForEKS document à l'aide de l'opération de nettoyage pour nettoyer les ressources créées pour le cluster de destination.

    • GenerateReport:

      Génère un rapport pour le flux de dépannage.

  7. Une fois l'automatisation terminée, consultez la section Sorties pour connaître les résultats de l'exécution.

Références

Systems Manager Automation