AWS Controllers for Kubernetes (ACK)
목차
소개
AWS Controllers for Kubernetes(ACK)는 Kubernetes 사용자가 Kubernetes API를 통해 AWS 서비스와 리소스를 직접 관리할 수 있게 해주는 프로젝트입니다. ACK는 Kubernetes의 선언적 API 모델을 AWS 리소스로 확장하여, 개발자와 운영자가 익숙한 Kubernetes 도구와 API를 사용하여 AWS 인프라를 관리할 수 있게 합니다.
ACK의 주요 이점
통합된 경험: Kubernetes와 AWS 리소스를 동일한 도구와 워크플로우로 관리
GitOps 지원: AWS 리소스를 코드로 정의하고 Git 저장소에서 관리
선언적 구성: 원하는 상태를 정의하고 컨트롤러가 실제 상태를 조정
Kubernetes 네이티브 접근 방식: 표준 Kubernetes 개념과 API 사용
멀티 클러스터 지원: 여러 클러스터에서 동일한 AWS 리소스 참조 가능
IAM 통합: Kubernetes 서비스 계정과 AWS IAM 역할 통합
기존 접근 방식과의 비교
인터페이스
Kubernetes API
CloudFormation 템플릿
HCL
프로그래밍 API/명령줄
선언적
✅
✅
✅
❌
상태 관리
Kubernetes etcd
CloudFormation 스택
Terraform 상태
수동 관리
드리프트 감지
✅
✅
✅
❌
Kubernetes 통합
네이티브
제한적
제한적
제한적
지원되는 서비스
제한적 (확장 중)
광범위
광범위
모든 서비스
아키텍처
ACK는 Kubernetes 운영자 패턴을 기반으로 하며, 각 AWS 서비스에 대한 컨트롤러를 제공합니다.
주요 구성 요소
서비스 컨트롤러: 각 AWS 서비스에 대한 전용 컨트롤러
사용자 정의 리소스 정의(CRD): AWS 리소스를 Kubernetes API로 정의
사용자 정의 리소스(CR): AWS 리소스의 인스턴스
조정 루프: 원하는 상태와 실제 상태 간의 차이를 감지하고 해결
작동 방식
사용자가 Kubernetes YAML 매니페스트를 적용하여 AWS 리소스를 정의
ACK 컨트롤러가 사용자 정의 리소스 변경 사항을 감지
컨트롤러가 AWS API를 호출하여 해당 AWS 리소스를 생성, 업데이트 또는 삭제
컨트롤러가 AWS 리소스의 상태를 모니터링하고 Kubernetes 리소스 상태를 업데이트
설치 및 구성
사전 요구 사항
Kubernetes 클러스터 (v1.16 이상)
kubectl 설정
AWS 계정 및 적절한 IAM 권한
Helm 3 (선택 사항)
설치 방법
1. ACK 서비스 컨트롤러 설치
ACK 컨트롤러는 각 AWS 서비스별로 별도로 설치됩니다. 예를 들어, S3 컨트롤러를 설치하려면:
2. IAM 권한 설정
ACK 컨트롤러가 AWS 리소스를 관리하려면 적절한 IAM 권한이 필요합니다. IRSA(IAM Roles for Service Accounts)를 사용하여 권한을 설정할 수 있습니다:
s3-controller-policy.json 예시:
3. 컨트롤러 구성
컨트롤러 구성을 사용자 지정하려면 Helm 값 파일을 사용할 수 있습니다:
지원되는 AWS 서비스
ACK는 다양한 AWS 서비스에 대한 컨트롤러를 제공합니다. 각 서비스 컨트롤러는 개별적으로 설치하고 관리할 수 있습니다.
현재 지원되는 서비스 (2025년 7월 기준)
Amazon API Gateway (apigatewayv2)
Amazon DynamoDB
Amazon ECR
Amazon EKS
Amazon ElastiCache
Amazon MemoryDB
Amazon MQ
Amazon RDS
Amazon S3
Amazon SageMaker
AWS IAM
AWS Lambda
AWS SNS
AWS SQS
Amazon EventBridge
Amazon MSK
Amazon OpenSearch Service
AWS ACM
AWS Route 53
서비스 컨트롤러 상태
각 서비스 컨트롤러는 다음 상태 중 하나를 가집니다:
알파(Alpha): 초기 개발 단계, API 변경 가능
베타(Beta): 기능 완성, 안정적이지만 API 변경 가능
GA(Generally Available): 프로덕션 사용 준비 완료
최신 상태는 ACK GitHub 저장소에서 확인할 수 있습니다.
ACK의 탄생 배경과 진화
Infrastructure as Code의 진화
AWS 리소스 관리 방식은 다음과 같이 진화해 왔습니다:
수동 관리 시대: AWS Console에서 직접 리소스를 생성하고 관리
AWS CloudFormation: 템플릿 기반의 선언적 인프라 관리 도입, 그러나 Kubernetes 워크플로우와 분리
Terraform: 멀티 클라우드 지원과 HCL 언어로 인프라 관리 통합, 그러나 여전히 별도의 도구와 워크플로우 필요
ACK: Kubernetes API를 통해 AWS 리소스를 직접 관리 — kubectl, GitOps, RBAC 등 기존 K8s 도구체인 그대로 활용
왜 Kubernetes 네이티브 AWS 관리가 필요한가?
기존 접근 방식의 한계:
도구 분리: Terraform/CloudFormation과 kubectl을 별도로 운영해야 하는 이중 관리 부담
상태 불일치: IaC 도구의 상태와 Kubernetes 클러스터 상태가 분리되어 드리프트 발생 가능
GitOps 통합 어려움: ArgoCD/Flux 같은 GitOps 도구로 AWS 리소스까지 관리하기 어려움
팀 경험 단절: 인프라 팀과 앱 팀이 서로 다른 도구와 워크플로우 사용
ACK는 이러한 문제를 해결하여 Kubernetes 하나의 제어 평면으로 AWS 인프라와 애플리케이션을 통합 관리할 수 있게 합니다.
리소스 생성 예제
ACK를 사용한 AWS 리소스 생성 상세 예제는 아래 문서를 참조하세요:
리소스 관리
리소스 상태 확인
ACK 리소스의 상태를 확인하려면:
출력 예시:
리소스 업데이트
ACK 리소스를 업데이트하려면 매니페스트를 수정하고 다시 적용합니다:
리소스 삭제
ACK 리소스를 삭제하려면:
기본적으로 ACK는 Kubernetes 리소스를 삭제할 때 해당 AWS 리소스도 삭제합니다. 이 동작을 변경하려면 주석을 사용할 수 있습니다:
리소스 가져오기
기존 AWS 리소스를 ACK로 가져오려면:
보안 고려사항
IAM 권한 관리
ACK 컨트롤러에는 관리하는 AWS 리소스에 대한 적절한 IAM 권한이 필요합니다. 최소 권한 원칙을 따라 필요한 권한만 부여하는 것이 좋습니다.
세분화된 IAM 정책 예시
네임스페이스 격리
여러 팀이나 환경에 대해 별도의 네임스페이스와 IAM 역할을 사용하여 권한을 격리할 수 있습니다:
리소스 정책
ACK 리소스에 대한 액세스를 제한하기 위해 Kubernetes RBAC를 사용할 수 있습니다:
모니터링 및 로깅
컨트롤러 로그 확인
ACK 컨트롤러의 로그를 확인하려면:
Prometheus 메트릭
ACK 컨트롤러는 Prometheus 메트릭을 노출합니다:
주요 메트릭:
ack_reconcile_success_total: 성공적인 조정 횟수ack_reconcile_failure_total: 실패한 조정 횟수ack_api_call_duration_seconds: AWS API 호출 지연 시간
AWS CloudTrail 통합
ACK 컨트롤러가 수행하는 AWS API 호출은 CloudTrail에 기록됩니다. CloudTrail 로그를 검토하여 ACK 작업을 감사할 수 있습니다.
모범 사례
리소스 구성
명확한 이름 지정: 리소스 이름을 명확하고 일관되게 지정
주석 사용: 리소스 관리를 위한 주석 활용
레이블 적용: 리소스 그룹화 및 필터링을 위한 레이블 사용
버전 관리
Git 저장소 사용: ACK 리소스 매니페스트를 Git 저장소에 저장
환경별 구성 분리: 개발, 스테이징, 프로덕션 환경에 대한 별도 구성 유지
Kustomize 활용: 환경별 차이를 관리하기 위해 Kustomize 사용
성능 및 확장성
리소스 요청 및 제한 설정: 컨트롤러에 적절한 리소스 할당
컨트롤러 복제본 확장: 대규모 환경에서 컨트롤러 복제본 증가
조정 빈도 조정: 필요에 따라 조정 빈도 최적화
재해 복구
백업 전략: ACK 리소스 매니페스트 정기 백업
복구 계획: 장애 발생 시 리소스 복구 절차 문서화
다중 리전 고려: 중요 리소스에 대한 다중 리전 전략 구현
문제 해결
일반적인 문제
1. 리소스 생성 실패
증상: ACK 리소스가 생성되지만 AWS 리소스는 생성되지 않음
해결 방법:
컨트롤러 로그 확인
IAM 권한 확인
리소스 상태 및 이벤트 확인
2. 권한 문제
증상: "AccessDenied" 오류 메시지
해결 방법:
IAM 정책 및 역할 확인
IRSA 구성 확인
CloudTrail 로그 검토
3. 리소스 삭제 중단
증상: 리소스가 "Terminating" 상태에서 멈춤
해결 방법:
종속성 확인
파이널라이저 제거 (필요한 경우)
디버깅 도구
결론
AWS Controllers for Kubernetes(ACK)는 Kubernetes와 AWS 서비스 간의 격차를 해소하는 강력한 도구입니다. ACK를 사용하면 Kubernetes 사용자가 익숙한 Kubernetes API와 도구를 사용하여 AWS 리소스를 관리할 수 있습니다.
이 문서에서는 ACK의 기본 개념, 설치 방법, S3, IAM, SQS, SNS 리소스 생성 예제, 리소스 관리, 보안 고려사항, 모니터링 및 문제 해결에 대해 살펴보았습니다.
ACK는 지속적으로 발전하고 있으며, 더 많은 AWS 서비스에 대한 지원이 추가되고 있습니다. GitOps 워크플로우와 결합하면 AWS 인프라를 코드로 관리하는 강력한 방법을 제공합니다.
다음 단계
ACK를 사용한 GitOps 파이프라인 구축
여러 AWS 서비스 컨트롤러 통합
사용자 정의 리소스 정의 확장
다중 계정 및 다중 리전 전략 개발
참고 자료
퀴즈
이 장에서 배운 내용을 테스트하려면 ACK 퀴즈를 풀어보세요.
마지막 업데이트