AWS ECS의 Consul 아키텍처
AWS ECS의 Consul 아키텍처
AWS ECS에서의 Consul 배포 아키텍처에 대한 참조 정보를 설명해 드릴게요. mesh-init, health-sync, dataplane, ECS controller 같은 컴포넌트와 시작 시퀀스를 살펴볼게요.
출처: 문서
본문
이 문서는 AWS ECS에서의 Consul 배포 아키텍처에 대한 참조 정보를 제공해요. 다음 다이어그램은 ECS 클러스터에 배포할 때 Consul 아키텍처의 주요 구성 요소를 보여줘요.
구성 요소
Consul은 ECS 클러스터 내에서 여러 구성 요소와 컨테이너를 시작해요. 단기 실행 컨테이너(mesh-init)와 장기 실행 컨테이너(health-sync)의 조합을 사용하면 장기 실행 컨테이너가 Consul에 대한 루트 접근을 가지지 않도록 보장해요. 시작 절차의 순서에 대한 자세한 내용은 시작 시퀀스를 참고해 주세요.
mesh-init 컨테이너
mesh-init 컨테이너는 다음 작업을 수행하는 단기 실행 컨테이너예요:
- Consul 서버에 로그인
- Consul 서버와 직접 통신
- 프록시 및 서비스 등록
- Consul dataplane 컨테이너용 부트스트랩 구성 파일을 만들고 공유 볼륨에 저장
- 트래픽 리다이렉션 규칙을 구성하기 위해
iptablesSDK 호출
health-sync 컨테이너
health-sync 컨테이너는 다음 작업을 수행하는 장기 실행 컨테이너예요:
- ECS 헬스 체크 동기화
- 변경 사항에 대해 Consul 서버 감시
ECS 작업을 중지하면 다음 작업을 수행해요:
- 정상 종료(graceful shutdown)를 지원하기 위해 SIGTERM 수신 시 서비스 및 프록시 인스턴스 등록 해제
- ACL 인증 방법에서 로그아웃 수행
dataplane 컨테이너
dataplane 프로세스는 Envoy 프록시와 같은 컨테이너에서 실행되며 다음 작업을 수행해요:
mesh-init컨테이너가 기록한 부트스트랩 구성에 따라 자신을 소비하고 구성- Envoy 사이드카를 포함하고 시작
ECS controller 컨테이너
클러스터의 ECS 작업 중 하나에는 다음 작업을 수행하는 controller 컨테이너가 포함돼 있어요:
- AWS IAM 인증 방법 생성
- ACL 정책 및 역할 생성
- ACL 상태 유지
- 서비스가 종료되면 토큰 제거
- ECS 작업이 등록을 해제하지 않고 종료되면 서비스 등록 해제
- Consul이 카탈로그에 서비스를 등록할 수 있게 하는 합성 노드(synthetic node) 등록
시작 시퀀스
Consul을 ECS에 배포하면 아키텍처를 구축하기 위해 다음 프로세스가 시작돼요:
mesh-init컨테이너가 시작되고 Consul에 로그인해요.mesh-init컨테이너가 Consul 서버에 서비스와 프록시를 등록해요.mesh-init컨테이너가 Consul dataplane 프로세스의 부트스트랩 구성을 기록하고 공유 볼륨에 저장해요.mesh-init컨테이너가 Consul DNS를 구성하고 트래픽 리다이렉션 규칙을 수정해요.dataplane컨테이너가 시작되고mesh-init컨테이너가 생성한 부트스트랩 구성을 사용하여 자신을 구성해요.dataplane컨테이너가 Envoy 사이드카 프록시를 시작해요.health-sync컨테이너가 ECS 헬스 체크 수신을 시작해요.- ECS 작업이 애플리케이션 인스턴스가 정상임을 나타내면
health-sync컨테이너가 서비스를 정상으로 표시하고 트래픽이 흐르도록 허용해요.
Consul 보안 구성 요소
Consul은 자체 보안 기능을 지원하기 위해 AWS 구성 요소를 활용해요.
인증 방법 (Auth methods)
ECS의 Consul은 AWS IAM 인증 방법을 사용하여 ECS 작업이 시작 중에 자동으로 Consul ACL 토큰을 얻을 수 있게 해줘요.
ACL이 활성화되면 ECS용 Consul Terraform 모듈은 기본적으로 AWS IAM 인증 방법을 지원해요. ECS controller가 Consul 서버에 인증 방법을 설정해요. mesh-task 모듈은 인증 방법과 호환되도록 ECS 작업 정의를 구성해요.
각 ECS 작업 패밀리에는 고유한 작업 IAM 역할이 필요해요. 작업 패밀리는 하나의 Consul 서비스만 나타내며 작업 IAM 역할은 Consul 서비스 이름을 인코딩해야 해요. 결과적으로 작업 IAM 역할을 서로 다른 작업 패밀리와 공유해서는 안 돼요.
기본적으로 mesh-task 모듈이 작업 IAM 역할을 만들어 구성해 줘요.
task_role 입력 변수를 사용하여 기존 IAM 역할을 mesh-task 모듈에 전달하려면 ECS Task Role Configuration에 설명된 대로 AWS IAM 인증 방법과 호환되도록 IAM 역할을 구성해 주세요.
ECS 작업 역할
ECS 작업 역할은 ECS 작업과 연결된 IAM 역할이에요.
ECS 작업이 시작되면 consul login 명령을 실행해요. 이 명령은 AWS에서 작업 역할의 자격 증명을 얻은 다음 해당 자격 증명을 사용하여 AWS IAM 인증 방법에 로그인 요청을 서명해요. 이 자격 증명은 ECS 작업의 ID를 Consul 서버에 증명해요.
작업 역할이 AWS IAM 인증 방법과 호환되도록 다음 세부 정보로 구성해야 해요:
- 자신을 가져오기 위한
iam:GetRole권한. 자세한 내용은 IAM Policies를 참고해 주세요. - 이 작업의 애플리케이션에 대한 Consul 서비스 이름이 포함된 작업 역할의
consul.hashicorp.com.service-name태그. - Consul Enterprise를 사용할 때 이 서비스가 등록된 Consul Enterprise 네임스페이스를 나타내는 작업 역할의
consul.hashicorp.com.namespace태그 추가.