Vault UI 503 — 서비스 등록 endpoints 비어 있음
Vault 를 쿠버네티스에 HA 로 올렸습니다. Raft 로 상태를 복제하고 파드 셋 중 하나가 Active(리더), 나머지는 Standby 로 도는 구성이라, 쓰기 요청은 Active 로 가야 합니다.
올리고 나서 웹 UI 가 503 이었습니다. 파드는 전부 정상이었습니다.
vault-0 1/1 Running (Standby)
vault-1 1/1 Running (Standby)
vault-2 1/1 Running (Active - Leader)
vault status 도 정상(Sealed: false)이고 Ingress 와 Service 도 다 있었습니다.
Endpoints가 비어 있음
Ingress 부터 따라갔습니다.
Host: vault.example.com
→ Backend: vault-active:8200
→ Endpoints: <none> ← 여기
vault-active Service 가 어떤 파드도 못 물고 있었습니다. Endpoints 가
<none> 이면 트래픽을 보낼 곳이 없으니 503 입니다.
vault-active 서비스의 라벨 기반 Active 파드 탐색
Vault Helm 차트는 여러 Service 를 만듭니다. 그중 vault-active 는 셀렉터가
vault-active: "true" 입니다. 이 라벨이 붙은 파드로만 트래픽을 보냅니다.
Vault HA 에서는 여러 파드 중 하나만 Active(리더)가 되고 나머지는 Standby 입니다.
쓰기는 Active 에서만 처리되고, UI 도 Active 에 붙어야 정상 동작합니다.
그래서 “지금 누가 Active 냐” 를 vault-active 라벨로 표시하고, Service 가 그
라벨로 리더를 찾아갑니다.
문제는 파드에 그 라벨이 하나도 안 붙어 있었다는 겁니다. 리더는 있는데
(vault-2 가 Active), 아무도 vault-active: "true" 라벨을 안 갖고 있으니
Service 셀렉터가 매칭에 실패하고 Endpoints 가 빕니다.
라벨을 붙이는 건 service_registration
그 라벨은 사람이 붙이는 게 아니라 Vault 가 자동으로 붙입니다. 그 동작을 켜는
설정이 service_registration "kubernetes" {} 입니다.
storage "raft" {
path = "/vault/data"
}
service_registration "kubernetes" {} # 이게 빠져 있었다
이 설정이 있으면 Vault 파드가 Raft 선거로 Active/Standby 가 정해질 때마다
Kubernetes API 를 호출해 자기 파드 라벨을 갱신합니다. Active 파드는
vault-active: "true", Standby 는 false 로.
이게 빠져 있으면 Vault 자체는 멀쩡히 돌아갑니다. 선거도 되고 리더도 뽑힙니다.
다만 그 사실이 파드 라벨에 안 적히니, 라벨로 리더를 찾는 vault-active
Service 만 길을 잃습니다. 파드가 다 Running 인데 503 이 나는 이유입니다.
Helm values 에서 config 에 넣습니다.
server:
ha:
enabled: true
raft:
enabled: true
config: |
ui = true
storage "raft" { path = "/vault/data" }
service_registration "kubernetes" {}
같은 증상을 구분하는 신호
파드는 정상인데 503 이면 Service 의 Endpoints 부터 봅니다.
kubectl get endpoints vault-active -n vault
<none> 이면 셀렉터와 파드 라벨이 안 맞는 겁니다. 파드가 죽어서가 아니라,
Service 가 파드를 못 찾는 겁니다. 이 둘은 증상이 같아 보여도(둘 다 503)
확인하는 곳이 다릅니다.
댓글 0