Keycloak CI/CD 자동화 배포
1️⃣ Helm Chart를 통한 GitOps 배포
1. Helm이란?
Helm은 Kubernetes 애플리케이션을 정의하고 설치하는 패키지 관리자입니다.
Keycloak도 Helm Chart를 사용하면 선언적이고 반복 가능한 방식으로 쉽게 배포할 수 있습니다.
2. 기본 Helm Chart 예제 (Bitnami)
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install keycloak bitnami/keycloak \
--set auth.adminUser=admin \
--set auth.adminPassword=admin123 \
--set postgresql.enabled=true
3. GitOps 구조와 Helm 연동
Git Repository (Helm values.yaml)
↓
GitOps Tool (ArgoCD/Flux)
↓
Helm Chart → Kubernetes
↓
Keycloak Cluster 배포
4. values.yaml
예시
auth:
adminUser: admin
adminPassword: admin123
replicaCount: 2
postgresql:
enabled: true
✅ Git에 이 파일을 커밋하고, ArgoCD/Flux가 자동으로 Sync 합니다.
2️⃣ ArgoCD, Flux와 연동
1. ArgoCD + Helm 연동 구조
[Git Repo]
↓
[ArgoCD App] ←─── Helm Chart 관리
↓
[Kubernetes Cluster]
↓
[Keycloak + DB]
2. ArgoCD App 설정 예시
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: keycloak
spec:
project: default
source:
repoURL: https://github.com/your-org/keycloak-infra
targetRevision: HEAD
path: helm/keycloak
helm:
valueFiles:
- values.yaml
destination:
server: https://kubernetes.default.svc
namespace: keycloak
syncPolicy:
automated:
prune: true
selfHeal: true
자동화: Git의 변경사항이 → Helm Chart 업데이트 → Keycloak 자동 배포!
3. Flux 연동 구조도
Flux는 Git → HelmRelease → Kubernetes 순으로 배포합니다.
Git
└─── HelmRelease (CRD)
└─── Keycloak Helm Chart
└─── Deployed to Cluster
3️⃣ CRD를 이용한 Realm 정의 (Keycloak Operator)
1. Keycloak Operator란?
Keycloak Operator는 Kubernetes CRD를 활용해 Keycloak Realm, Client 등을 선언적으로 정의할 수 있게 해줍니다.
2. Keycloak Realm CRD 예시
apiVersion: keycloak.org/v1alpha1
kind: KeycloakRealm
metadata:
name: my-realm
namespace: keycloak
spec:
instanceSelector:
matchLabels:
app: keycloak
realm:
id: my-realm
realm: my-realm
enabled: true
displayName: "My Dev Realm"
3. Keycloak Operator 배포 후 구성 구조
Git
└─── KeycloakRealm.yaml
└─── Keycloak Operator
└─── Keycloak Server
└─── Realm 자동 생성
4. Client CRD 예시
apiVersion: keycloak.org/v1alpha1
kind: KeycloakClient
metadata:
name: react-client
spec:
realmSelector:
matchLabels:
realm: my-realm
client:
clientId: react-app
secret: abc123
redirectUris:
- https://myapp.com/*
enabled: true
4️⃣ Git 기반 Realm/Client 관리
1. Git에 Realm 정의 버전관리하기
keycloak/realm.yaml
keycloak/client.yaml
keycloak/users.yaml
Git을 통해 모든 인증 구성을 코드로 관리할 수 있습니다.
변경사항은 GitOps 툴을 통해 자동으로 배포됩니다.
2. GitOps 기반 인증 구성 흐름
1. Git 커밋 (Realm/Client YAML)
↓
2. GitOps 툴 (ArgoCD / Flux)
↓
3. Keycloak Operator
↓
4. Keycloak Realm/Client 자동 생성
3. 실전 Git 구조 예시
keycloak-configs/
├── base/
│ ├── keycloak.yaml
│ └── realm.yaml
└── overlays/
└── dev/
└── values.yaml
✅ 요약 정리
주제 | 내용 |
---|---|
Helm | 선언적 설치, GitOps 연동 |
ArgoCD/Flux | Git 상태와 클러스터 상태를 자동 동기화 |
Keycloak Operator | Realm, Client를 Kubernetes CRD로 정의 |
Git 기반 관리 | 인증 시스템도 코드로 관리 (IaC) |
📌 추천 실습 흐름
- Helm Chart로 Keycloak 설치
- ArgoCD App 설정으로 Git 연동
- Realm/Client를 CRD로 Git에 정의
- Keycloak Operator로 자동 배포 확인
마지막 수정일자