클러스터를 생성한 후 Amazon EKS 환경의 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 8월 24일

클러스터를 생성한 후 Amazon Elastic Kubernetes Service(Amazon EKS) 환경에서 오류가 발생합니다.

간략한 설명

AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로를 사용해 Amazon EKS 환경의 일반적인 오류를 해결할 수 있습니다. 워크플로는 오류, 경고 및 AWS 권장 모범 사례에 대한 링크를 나열하는 세부 보고서를 제공합니다.

다음과 같은 문제가 발생할 경우 AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로를 사용할 수 있습니다.

  • Kubernetes Cluster Autoscaler가 작동하지 않습니다.
  • 내부 로드 밸런서가 프라이빗 또는 퍼블릭 서브넷을 생성하지 않습니다.
  • 작업자 노드가 최신 Amazon Machine Image(AMI)를 사용하고 있는지 알 수 없습니다.
  • aws-node 포드에 액세스 거부 오류가 발생합니다.
  • Amazon Elastic Container Registry(Amazon ECR) 이미지를 가져올 수 없습니다.
  • 관리되는 노드가 안정화되지 않거나 자체 관리형 노드가 클러스터에 조인하지 않았습니다.

AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로는 다음 검사를 실행합니다.

  • Auto Scaling 그룹에서 내부 및 인터넷 연결 로드 밸런서와 작업자 보안 그룹에 대한 Cluster AutoScaler 서브넷 태그를 확인합니다.
    중요: 작업자 노드에 연결된 보안 그룹이 둘 이상 있는 경우 보안 그룹 중 하나에 태그를 적용해야 합니다. 태그의 키를 kubernetes.io/cluster/your-cluster-name으로 설정합니다. 값을 owned로 설정합니다. 작업자 노드에 연결된 보안 그룹이 하나만 있는 경우 이 태그는 선택 사항입니다.
  • 작업자 노드에서 최신 AMI를 확인합니다.
  • 보안 그룹 규칙에서 최소 및 권장 설정을 확인합니다. 예를 들어 워크플로는 클러스터의 보안 그룹(클러스터에 연결된 모든 보안 그룹) 및 작업자 보안 그룹에서의 수신 및 송신 여부를 확인합니다.
  • 사용자 지정 네트워크 액세스 제어 목록(네트워크 ACL) 구성을 확인합니다.
  • AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly 정책을 포함하여 작업자 노드의 AWS Identity and Access Management(IAM) 정책을 확인합니다.
  • 작업자 노드가 위치한 서브넷의 라우팅 테이블을 확인하여 인터넷에 연결할 수 있는지 확인합니다.

해결 방법

작업자 노드를 검색 가능하게 만들기

작업 노드를 검색할 수 있도록 하려면 AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로와 Amazon EKS 클러스터를 사용합니다.

1.    Amazon EC2 콘솔을 엽니다.

2.    탐색 창에서 Instances(인스턴스)를 선택합니다.

3.    작업자 노드에 대한 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 선택한 다음 Tags(태그) 탭을 선택합니다.

4.    Add/Edit Tags(태그 추가/편집)를 선택합니다.

5.    Key(키)에는 kubernetes.io/cluster/your-cluster-name을 입력합니다. Value(값)에는 owned'/'shared'('소유'/'공유')를 입력합니다.

6.    Save(저장)를 선택합니다.

AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로는 다음 정책과 함께 실행됩니다. 이 정책에는 클러스터에 액세스할 수 있는 최소 권한이 포함되어야 합니다. 클러스터는 AutomationAssumeRole 또는 사용자가 자동화를 실행하여 액세스할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AWSPremiumSupportTroubleshootEKSCluster",
            "Effect": "Allow",
            "Action": [
                "eks:ListNodegroups",
                "eks:DescribeCluster",
                "eks:DescribeNodegroup",
                "iam:GetInstanceProfile",
                "iam:ListInstanceProfiles",
                "iam:ListAttachedRolePolicies",
                "autoscaling:DescribeAutoScalingGroups",
                "ec2:DescribeInstanceTypes",
                "ec2:DescribeInstances",
                "ec2:DescribeNatGateways",
                "ec2:DescribeSecurityGroups",
                "ec2:DescribeVpcs",
                "ec2:DescribeSubnets",
                "ec2:DescribeNetworkAcls",
                "ec2:DescribeRouteTables"
            ],
            "Resource": "*"
        },
        {
            "Sid": "GetPublicSSMParams",
            "Effect": "Allow",
            "Action": "ssm:GetParameter",
            "Resource": [
                "arn:aws:ssm:*:*:parameter/aws/service/eks/optimized-ami/*/amazon-linux-2/recommended/image_id",
                "arn:aws:ssm:*:*:parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-*/image_id",
                "arn:aws:ssm:*:*:parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-EKS_Optimized-*/image_id",
                "arn:aws:ssm:*:*:parameter/aws/service/ami-windows-latest/Windows_Server-1909-English-Core-EKS_Optimized-*/image_id",
                "arn:aws:ssm:*:*:parameter/aws/service/eks/optimized-ami/*/amazon-linux-2-gpu/recommended/image_id"
            ]
        },
        {
            "Sid": "UploadObjectToS3",
            "Effect": "Allow",
            "Action": [
                "s3:GetBucketPolicyStatus",
                "s3:GetBucketAcl",
                "s3:PutObject"
            ],
            "Resource": "YOUR_BUCKET_NAME>"
        }
    ]
}

AWS Systems Manager 콘솔에서 자동화 워크플로 실행

1.    Systems Manager 콘솔을 엽니다.

2.    탐색 창에서 Automation(자동화)을 선택합니다.

참고: Systems Manager 홈 페이지를 처음 연 경우, 메뉴 아이콘을 선택하여 탐색 창을 연 다음 Automation(자동화)을 선택합니다.

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

4.    Automation document(자동화 문서) 검색 상자에 AWSPremiumSupport-TroubleshootEKSCluster를 입력한 다음 Enter 키를 누릅니다.

5.    검색 결과에서 AWSPremiumSupport-TroubleshootEKSCluster를 선택합니다.

참고: 문서 소유자는 Amazon입니다.

6.    Document Description(문서 설명) 섹션에서 Document version(문서 버전)Default version at runtime(런타임에 기본 버전)으로 설정되어 있는지 확인합니다.

7.    Next(다음)를 선택합니다.

8.    Execute automation document(자동화 문서 실행) 섹션에서 Simple execution(단순 실행)을 선택합니다.

9.    Input parameters(입력 파라미터) 섹션에서 다음 파라미터를 설정합니다.

ClusterName을 클러스터 이름으로 설정합니다. 이 클러스터는 AWS 계정에서 실행 중이어야 합니다.
AutomationAssumeRole을, 워크플로에 사용할 IAM 역할로 설정합니다.
(선택 사항) 필요한 경우 보고서를 업로드할 Amazon Simple Storage Service(Amazon S3) 버킷을 BucketName으로 설정합니다.

10.    Execute(실행)을 선택합니다.

11.    실행 진행 상태를 모니터링하려면 실행 중인 Automation(자동화)을 선택한 다음 Steps(단계) 탭을 선택합니다.

12.    실행이 완료되면 Descriptions(설명) 탭을 선택한 다음 View output(출력 보기)을 선택하여 결과를 봅니다.

참고: 결과는 클러스터에 대한 모든 오류 및 경고를 나열하는 세부 보고서의 형식입니다.

AWS CLI에서 자동화 워크플로 실행

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생할 경우 AWS CLI의 최신 버전을 사용하고 있는지 확인하세요.

S3 버킷에 보고서를 저장하려면 다음 명령을 실행합니다.

aws ssm start-automation-execution --document-name "AWSPremiumSupport-TroubleshootEKSCluster" --document-version "\$DEFAULT" --parameters '{"ClusterName":["your-eks-cluster"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/eks-troubleshooter-role"],"S3BucketName":["your_bucket"]}' --region your_region

보고서를 S3 버킷에 업로드하지 않으려면 다음 명령을 실행합니다.

aws ssm start-automation-execution --document-name "AWSPremiumSupport-TroubleshootEKSCluster" --document-version "\$DEFAULT" --parameters '{"ClusterName":["your-eks-cluster"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/eks-troubleshooter-role"]}' --region your_region

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?