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 역할 통합

기존 접근 방식과의 비교

기능
ACK
AWS CloudFormation
Terraform
AWS SDK/CLI

인터페이스

Kubernetes API

CloudFormation 템플릿

HCL

프로그래밍 API/명령줄

선언적

상태 관리

Kubernetes etcd

CloudFormation 스택

Terraform 상태

수동 관리

드리프트 감지

Kubernetes 통합

네이티브

제한적

제한적

제한적

지원되는 서비스

제한적 (확장 중)

광범위

광범위

모든 서비스

아키텍처

ACK는 Kubernetes 운영자 패턴을 기반으로 하며, 각 AWS 서비스에 대한 컨트롤러를 제공합니다.

주요 구성 요소

  1. 서비스 컨트롤러: 각 AWS 서비스에 대한 전용 컨트롤러

  2. 사용자 정의 리소스 정의(CRD): AWS 리소스를 Kubernetes API로 정의

  3. 사용자 정의 리소스(CR): AWS 리소스의 인스턴스

  4. 조정 루프: 원하는 상태와 실제 상태 간의 차이를 감지하고 해결

작동 방식

  1. 사용자가 Kubernetes YAML 매니페스트를 적용하여 AWS 리소스를 정의

  2. ACK 컨트롤러가 사용자 정의 리소스 변경 사항을 감지

  3. 컨트롤러가 AWS API를 호출하여 해당 AWS 리소스를 생성, 업데이트 또는 삭제

  4. 컨트롤러가 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 저장소arrow-up-right에서 확인할 수 있습니다.

ACK의 탄생 배경과 진화

Infrastructure as Code의 진화

AWS 리소스 관리 방식은 다음과 같이 진화해 왔습니다:

  1. 수동 관리 시대: AWS Console에서 직접 리소스를 생성하고 관리

  2. AWS CloudFormation: 템플릿 기반의 선언적 인프라 관리 도입, 그러나 Kubernetes 워크플로우와 분리

  3. Terraform: 멀티 클라우드 지원과 HCL 언어로 인프라 관리 통합, 그러나 여전히 별도의 도구와 워크플로우 필요

  4. 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 작업을 감사할 수 있습니다.

모범 사례

리소스 구성

  1. 명확한 이름 지정: 리소스 이름을 명확하고 일관되게 지정

  2. 주석 사용: 리소스 관리를 위한 주석 활용

  3. 레이블 적용: 리소스 그룹화 및 필터링을 위한 레이블 사용

버전 관리

  1. Git 저장소 사용: ACK 리소스 매니페스트를 Git 저장소에 저장

  2. 환경별 구성 분리: 개발, 스테이징, 프로덕션 환경에 대한 별도 구성 유지

  3. Kustomize 활용: 환경별 차이를 관리하기 위해 Kustomize 사용

성능 및 확장성

  1. 리소스 요청 및 제한 설정: 컨트롤러에 적절한 리소스 할당

  2. 컨트롤러 복제본 확장: 대규모 환경에서 컨트롤러 복제본 증가

  3. 조정 빈도 조정: 필요에 따라 조정 빈도 최적화

재해 복구

  1. 백업 전략: ACK 리소스 매니페스트 정기 백업

  2. 복구 계획: 장애 발생 시 리소스 복구 절차 문서화

  3. 다중 리전 고려: 중요 리소스에 대한 다중 리전 전략 구현

문제 해결

일반적인 문제

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 퀴즈를 풀어보세요.

마지막 업데이트