이번엔 DevOps 고급 자동화 주제로, 실제 MSA(Microservice Architecture) 기반 SaaS에서 사용되는 **“GitHub Actions + Argo CD + Open Policy Agent (OPA)로 구현하는 정책 기반 GitOps 배포 파이프라인”**에 대한 심화 가이드입니다. 단순한 YAML 선언을 넘어서, 실무 엔지니어가 규정 준수와 보안까지 코드화하여 배포를 통제하는 방법을 중심으로 구성하였습니다.
⸻
⸻
📌 왜 정책 기반 GitOps인가?
GitOps를 적용하면 배포는 Git에서 선언적으로 관리됩니다. 하지만 다음과 같은 문제는 여전히 존재합니다:
문제 설명
무분별한 자원 선언 신규 서비스나 Helm 차트에서 hostNetwork: true, privileged: true 등 보안 리스크 야기
비용 폭증 무심코 설정된 replicas: 100 같은 오타가 리소스 낭비로 이어짐
거버넌스 부재 실무 환경에서 팀별 배포 기준이 통제되지 않음
→ Open Policy Agent(OPA) + Gatekeeper를 도입하여, GitOps 배포 전후에 정책 검증을 삽입하고, 위반 시 배포를 자동 차단할 수 있습니다.
⸻
🧱 아키텍처 구성
┌──────────────┐ PR 생성 ┌─────────────┐ 배포 요청 ┌────────────┐
│ Developer ├───────────────▶│ GitHub Repo │ ────────────────▶ │ Argo CD │
└──────────────┘ └─────────────┘ │ │
▼ ▼
┌────────────┐ ┌────────────┐
│ Gatekeeper │ │ Kubernetes │
└────────────┘ └────────────┘
▲
정책 평가 (OPA)
⸻
⚙️ 구현 단계별 가이드
1. Gatekeeper 설치
kubectl apply -f https://raw.githubusercontent.com/open-policy-agent/gatekeeper/release-3.12/deploy/gatekeeper.yaml
2. ConstraintTemplate 작성 (예: 컨테이너 이미지 tag 제한)
apiVersion: templates.gatekeeper.sh/v1beta1
kind: ConstraintTemplate
metadata:
name: k8srequiredimagetag
spec:
crd:
spec:
names:
kind: K8sRequiredImageTag
targets:
- target: admission.k8s.gatekeeper.sh
rego: |
package k8srequiredimagetag
violation[{"msg": msg}] {
container := input.review.object.spec.containers[_]
not endswith(container.image, ":latest")
msg := sprintf("이미지는 ':latest'를 사용하면 안 됩니다: %v", [container.image])
}
3. Constraint 선언
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: K8sRequiredImageTag
metadata:
name: disallow-latest-tag
spec:
match:
kinds:
- apiGroups: [""]
kinds: ["Pod"]
4. GitHub Actions에서 conftest 기반 사전 정책 검증
.github/workflows/policy-check.yml:
name: Policy Check
on: [pull_request]
jobs:
opa:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install conftest
run: |
wget https://github.com/open-policy-agent/conftest/releases/download/v0.39.0/conftest_0.39.0_Linux_x86_64.tar.gz
tar -xzf conftest_0.39.0_Linux_x86_64.tar.gz
sudo mv conftest /usr/local/bin/
- name: Run policy check
run: conftest test k8s/deployments/
🔐 이렇게 하면 Pull Request가 Argo CD 배포 이전에 정책을 위반했는지 자동으로 검증할 수 있습니다.
⸻
📊 고급 활용 팁
상황 적용 방법
Helm 차트에 적용 conftest test <(helm template ./chart) 으로 사전 렌더링된 리소스를 검사
팀별 정책 차등 적용 Constraint의 match.labels로 네임스페이스마다 다른 정책 적용
감사 로그 수집 Gatekeeper Audit 기능으로 위반 리소스 정기 스캔
Slack 연동 정책 위반 알림을 Slack으로 전송하도록 Argo CD Notifications 연계
자동 롤백 OPA 정책 위반 시 배포 중단 → Argo CD가 자동으로 이전 Revision 복원
⸻
🧪 실제 적용 예시
• Netflix: 배포 이전 사전 시뮬레이션 및 정책 시각화에 OPA 활용
• Alibaba Cloud: 5,000개 이상 클러스터에 Gatekeeper 정책 적용
• Nubank: 모든 GitOps 워크플로에 conftest 기반 정책 테스트 병렬화
⸻
✅ 결론
이제 GitOps는 단순 배포 도구를 넘어서, **“조직의 정책·보안·규정 준수까지 코드로 통제”**하는 플랫폼으로 진화하고 있습니다.
GitHub Actions, Argo CD, Gatekeeper, OPA를 통합하면 다음과 같은 효과를 얻을 수 있습니다:
• 실시간 PR 레벨 정책 검증
• 클러스터 진입 전 정책 차단
• 정책 변경 내역도 Git으로 추적 가능
• 배포 실패 시 자동 롤백 및 알림
'IT & Tech 정보' 카테고리의 다른 글
⚠️ Prometheus + KEDA로 실시간 장애 탐지와 자동 트래픽 컷오프 + Slack 경고 파이프라인 만들기 (0) | 2025.05.28 |
---|---|
Pulumi × TypeScript로 구축하는 멀티 클라우드 IaC: 진짜 ‘코드로서의 인프라’란 무엇인가 (0) | 2025.05.28 |
AWS Lambda에 KEDA 도입하기: EventBridge 기반 Serverless Auto-Scaler 완전 자동화 (0) | 2025.05.28 |
Git 커밋도 없이 배포된다: Argo CD Image Updater로 완전 자동 GitOps 구축하기 (0) | 2025.05.28 |
SLA 기반 자동 스케일링 아키텍처 완전 해부: KEDA + Prometheus + OpenSLO + Slack 연동 (0) | 2025.05.28 |