

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

# `AWSSupport-TroubleshootEKSALBControllerIssues`
<a name="automation-awssupport-troubleshoot-eks-alb-controller-issues"></a>

 **설명** 

 `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 계정에 남아 있지 않습니다.

 [이 자동화 실행(콘솔)](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEKSALBControllerIssues) 

**문서 유형**

자동화

**소유자**

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와 통신하기 위한 것입니다.  
계정`TroubleshootEKSALBController-SSM-Role`에서 SSM 자동화 역할을 생성합니다. 신뢰 관계에 다음 정책이 포함되어 있는지 확인합니다.  

   ```
   {
               "Version": "2012-10-17",		 	 	 
               "Statement": [
                   {
                       "Sid": "",
                       "Effect": "Allow",
                       "Principal": {
                           "Service": "ssm.amazonaws.com"
                       },
                       "Action": "sts:AssumeRole"
                   }
               ]
           }
   ```
다음 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"
                           ]
                       }
                   }
               }]
           }
   ```
Amazon EKS 클러스터에 대한 액세스 항목을 구성합니다. 이는 자동화를 위한 필수 요구 사항입니다. 액세스 항목에 대한 인증 모드를 구성하는 단계는 [액세스 항목 설정을](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html) 참조하세요.  
Amazon EKS 콘솔에서 클러스터로 이동하여 다음 단계를 따릅니다.  
**액세스** 섹션에서 인증 구성이 `API` 또는 로 설정되어 있는지 확인합니다`API_AND_CONFIG_MAP`.
**액세스 항목 생성을** 선택하고 다음을 구성합니다.  
*IAM 보안 주체 ARN*에서 생성한 IAM 역할()을 선택합니다`TroubleshootEKSALBController-SSM-Role`.
*유형*에서 `Standard`를 선택합니다.
액세스 정책 추가:  
*정책 이름*에서를 선택합니다`AmazonEKSAdminViewPolicy`.
*액세스 범위에서*를 선택합니다`Cluster`.
**정책 추가**를 선택합니다.
세부 정보를 확인하고 **생성을** 선택합니다.
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](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)로 이동합니다.

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

1. 입력 파라미터의 경우, 다음 내용을 입력합니다.
   + **AutomationAssumeRole(선택 사항):**

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

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

     허용된 패턴: ^arn:(?:aws\$1aws-cn\$1aws-us-gov):iam::\$1d\$112\$1:role/?[a-zA-Z\$10-9\$1=,.@\$1-\$1/]\$1\$1
   + **EksClusterName(필수):**

     유형: 문자열

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

     허용된 패턴: ^[0-9A-Za-z][A-Za-z0-9-\$1]\$10,99\$1\$1
   + **ALBControllerDeploymentName(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^[a-z0-9]([-.a-z0-9]\$10,251\$1[a-z0-9])?\$1

     기본값: aws-load-balancer-controller
   + **ALBControllerNamespace(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^[a-z0-9]([-a-z0-9]\$10,61\$1[a-z0-9])?\$1

     기본값: kube-system
   + **ServiceAccountName(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^[a-z0-9]([-.a-z0-9]\$10,251\$1[a-z0-9])?\$1

     기본값: aws-load-balancer-controller
   + **ServiceAccountNamespace(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^[a-z0-9]([-a-z0-9]\$10,61\$1[a-z0-9])?\$1

     기본값: kube-system
   + **IngressName(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^\$1\$1^[a-z0-9][a-z0-9.-]\$10,251\$1[a-z0-9]\$1

     기본값: ""(빈 문자열)
   + **IngressNamespace(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^\$1\$1^[a-z0-9][a-z0-9-]\$10,61\$1[a-z0-9]\$1

     기본값: ""(빈 문자열)
   + **ServiceName(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^\$1\$1^[a-z0-9][a-z0-9.-]\$10,251\$1[a-z0-9]\$1

     기본값: ""(빈 문자열)
   + **ServiceNamespace(선택 사항):**

     유형: 문자열

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

     허용된 패턴: ^\$1\$1^[a-z0-9][a-z0-9-]\$10,61\$1[a-z0-9]\$1

     기본값: ""(빈 문자열)
   + **LambdaRoleArn(필수):**

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

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

     허용된 패턴: ^arn:(?:aws\$1aws-cn\$1aws-us-gov):iam::\$1d\$112\$1:role/?[a-zA-Z\$10-9\$1=,.@\$1-\$1/]\$1\$1

1. **실행**을 선택합니다.

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

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

   1. **ValidateAccessEntryAndOIDCProvider:**

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

   1. **SetupK8sAuthenticationClient:**

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

   1. **VerifyALBControllerAndIRSASetup:**

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

   1. **VerifyPodIdentityWebhookAndEnv:**

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

   1. **ValidateSubnetRequirements:**

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

   1. **CheckLoadBalancerLimitsAndUsage:**

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

   1. **CheckIngressOrServiceAnnotations:**

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

   1. **CheckWorkerNodeSecurityGroupTags:**

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

   1. **CaptureALBControllerLogs:**

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

   1. **CleanupK8sAuthenticationClient:**

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

   1. **GenerateReport:**

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

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

   1. **보고서:**

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

**참조**

Systems Manager Automation
+ [이 자동화 실행(콘솔)](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEKSALBControllerIssues/description)
+ [자동화 실행](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [자동화 설정](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [자동화 워크플로 지원](https://aws.amazon.com/premiumsupport/technology/saw/)

 AWS Load Balancer 컨트롤러와 관련된 설명서
+ [AWS Load Balancer서 컨트롤러](https://docs.aws.amazon.com//eks/latest/userguide/aws-load-balancer-controller.html)
+ [액세스 항목 설정](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)