View a markdown version of this page

AWSSupport-TroubleshootEKSNetwork - AWS Systems Manager Referência do runbooks de automação

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

AWSSupport-TroubleshootEKSNetwork

Description

O AWSSupport-TroubleshootEKSNetwork runbook ajuda você a solucionar problemas de conectividade de rede em contêineres executados em clusters do Amazon Elastic Kubernetes Service (Amazon EKS). O runbook coleta estatísticas de computação e rede da origem e do destino do tráfego, dependendo do tipo de destino.

Como funciona

Use esse runbook para solucionar problemas de conectividade com os seguintes tipos de destino:

  • POD: Outro Kubernetes pod.

  • SERVIÇO: Um Kubernetes serviço.

  • IP: um IPv4/IPv6 endereço, interno ou externo ao cluster ou ao Amazon VPC.

  • DNS: um nome de domínio, interno ou externo ao cluster ou ao Amazon VPC.

Importante

Além das seguintes permissões do IAM, eles AutomationAssumeRole devem ter acesso aos clusters do Amazon EKS usando os métodos de acesso da API Amazon EKS compatíveis. Para clusters que usam entradas de acesso, a política de AmazonEKSViewPolicy acesso é a política mínima exigida.

Execute esta automação (console)

Permissões obrigatórias do IAM

O parâmetro AutomationAssumeRole requer as seguintes ações para usar o runbook com êxito.

Esse runbook executa os runbooks AWSSupport-SetupK8sApiProxyForEKS AWSSupport-CollectEKSLinuxNodeStatistics secundários e os runbooks sob a mesma função. Você AutomationAssumeRole deve permitir as seguintes ações para os runbooks para pais e filhos:

  • 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

O exemplo de política a seguir mostra as permissões de menor privilégio necessárias para o. AutomationAssumeRole Substitua REGION ACCOUNTIDSOURCE_CLUSTER_NAME,DESTINATION_CLUSTER_NAME,, e S3_BUCKET_NAME por seus próprios valores:

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

Além do exemplo de política anterior, que fornece permissões AWSSupport-TroubleshootEKSNetwork somente para, você precisa de políticas adicionais para as execuções do runbook secundário de e. AWSSupport-SetupK8sApiProxyForEKS AWSSupport-CollectEKSLinuxNodeStatistics Os exemplos de políticas a seguir se aplicam a esses documentos:

Permissões necessárias paraAWSSupport-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" } ] }

Permissões necessárias paraAWSSupport-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": "*" } ] }

Instruções

  1. Abra AWSSupport-TroubleshootEKSNetwork no Systems Manager em Documentos.

  2. Escolha Execute automation.

  3. Para os parâmetros de entrada, insira o seguinte:

    • AutomationAssumeRole (Opcional):

      O ARN da função do IAM que permite que o Systems Manager Automation execute as ações em seu nome. Se nenhuma função for especificada, o Systems Manager Automation usará suas permissões para executar esse runbook.

    • S3BucketName (Obrigatório):

      Nome do bucket do Amazon S3 para fazer o upload de ativos de solução de problemas.

    • SourceClusterName (Obrigatório):

      Nome do cluster Amazon EKS de origem a ser solucionado.

    • SourcePodName (Obrigatório):

      Nome do Kubernetes pod de origem que está iniciando a conexão de rede.

    • SourcePodNamespace (Obrigatório):

      Namespace em que o Kubernetes pod de origem reside.

    • DestinationType (Obrigatório):

      Tipo de destino da conexão de rede. Valores válidos: POD, SERVICE, IP ou DNS.

    • ConnectionProtocol (Obrigatório):

      Protocolo para conexão de rede. Valores válidos: tcp, udp ou sctp.

    • DestinationPort (Obrigatório):

      A porta de destino da conexão de rede.

    • DestinationClusterName (Opcional):

      O nome do cluster Amazon EKS de destino (necessário para os tipos de destino POD e SERVICE).

    • DestinationPodName (Opcional):

      O nome do Kubernetes pod de destino (necessário para o tipo de destino do POD).

    • DestinationPodNamespace (Opcional):

      Namespace em que o Kubernetes pod de destino reside (necessário para o tipo de destino do POD).

    • DestinationServiceName (Opcional):

      O nome do Kubernetes serviço de destino (necessário para o tipo de destino do SERVIÇO).

    • DestinationServiceNamespace (Opcional):

      Namespace em que o Kubernetes serviço de destino reside (necessário para o tipo de destino do SERVIÇO).

    • DestinationIpAddress (Opcional):

      Endereço IPv4 ou IPv6 de destino (necessário para o tipo de destino IP).

    • DestinationDnsName (Opcional):

      Nome DNS de destino (necessário para o tipo de destino DNS).

  4. Clique em Executar.

  5. A automação começa. Monitore o status da execução na guia Execuções.

  6. O documento executa as seguintes etapas automaticamente:

    • ValidateTroubleshootingParameters:

      Verifica os parâmetros de entrada necessários para a solução de problemas, como se o cluster existe.

    • SetupAuthProxyForSourceEKSCluster:

      Executa o AWSSupport-SetupK8sApiProxyForEKS documento para configurar uma função do Lambda para fazer chamadas de API do Amazon EKS no cluster de origem do Amazon EKS.

    • BranchOnDestinationProxySetupRequired:

      Determina se deve ser executado SetupK8sApiProxyForEKS em um cluster de destino com base no tipo de destino.

    • SetupAuthProxyForDestinationEKSCluster:

      Se necessário, executa o AWSSupport-SetupK8sApiProxyForEKS documento para configurar uma função do Lambda para o cluster Amazon EKS de destino.

    • CollectSourcePodData:

      Coleta e valida as informações do pod de origem.

    • BranchOnSourcePodComputeEngine:

      Determina se o Kubernetes pod de origem é executado no Amazon EC2 para coletar estatísticas do Linux para o nó.

    • CollectSourceLinuxNodeStatistics:

      Se o pod de origem for executado no Amazon EC2, executa o AWSSupport-CollectEKSLinuxNodeStatistics documento para obter estatísticas do Linux no nó do Kubernetes pod de origem.

    • CollectDestinationData:

      Coleta e valida as informações de destino.

    • BranchOnDestinationResults:

      Determina se o Kubernetes pod de destino é executado no Amazon EC2 para coletar estatísticas do Linux para o nó.

    • CollectDestinationLinuxNodeStatistics:

      Se o pod de destino for executado no Amazon EC2, executa o AWSSupport-CollectEKSLinuxNodeStatistics documento para obter estatísticas do Linux no nó Amazon EKS de destino.

    • CleanupAuthProxyForSourceEKSCluster:

      Executa o AWSSupport-SetupK8sApiProxyForEKS documento usando a operação Cleanup para limpar os recursos criados para o cluster de origem.

    • CleanupAuthProxyForDestinationEKSCluster:

      Se aplicável, executa o AWSSupport-SetupK8sApiProxyForEKS documento usando a operação Cleanup para limpar os recursos criados para o cluster de destino.

    • GenerateReport:

      Gera um relatório para o fluxo de solução de problemas.

  7. Depois que a automação for concluída, revise a seção Saídas para ver os resultados da execução.

Referências

Automação do Systems Manager