Keycloak HA 및 클러스터링
1️⃣ Stateless 클러스터 구성
1. Keycloak는 기본적으로 Stateless
Keycloak는 17버전부터 Quarkus 기반으로 전환되면서 완전한 Stateless 서비스로 운영이 가능해졌습니다.
이로 인해 Kubernetes 같은 클라우드 환경에서 확장성과 유연성이 크게 향상됩니다.
2. Stateless 클러스터 기본 구조
+-----------------------------+
| Load Balancer |
+------------+---------------+
|
+----------+-----------+
| |
+----+ +----+
| KC1| | KC2|
+----+ +----+
| |
+--------+---------+
|
+-------------+
| PostgreSQL |
+-------------+
3. 필요한 구성 요소
- Load Balancer: 트래픽 분산 (Ingress, Nginx, HAProxy 등)
- Keycloak 인스턴스: 무상태 복수 배포
- 공유 DB: PostgreSQL (RDS, HA 구성이면 더욱 안정적)
- 캐시 공유 (선택): 세션 동기화 필요 시
2️⃣ Infinispan vs 외부 캐시 사용 전략
1. Infinispan의 역할
Keycloak는 내부적으로 Infinispan 캐시 엔진을 사용합니다.
캐시 종류 | 역할 |
---|---|
Realm Cache | Realm, Client, Role 정보 |
User Cache | 사용자 정보 캐싱 |
Session Cache | 로그인 세션 공유 |
2. Infinispan vs 외부 캐시
비교 항목 | Infinispan | Redis 등 외부 캐시 |
---|---|---|
내장 여부 | ✅ 내장됨 | ❌ 외부 설치 필요 |
구성 난이도 | 낮음 | 설정 필요 |
세션 클러스터링 | 가능 | 불가 (Keycloak 비공식 지원) |
Quarkus 모드 지원 | 기본 지원 | 미지원/비공식 |
✅ 결론: Quarkus 기반 Keycloak는 Infinispan 내장 캐시만으로 충분하며, 별도 Redis 설정은 권장되지 않음.
3. 캐시 설정 위치
📌 conf/cache-ispn.xml
또는 Helm Chart의 환경 변수 설정 가능
3️⃣ Keycloak + PostgreSQL HA 구성
1. 고가용성 DB 구성 필요성
Keycloak는 모든 설정/세션을 DB에 저장하므로, PostgreSQL의 HA 구성은 필수입니다.
2. 구성 아키텍처
+---------+ +---------+
| KC Pod1 | | KC Pod2 |
+----+----+ +----+----+
| |
+-------+-------+
|
+------+------+
| LoadBalancer|
+------+------+
|
+-------+--------+
| Patroni Cluster |
| (PostgreSQL HA)|
+----------------+
3. PostgreSQL HA 구현 방식
- Patroni + Etcd
- Bitnami PostgreSQL HA Helm Chart
- Amazon RDS Multi-AZ
4. 실전 Helm 예시 (PostgreSQL HA)
primary:
persistence:
enabled: true
resources:
requests:
cpu: 100m
memory: 512Mi
readReplicas:
replicaCount: 2
4️⃣ K8s 환경에서 Horizontal Scaling
1. 수평 확장 개념
Keycloak 인스턴스를 무상태 방식으로 복수 배포하면, 트래픽 증가 시 자동 확장이 가능합니다.
2. HPA 적용 예시
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: keycloak-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: keycloak
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
3. Kubernetes 배포 전략 예시
containers:
- name: keycloak
image: quay.io/keycloak/keycloak:24.0
args:
- start
- --hostname-strict=false
env:
- name: KC_DB
value: postgres
- name: KC_DB_URL
value: jdbc:postgresql://postgresql-ha:5432/keycloak
- name: KC_CACHE
value: ispn
4. 클러스터 흐름도
[Ingress / LoadBalancer]
↓
+---------+--------+
| Keycloak Pod xN |
+---------+--------+
↓
+------------------+
| PostgreSQL (HA) |
+------------------+
✅ 요약 정리
주제 | 요약 |
---|---|
Stateless 구성 | Keycloak는 기본 무상태 운영 가능 |
캐시 전략 | Infinispan 내장 캐시 사용 권장 |
DB HA | PostgreSQL는 반드시 HA 구성 필요 |
수평 확장 | K8s에서 HPA, LB로 확장 운영 가능 |
마지막 수정일자