View a markdown version of this page

ACK 기능 관련 문제 해결 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.

ACK 기능 관련 문제 해결

참고

EKS 기능은 완전관리형 기능이며, 클러스터 외부에서 실행됩니다. 사용자에게 컨트롤러 네임스페이스에 대한 직접 액세스 권한이 없습니다. 컨트롤러 동작을 볼 수 있도록 컨트롤러 로그 전송을 구성할 수 있습니다. EKS Capabilities 컨트롤러 로그에 액세스을(를) 참조하세요. 문제 해결은 기능 상태, 리소스 상태 및 IAM 구성에 중점을 둡니다.

기능이 ACTIVE 상태이지만 리소스가 생성되지 않음

ACK 기능이 ACTIVE 상태를 표시하지만 AWS에서 리소스가 생성되지 않는 경우 기능 상태, 리소스 상태 및 IAM 권한을 확인합니다.

기능 상태 확인:

EKS 콘솔 또는 AWS CLI를 사용하여 기능 상태 및 상태 문제를 볼 수 있습니다.

콘솔:

  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. 클러스터 이름을 선택하세요.

  3. 관찰성 탭을 선택합니다.

  4. 클러스터 모니터링을 선택합니다.

  5. 기능 탭을 선택하여 모든 기능의 상태를 보세요.

AWS CLI:

# View capability status and health aws eks describe-capability \ --region region-code \ --cluster-name my-cluster \ --capability-name my-ack # Look for issues in the health section

일반적인 원인:

  • IAM 권한 누락: 기능 역할에 AWS 서비스에 대한 권한이 부족함

  • 잘못된 네임스페이스: 적절한 IAMRoleSelector 없이 네임스페이스에서 생성된 리소스

  • 유효하지 않은 리소스 사양: 리소스 상태 조건에 검증 오류가 있는지 확인

  • API 스로틀링: AWS API 속도 제한에 도달함

  • 승인 웹후크: 컨트롤러가 리소스 상태를 패치하지 못하도록 차단하는 승인 웹후크

리소스 상태 확인:

# Describe the resource to see conditions and events kubectl describe bucket my-bucket -n default # Look for status conditions kubectl get bucket my-bucket -n default -o jsonpath='{.status.conditions}' # View resource events kubectl get events --field-selector involvedObject.name=my-bucket -n default

IAM 권한 확인:

# View the Capability Role's policies aws iam list-attached-role-policies --role-name my-ack-capability-role aws iam list-role-policies --role-name my-ack-capability-role # Get specific policy details aws iam get-role-policy --role-name my-ack-capability-role --policy-name policy-name

AWS에서 생성되었지만 Kubernetes에 표시되지 않는 리소스

ACK는 Kubernetes 매니페스트를 통해 생성한 리소스만 추적합니다. ACK를 사용하여 기존 AWS 리소스를 관리하려면 채택 기능을 사용합니다.

apiVersion: s3.services.k8s.aws/v1alpha1 kind: Bucket metadata: name: existing-bucket annotations: services.k8s.aws/adoption-policy: "adopt-or-create" spec: name: my-existing-bucket-name

리소스 채택에 대한 자세한 내용은 ACK 개념 섹션을 참조하세요.

교차 계정 리소스가 생성되지 않음

IAM 역할 선택기를 사용할 때 대상 AWS 계정에서 리소스가 생성되지 않는 경우 신뢰 관계 및 IAMRoleSelector 구성을 확인합니다.

신뢰 관계 확인

# Check the trust policy in the target account role aws iam get-role --role-name cross-account-ack-role --query 'Role.AssumeRolePolicyDocument'

신뢰 정책은 소스 계정의 기능 역할에서 이를 수임하도록 허용해야 합니다.

IAMRoleSelector 구성 확인.

# List IAMRoleSelectors (cluster-scoped) kubectl get iamroleselector # Describe specific selector kubectl describe iamroleselector my-selector

네임스페이스 정렬 확인:

IAMRoleSelector는 클러스터 범위의 리소스이지만 특정 네임스페이스를 대상으로 합니다. ACK 리소스가 IAMRoleSelector의 네임스페이스 선택기와 일치하는 네임스페이스에 있는지 확인합니다.

# Check resource namespace kubectl get bucket my-cross-account-bucket -n production # List all IAMRoleSelectors (cluster-scoped) kubectl get iamroleselector # Check which namespace the selector targets kubectl get iamroleselector my-selector -o jsonpath='{.spec.namespaceSelector}'

IAMRoleSelected 조건 확인:

ACK.IAMRoleSelected 조건을 확인하여 IAMRoleSelector가 리소스와 성공적으로 일치하는지 확인합니다.

# Check if IAMRoleSelector was matched kubectl get bucket my-cross-account-bucket -n production -o jsonpath='{.status.conditions[?(@.type=="ACK.IAMRoleSelected")]}'

조건이 False이거나 누락된 경우 IAMRoleSelector의 네임스페이스 선택기가 리소스의 네임스페이스와 일치하지 않습니다. 선택기의 namespaceSelector가 리소스의 네임스페이스 레이블과 일치하는지 확인합니다.

기능 역할 권한 확인:

기능 역할에는 대상 계정 역할에 대한 sts:AssumeRolests:TagSession 권한이 필요합니다.

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["sts:AssumeRole", "sts:TagSession"], "Resource": [.replaceable]`"arn:aws:iam::444455556666:role/cross-account-ack-role"` } ] }

자세한 교차 계정 구성은 ACK 권한 구성 섹션을 참조하세요.

다음 단계