View a markdown version of this page

AWSSupport-TroubleshootEKSNetwork - AWS Systems Manager Automation 런북 참조

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWSSupport-TroubleshootEKSNetwork

설명

AWSSupport-TroubleshootEKSNetwork 실행서는 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터에서 실행되는 컨테이너의 네트워크 연결 문제를 해결하는 데 도움이 됩니다. 실행서는 대상 유형에 따라 트래픽 소스 및 대상에서 컴퓨팅 및 네트워킹 통계를 수집합니다.

작동 방식

이 실행서를 사용하여 다음 대상 유형에 대한 연결 문제를 해결합니다.

  • POD: 다른 Kubernetes 포드.

  • 서비스: Kubernetes 서비스입니다.

  • IP: 클러스터 또는 Amazon VPC 내부 또는 외부의 IPv4/IPv6 주소입니다.

  • DNS: 클러스터 또는 Amazon VPC 내부 또는 외부의 도메인 이름입니다.

중요

다음 IAM 권한 외에도 AutomationAssumeRole은 지원되는 Amazon EKS API 액세스 방법을 사용하여 Amazon EKS 클러스터에 액세스할 수 있어야 합니다. 액세스 항목을 사용하는 클러스터의 경우 AmazonEKSViewPolicy 액세스 정책은 최소 필수 정책입니다.

이 자동화 실행(콘솔)

필수 IAM 권한

실행서를 성공적으로 사용하려면 AutomationAssumeRole 파라미터에 다음 작업이 필요합니다.

이 런북은 동일한 역할로 AWSSupport-SetupK8sApiProxyForEKS 및 AWSSupport-CollectEKSLinuxNodeStatistics 하위 런북을 실행합니다. 는 상위 및 하위 실행서에 대해 다음 작업을 허용AutomationAssumeRole해야 합니다.

  • 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

다음 예제 정책은에 필요한 최소 권한 권한을 보여줍니다AutomationAssumeRole. REGION, ACCOUNTID, DESTINATION_CLUSTER_NAME, 및 SOURCE_CLUSTER_NAMES3_BUCKET_NAME를 자체 값으로 바꿉니다.

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

에 대한 권한AWSSupport-TroubleshootEKSNetwork만 제공하는 이전 예제 정책 외에도 AWSSupport-SetupK8sApiProxyForEKS 및의 하위 런북 실행에 대한 추가 정책이 필요합니다AWSSupport-CollectEKSLinuxNodeStatistics. 다음 예제 정책은 이러한 문서에 적용됩니다.

에 필요한 권한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" } ] }

에 필요한 권한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": "*" } ] }

