View a markdown version of this page

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

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

AWSSupport-TroubleshootEKSALBControllerIssues

설명

AWSSupport-TroubleshootEKSALBControllerIssues 자동화 실행서는 AWS Load Balancer 컨트롤러가 Kubernetes 수신 및 서비스에 대해 Application Load Balancer(ALB) 및 Network Load Balancer(NLB)를 올바르게 프로비저닝하고 관리하지 못하게 하는 일반적인 문제를 진단하는 데 도움이 됩니다.

이 실행서는 OIDC 자격 증명 공급자 설정, IRSA 구성, 네트워킹 사전 조건, 수신/서비스 구성 및 리소스 할당량을 비롯한 필수 구성 요소의 end-to-end 검증을 수행합니다. 또한 컨트롤러 로그 및 관련 Kubernetes 리소스 구성을 캡처하여 잘못된 구성 또는 운영 문제를 식별하는 데 도움이 됩니다.

중요

이 자동화 실행서는 Amazon Elastic Compute Cloud(Amazon EC2) 노드 그룹을 사용하는 Amazon EKS 클러스터용으로 설계되었으며 현재 실행 중인 클러스터를 지원하지 않습니다 AWS Fargate.

어떻게 작동하나요?

실행서는 다음과 같은 상위 수준 단계를 AWSSupport-TroubleshootEKSALBControllerIssues 수행합니다.

  • Amazon EKS 클러스터 상태, 액세스 항목 구성 및 OIDC 공급자 설정을 검증합니다.

  • Kubernetes API 통신을 위한 임시 Lambda 프록시를 생성합니다.

  • Checks AWS Load Balancer Controller 배포 및 서비스 계정 구성.

  • 포드 자격 증명 웹후크 및 IAM 역할 주입을 확인합니다.

  • Application Load Balancer 및 Network Load Balancer 프로비저닝에 대한 서브넷 구성 및 태그 지정을 검증합니다.

  • Application Load Balancer 및 Network Load Balancer 계정 할당량을 현재 사용량과 비교하여 확인합니다.

  • 수신 및 서비스 리소스 주석을 검증합니다.

  • 작업자 노드 보안 그룹 태그 지정에서 로드 밸런서 통합을 확인합니다.

  • 진단을 위한 컨트롤러 포드 로그를 수집합니다.

  • 임시 인증 리소스를 정리합니다.

  • 조사 결과 및 수정 단계가 포함된 진단 보고서를 생성합니다.

참고
  • Amazon EKS 클러스터에는이 자동화를 실행하는 IAM 엔터티에 대해 구성된 액세스 항목이 있어야 합니다. 클러스터의 인증 모드는 API 또는 로 설정해야 합니다API_AND_CONFIG_MAP. 적절한 액세스 항목 구성이 없으면 초기 검증 중에 자동화가 종료됩니다.

  • LambdaRoleArn 파라미터는 필수이며 AWS 관리형 정책이 AWSLambdaBasicExecutionRole 있어야 하며 프록시 함수가 Kubernetes API와 통신할 수 있도록 AWSLambdaVPCAccessExecutionRole 연결되어야 합니다.

  • AWS Load Balancer 컨트롤러는 버전 v2.1.1 이상이어야 합니다.

  • 자동화에는 임시 인증 인프라 리소스를 제거하는 정리 단계가 포함됩니다. 이 정리 단계는 이전 단계가 실패하더라도 실행되므로 분리된 리소스가 AWS 계정에 남아 있지 않습니다.

이 자동화 실행(콘솔)

문서 유형

자동화

소유자

Amazon

플랫폼

/

