Keycloak HA 및 클러스터링

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로 확장 운영 가능

RSS Feed
마지막 수정일자