지침

  1. Systems ManagerAWSSupport-TroubleshootEKSNetwork의 Documents에서를 엽니다.

  2. 자동화 실행(Execute automation)을 선택합니다.

  3. 입력 파라미터에 다음을 입력합니다.

    • AutomationAssumeRole(선택 사항):

      Systems Manager Automation이 사용자를 대신하여 작업을 수행할 수 있도록 허용하는 IAM 역할의 ARN입니다. 역할이 지정되지 않은 경우 Systems Manager Automation은 권한을 사용하여이 실행서를 실행합니다.

    • S3BucketName(필수):

      문제 해결 자산을 업로드하기 위한 Amazon S3 버킷 이름입니다.

    • SourceClusterName(필수):

      문제를 해결할 소스 Amazon EKS 클러스터의 이름입니다.

    • SourcePodName(필수):

      네트워크 연결을 시작하는 소스 Kubernetes 포드의 이름입니다.

    • SourcePodNamespace(필수):

      소스 Kubernetes 포드가 있는 네임스페이스입니다.

    • DestinationType(필수):

      네트워크 연결 대상의 유형입니다. 유효한 값은 POD, SERVICE, IP 또는 DNS입니다.

    • ConnectionProtocol(필수):

      네트워크 연결을 위한 프로토콜입니다. 유효한 값: tcp, udp 또는 sctp.

    • DestinationPort(필수):

      네트워크 연결 대상의 포트입니다.

    • DestinationClusterName(선택 사항):

      대상 Amazon EKS 클러스터 이름(POD 및 서비스 대상 유형에 필요).

    • DestinationPodName(선택 사항):

      대상 Kubernetes 포드의 이름입니다(POD 대상 유형에 필요).

    • DestinationPodNamespace(선택 사항):

      대상 Kubernetes 포드가 있는 네임스페이스(POD 대상 유형에 필요).

    • DestinationServiceName(선택 사항):

      대상 Kubernetes 서비스의 이름입니다(서비스 대상 유형에 필수).

    • DestinationServiceNamespace(선택 사항):

      대상 Kubernetes 서비스가 있는 네임스페이스(서비스 대상 유형에 필요).

    • DestinationIpAddress(선택 사항):

      대상 IPv4 또는 IPv6 주소(IP 대상 유형에 필요).

    • DestinationDnsName(선택 사항):

      대상 DNS 이름(DNS 대상 유형에 필요).

  4. 실행을 선택합니다.

  5. 자동화가 시작됩니다. 실행 탭에서 실행 상태를 모니터링합니다.

  6. 문서는 다음 단계를 자동으로 수행합니다.

    • ValidateTroubleshootingParameters:

      클러스터 존재 여부와 같은 문제 해결에 필요한 입력 파라미터를 확인합니다.

    • SetupAuthProxyForSourceEKSCluster:

      AWSSupport-SetupK8sApiProxyForEKS 문서를 실행하여 소스 Amazon EKS 클러스터에서 Amazon EKS API를 호출하도록 Lambda 함수를 설정합니다.

    • BranchOnDestinationProxySetupRequired:

      대상 유형에 따라 대상 클러스터에 SetupK8sApiProxyForEKS 대해를 실행할지 여부를 결정합니다.

    • SetupAuthProxyForDestinationEKSCluster:

      필요한 경우는 AWSSupport-SetupK8sApiProxyForEKS 문서를 실행하여 대상 Amazon EKS 클러스터에 대한 Lambda 함수를 설정합니다.

    • CollectSourcePodData:

      소스 포드의 정보를 수집하고 검증합니다.

    • BranchOnSourcePodComputeEngine:

      소스 Kubernetes 포드가 Amazon EC2에서 실행되어 노드에 대한 Linux 통계를 수집하는지 여부를 분기합니다.

    • CollectSourceLinuxNodeStatistics:

      소스 포드가 Amazon EC2에서 실행되는 경우는 AWSSupport-CollectEKSLinuxNodeStatistics 문서를 실행하여 소스 Kubernetes 포드의 노드에서 Linux 통계를 가져옵니다.

    • CollectDestinationData:

      대상 정보를 수집하고 검증합니다.

    • BranchOnDestinationResults:

      대상 Kubernetes 포드가 Amazon EC2에서 실행되어 노드에 대한 Linux 통계를 수집하는지 여부를 분기합니다.

    • CollectDestinationLinuxNodeStatistics:

      대상 포드가 Amazon EC2에서 실행되는 경우는 AWSSupport-CollectEKSLinuxNodeStatistics 문서를 실행하여 대상 Amazon EKS 노드에서 Linux 통계를 가져옵니다.

    • CleanupAuthProxyForSourceEKSCluster:

      정리 작업을 사용하여 AWSSupport-SetupK8sApiProxyForEKS 문서를 실행하여 소스 클러스터에 대해 생성된 리소스를 정리합니다.

    • CleanupAuthProxyForDestinationEKSCluster:

      해당하는 경우는 정리 작업을 사용하여 AWSSupport-SetupK8sApiProxyForEKS 문서를 실행하여 대상 클러스터에 대해 생성된 리소스를 정리합니다.

    • GenerateReport:

      문제 해결 흐름에 대한 보고서를 생성합니다.

  7. 자동화가 완료되면 출력 섹션에서 실행 결과를 검토합니다.

참조

Systems Manager Automation