필수 IAM 권한

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

  • cloudformation:CreateStack

  • cloudformation:DeleteStack

  • cloudformation:DescribeStacks

  • cloudformation:UpdateStack

  • ec2:CreateNetworkInterface

  • ec2:DeleteNetworkInterface

  • ec2:DescribeInstances

  • ec2:DescribeNetworkInterfaces

  • ec2:DescribeRouteTables

  • ec2:DescribeSecurityGroups

  • ec2:DescribeSubnets

  • ec2:DescribeVpcs

  • eks:DescribeCluster

  • eks:ListAssociatedAccessPolicies

  • elasticloadbalancing:DescribeAccountLimits

  • elasticloadbalancing:DescribeLoadBalancers

  • iam:GetRole

  • iam:ListOpenIDConnectProviders

  • iam:PassRole

  • lambda:CreateFunction

  • lambda:DeleteFunction

  • lambda:GetFunction

  • lambda:InvokeFunction

  • lambda:ListTags

  • lambda:TagResource

  • lambda:UntagResource

  • lambda:UpdateFunctionCode

  • logs:CreateLogGroup

  • logs:CreateLogStream

  • logs:DescribeLogGroups

  • logs:DescribeLogStreams

  • logs:ListTagsForResource

  • logs:PutLogEvents

  • logs:PutRetentionPolicy

  • logs:TagResource

  • logs:UntagResource

  • ssm:DescribeAutomationExecutions

  • ssm:GetAutomationExecution

  • ssm:StartAutomationExecution

  • tag:GetResources

  • tag:TagResources

지침

다음 단계에 따라 자동화를 구성하고 실행합니다.

참고

