증거 — Keycloak 멀티노드 클러스터 형성
docs/keycloak-multinode-cluster.md의 근거 자료.
정상적으로 클러스터가 형성된 상태에서 수집했으며, 이후 고장을 주입한
뒤 이것과 대조한다.
수집 시각: 2026-09-03 17:24 KST
| 파일 | 내용 |
|---|---|
01-cluster-formed.txt |
파드 배치·클러스터 뷰 로그·JGROUPS_PING·OIDC discovery·자원 |
이 상태에서 확인된 것
클러스터 뷰가 멤버 2를 보고한다
ISPN000094: Received new cluster view for channel ISPN:
[keycloak-1-26938|1] (2) [keycloak-1-26938, keycloak-0-49501]
ISPN100000: Node keycloak-0-49501 joined the cluster
ISPN000079: physical addresses are [10.42.1.18:7800]
디스커버리와 통신 경로가 한 테이블에 다 보인다
name | cluster_name | ip | coord
------------------+--------------+-----------------+-------
keycloak-0-49501 | ISPN | 10.42.1.18:7800 | f
keycloak-1-26938 | ISPN | 10.42.0.16:7800 | t
name/cluster_name은 DB 디스커버리의 결과이고, ip의 :7800은
실제 통신 경로다. 7800을 막으면 이 표는 그대로 채워지면서 클러스터 뷰만
깨질 것으로 예상한다 — 다음 실험의 가설이다.
coord = t 인 keycloak-1이 코디네이터다.
배치 — 서로 다른 노드에 하나씩. PostgreSQL은 kc-lab-2에 있으므로
그 노드를 죽이면 Keycloak 하나와 DB가 동시에 사라진다.
keycloak-0 10.42.1.18 kc-lab-2
keycloak-1 10.42.0.16 kc-lab-1
postgres 10.42.1.19 kc-lab-2
issuer가 https로 발급된다 — 첫 실험(2홉 헤더 계약)의 결론이 적용된 결과다.
재수집
kubectl -n keycloak-lab get pods -o wide
kubectl -n keycloak-lab logs keycloak-0 | grep -E 'ISPN000094|ISPN000079|ISPN100000'
PG=$(kubectl -n keycloak-lab get pod -l app=postgres -o name | head -1)
kubectl -n keycloak-lab exec "$PG" -- \
psql -U keycloak -d keycloak -c "SELECT name, cluster_name, ip, coord FROM jgroups_ping ORDER BY name;"
curl -s https://auth.hyeonworks.com/realms/master/.well-known/openid-configuration | python3 -m json.tool
kubectl -n keycloak-lab top pods