서비스·배치·테스트용 AKS 클러스터를 서로 다른 시점에 구성하면서 보안 기본값에 차이가 생겼다. 일부 클러스터는 private 구성이 아니거나 local-auth가 활성화돼 있었다. 신규 클러스터를 추가하기 전에 공통 설정을 Terraform 모듈로 분리했다.

AKS Terraform 모듈을 서비스·배치·테스트 레포가 공통으로 사용하는 구조

AKS Terraform 모듈 하나를 여러 레포가 공통으로 사용해 보안 기본값과 노드풀 구성을 통일한다.

입력값과 공통 기본값의 경계

정리하면서 가장 오래 고민한 건 "무엇을 input으로 열어 둘 것인가"였다. 전부 변수로 빼면 모듈이 아니라 긴 복제 코드가 되고, 다 막으면 환경별 차이를 담지 못한다. 그래서 노드 사이즈·노드 수·오토스케일러 한도처럼 실제로 환경마다 다른 값만 input으로 열었다.

대신 이런 설정은 모듈 안에 기본값으로 포함해 쉽게 끌 수 없게 했다.

  • private cluster (API 서버 비공개)
  • Workload Identity (OIDC federated) — 노드에 시크릿을 박지 않음
  • Key Vault 연동
  • Velero 백업
  • Azure Policy
  • local-auth off 강제

전에는 클러스터마다 사람이 이걸 일일이 챙겼다. 한 명이 빠뜨리면 그 클러스터만 보안 설정이 달라진다. 모듈 안에 포함해 두니 적어도 "이번 클러스터 local-auth 껐나?" 같은 질문은 줄었다.

(노드 이미지 자체의 표준화, 즉 Packer 골든 이미지는 이 모듈과는 별개의 축이라 다른 글에서 따로 다룬다.)

적용 결과와 변경 관리

세 환경 repo가 같은 모듈을 import하고 input만 다르게 채운다. 새 클러스터를 띄울 때 신경 쓸 것이 "이 환경은 노드 몇 개냐" 쪽으로 줄었고, 보안 기본값이 클러스터마다 갈리는 문제도 많이 줄었다.

공통 모듈의 기본값 변경은 세 환경에 영향을 줄 수 있으므로 버전을 고정하고 환경별 plan을 확인한 뒤 순차적으로 적용한다. 환경마다 알 수 없는 차이가 생기는 문제는 줄었지만, 공통 변경의 영향 범위를 사전에 검증하는 절차가 중요해졌다.


참고