자동화를 실행하기 전에 다음 단계에 따라 필요한 IAM 역할을 구성합니다. 하나는 Systems Manager Automation이 실행서를 실행하기 위한 것이고 다른 하나는 Lambda가 Kubernetes API와 통신하기 위한 것입니다.

  1. 계정TroubleshootEKSALBController-SSM-Role에서 SSM 자동화 역할을 생성합니다. 신뢰 관계에 다음 정책이 포함되어 있는지 확인합니다.

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 다음 IAM 정책을 연결하여 필요한 권한을 부여합니다.

    { "Version": "2012-10-17", "Statement": [{ "Sid": "TroubleshootEKSALBControllerIssuesActions", "Effect": "Allow", "Action": [ "eks:DescribeCluster", "eks:ListAssociatedAccessPolicies", "iam:GetRole", "iam:ListOpenIDConnectProviders", "ssm:StartAutomationExecution", "ssm:GetAutomationExecution", "ssm:DescribeAutomationExecutions", "ec2:DescribeSubnets", "ec2:DescribeRouteTables", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeAccountLimits", "ec2:DescribeInstances", "ec2:DescribeNetworkInterfaces", "ec2:DescribeSecurityGroups" ], "Resource": "*" }, { "Sid": "SetupK8sApiProxyForEKSActions", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "eks:DescribeCluster", "iam:GetRole", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:InvokeFunction", "lambda:ListTags", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:ListTagsForResource", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource", "ssm:DescribeAutomationExecutions", "tag:GetResources", "tag:TagResources" ], "Resource": "*" }, { "Sid": "PassRoleToAutomation", "Effect": "Allow", "Action": "iam:PassRole", "Resource": "*", "Condition": { "StringLikeIfExists": { "iam:PassedToService": [ "lambda.amazonaws.com", "ssm.amazonaws.com" ] } } }] }
  3. Amazon EKS 클러스터에 대한 액세스 항목을 구성합니다. 이는 자동화를 위한 필수 요구 사항입니다. 액세스 항목에 대한 인증 모드를 구성하는 단계는 액세스 항목 설정을 참조하세요.

    Amazon EKS 콘솔에서 클러스터로 이동하여 다음 단계를 따릅니다.

    • 액세스 섹션에서 인증 구성이 API 또는 로 설정되어 있는지 확인합니다API_AND_CONFIG_MAP.

    • 액세스 항목 생성을 선택하고 다음을 구성합니다.

      • IAM 보안 주체 ARN에서 생성한 IAM 역할()을 선택합니다TroubleshootEKSALBController-SSM-Role.

      • 유형에서 Standard를 선택합니다.

    • 액세스 정책 추가:

      • 정책 이름에서를 선택합니다AmazonEKSAdminViewPolicy.

      • 액세스 범위에서를 선택합니다Cluster.

    • 정책 추가를 선택합니다.

    • 세부 정보를 확인하고 생성을 선택합니다.

  4. Lambda 함수에 대한 IAM 역할을 생성합니다(입력 파라미터LambdaRoleArn에서 참조).

    • 다음 신뢰 정책을 사용하여 새 IAM 역할을 생성합니다.

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
    • 이 역할에 다음 AWS 관리형 정책을 연결합니다.

      • AWSLambdaBasicExecutionRole

      • AWSLambdaVPCAccessExecutionRole

    • LambdaRoleArn 입력 파라미터에 필요하므로이 역할의 ARN을 기록해 둡니다.

  1. AWS Systems Manager 콘솔에서 AWSSupport-TroubleshootEKSALBControllerIssues로 이동합니다.

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

  3. 입력 파라미터의 경우, 다음 내용을 입력합니다.

    • AutomationAssumeRole(선택 사항):

      유형: AWS::IAM::Role::Arn

      설명: (선택 사항) Systems Manager Automation이 사용자를 대신하여 작업을 수행하도록 허용하는 (IAM) 역할의 Amazon 리소스 이름 AWS Identity and Access Management (ARN)입니다. 역할을 지정하지 않은 경우, Systems Manager Automation에서는 이 실행서를 시작하는 사용자의 권한을 사용합니다.

      허용된 패턴: ^arn:(?:aws|aws-cn|aws-us-gov):iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+$

    • EksClusterName(필수):

      유형: 문자열

      설명: (필수) Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 이름입니다.

      허용된 패턴: ^[0-9A-Za-z][A-Za-z0-9-_]{0,99}$

    • ALBControllerDeploymentName(선택 사항):

      유형: 문자열

      설명: (선택 사항) Amazon EKS 클러스터에서 AWS Load Balancer 컨트롤러 배포의 이름입니다. 설치 중에 사용자 지정하지 않은 한 일반적으로 'aws-load-balancer-controller'입니다.

      허용된 패턴: ^[a-z0-9]([-.a-z0-9]{0,251}[a-z0-9])?$

      기본값: aws-load-balancer-controller

    • ALBControllerNamespace(선택 사항):

      유형: 문자열

      설명: (선택 사항) AWS Load Balancer 컨트롤러가 배포되는 Kubernetes 네임스페이스입니다. 기본적으로 'kube-system'이지만 사용자 지정 네임스페이스에 컨트롤러를 설치한 경우 다를 수 있습니다.

      허용된 패턴: ^[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$

      기본값: kube-system

    • ServiceAccountName(선택 사항):

      유형: 문자열

      설명: (선택 사항) AWS Load Balancer 컨트롤러와 연결된 Kubernetes 서비스 계정의 이름입니다. 설치 중에 사용자 지정되지 않는 한 일반적으로 'aws-load-balancer-controller'입니다.

      허용된 패턴: ^[a-z0-9]([-.a-z0-9]{0,251}[a-z0-9])?$

      기본값: aws-load-balancer-controller

    • ServiceAccountNamespace(선택 사항):

      유형: 문자열

      설명: (선택 사항) AWS Load Balancer 컨트롤러의 서비스 계정이 있는 Kubernetes 네임스페이스입니다. 이는 일반적으로 'kube-system'이지만 사용자 지정 네임스페이스를 사용한 경우 다를 수 있습니다.

      허용된 패턴: ^[a-z0-9]([-a-z0-9]{0,61}[a-z0-9])?$

      기본값: kube-system

    • IngressName(선택 사항):

      유형: 문자열

      설명: (선택 사항) 검증할 수신 리소스의 이름(Application Load Balancer). 지정하지 않으면 수신 검증을 건너뜁니다.

      허용된 패턴: ^$|^[a-z0-9][a-z0-9.-]{0,251}[a-z0-9]$

      기본값: ""(빈 문자열)

    • IngressNamespace(선택 사항):

      유형: 문자열

      설명: (선택 사항) 수신 리소스의 네임스페이스입니다. IngressName를 지정한 경우 필수입니다.

      허용된 패턴: ^$|^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$

      기본값: ""(빈 문자열)

    • ServiceName(선택 사항):

      유형: 문자열

      설명: (선택 사항) Network Load Balancer(Network Load Balancer) 주석을 검증하기 위한 특정 서비스 리소스의 이름입니다. 지정하지 않으면 서비스 리소스 검증을 건너뜁니다.

      허용된 패턴: ^$|^[a-z0-9][a-z0-9.-]{0,251}[a-z0-9]$

      기본값: ""(빈 문자열)

    • ServiceNamespace(선택 사항):

      유형: 문자열

      설명: (선택 사항) 서비스 리소스의 네임스페이스입니다. ServiceName를 지정한 경우 필수입니다.

      허용된 패턴: ^$|^[a-z0-9][a-z0-9-]{0,61}[a-z0-9]$

      기본값: ""(빈 문자열)

    • LambdaRoleArn(필수):

      유형: AWS::IAM::Role::Arn

      설명: (필수) AWS Lambda (Lambda) 함수가 필요한 AWS 서비스 및 리소스에 액세스할 수 있도록 허용하는 IAM 역할의 ARN입니다. AWS 관리형 정책: AWSLambdaBasicExecutionRoleAWSLambdaVPCAccessExecutionRole를 Lambda 함수 실행 IAM 역할에 연결합니다.

      허용된 패턴: ^arn:(?:aws|aws-cn|aws-us-gov):iam::\d{12}:role/?[a-zA-Z_0-9+=,.@\-_/]+$

  4. 실행을 선택합니다.

  5. 자동화가 시작됩니다.

  6. 문서는 다음 단계를 수행합니다.

    1. ValidateAccessEntryAndOIDCProvider:

      액세스 항목 권한 및 OIDC 공급자 구성을 확인하여 Amazon EKS 클러스터 IAM 설정을 검증합니다.

    2. SetupK8sAuthenticationClient:

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

    3. VerifyALBControllerAndIRSASetup:

      지정된 서비스 계정 및 Application Load Balancer 컨트롤러가 해당 네임스페이스에 존재하는지 확인합니다. 또한 Application Load Balancer 컨트롤러의 서비스 계정 역할 주석 및 신뢰 정책을 확인합니다.

    4. VerifyPodIdentityWebhookAndEnv:

      pod-identity-webhook가 실행 중인지 확인합니다. 또한 IRSA가 포드의 ENV 변수에 주입되는지 확인합니다.

    5. ValidateSubnetRequirements:

      사용 가능한 IP가 8개인 두 AZ의 서브넷을 2개 이상 확인합니다. 퍼블릭/프라이빗 로드 밸런서에 적절한 서브넷 태그 지정이 있습니다.

    6. CheckLoadBalancerLimitsAndUsage:

      계정 제한을 Application Load Balancer 및 Network Load Balancer 수와 비교합니다.

    7. CheckIngressOrServiceAnnotations:

      수신 및 서비스 리소스에서 올바른 주석과 사양을 확인하여 Application Load Balancer 및 Network Load Balancer 사용에 맞게 올바르게 구성되었는지 확인합니다.

    8. CheckWorkerNodeSecurityGroupTags:

      작업자 노드에 연결된 정확히 하나의 보안 그룹에 필요한 클러스터 태그가 있는지 확인합니다.

    9. CaptureALBControllerLogs:

      Amazon EKS 클러스터에서 실행 중인 AWS Load Balancer 컨트롤러 포드에서 최신 진단 로그를 검색합니다.

    10. CleanupK8sAuthenticationClient:

      '정리' 작업을 사용하여 SAW 문서 'AWSSupport-SetupK8sApiProxyForEKS'를 실행하여 자동화의 일부로 생성된 리소스를 정리합니다.

    11. GenerateReport:

      자동화 보고서를 생성합니다.

  7. 실행이 완료되면 출력 섹션에서 실행의 자세한 결과를 검토합니다.

    1. 보고서:

      Amazon EKS 클러스터 상태, Application Load Balancer Controller 설정, IRSA 구성, 서브넷 요구 사항, 로드 밸런서 제한, 수신/서비스 주석, 작업자 노드 보안 그룹 태그 및 Application Load Balancer Controller 로그를 포함하여 수행된 모든 검사에 대한 포괄적인 요약을 제공합니다. 여기에는 식별된 문제와 권장 해결 단계도 포함됩니다.

참조

Systems Manager Automation

AWS Load Balancer 컨트롤러와 관련된 설명서