k8s EKS + Vault Raft 장애 복구 가이드
# 🔐 EKS 환경에서 Vault 장아 복구, 어떻게 하면 될까?
Vault를 Raft 스토리지 기반으로 Kubernetes(EKS)에 배포해 운영 중이라면 가장 걱정되는 순간 중 하나는 바로 이것입니다:
> ❗ "Pod도 죽고 PVC도 남아가라면 Vault는 어떻게 복구해?"
이번 포스트에서는 실제로 발생할 수 있는 **Vault Pod + PVC 삭제 시나리오**에서
**어떻게 빠른 속도로 Raft 클러스터를 복구할 수 있는지**
실제 테스트 기반으로 정리해보고자 합니다.
---
## 평상 경우 환경
- HashiCorp Vault 1.19+
- Helm chart로 Kubernetes(EKS) 배포
- Raft 스토리지 백엔드 (PVC = EBS)
- Vault 3개 Pod (`vault-0`, `vault-1`, `vault-2`)
- EKS NodeGroup은 us-west-1 AZ에만 존재
---
## 협갱 상황: vault-0 Pod + PVC 삭제
```bash
kubectl delete pod vault-0 -n vault
kubectl delete pvc data-vault-0 -n vault
```
StatefulSet이 `vault-0`을 다시 생성하지만,
PVC가 삭제되어 Vault는 `Initialized: false` 상황이 되고, unseal도 안 됩니다.
---
## ❗️ 협갱시 가장 크게 잘못 하는 것
```bash
vault operator init
```
❌ 절대 실행하면 안 됩니다!
이 명령은 **새로운 Vault 클러스터를 생성**하기 때문에
기존 Vault들과 split-brain 발생 가능성이 있습니다.
---
## ✅ 올바른 복구 시나리오
### 1. 다른 Vault에서 vault-0에 join 요청
```bash
vault operator raft join http://vault-0.vault-internal:8200
```
HTTPS화 환경일 경우:
```bash
vault operator raft join -tls-skip-verify https://vault-0.vault-internal:8200
```
### 2. vault-0 상황 확인
```bash
vault status
```
- `Initialized: true` 이어야 클러스터에 정상 포함된 상황
### 3. vault-0 unseal (Auto-Unseal 무용일 경우)
```bash
vault operator unseal
```
최초가지 받은 unseal key 중 3개 이상 입력
### 4. 클러스터 상황 확인
```bash
vault operator raft list-peers
```
`vault-0`이 `follower`로 등록되어 있다면 복구 완료! 🎉
---
## 확인을 위한 추가 명령어
### vault-0이 Initialized: false 상황이면?
```bash
curl -s http://127.0.0.1:8200/v1/sys/init
```
```json
{ "initialized": false }
```
### vault-0 로그 확인
```bash
kubectl logs vault-0 -n vault
```
- `successfully joined raft cluster` 메시지가 보이면 성공
---
## 훈원 보고 구조
| 항목 | 설명 |
|------|------|
| ✅ Auto-Unseal 구성 | AWS KMS 등 이용으로 unseal 자동화 |
| ✅ Raft 스네프샵 바크업 | `vault operator raft snapshot save` |
| ✅ PodDisruptionBudget | 리더 Pod 유지 |
| ✅ EBS volumeBindingMode | `WaitForFirstConsumer` |
| ✅ AZ 분성 | 3AZ + PodAntiAffinity 구성 권장 |
---
## ✈️ 복구 TL;DR
1. vault-0 Pod + PVC 삭제
2. 다른 Pod에서 `raft join` 진행
3. vault-0에서 unseal (필요시)
4. `raft list-peers`로 클러스터 정상 확인
---
## 헤가면: 실월화 테스트가 가장 큰 복구로비다
Vault는 강력하지만, Raft + EBS 구조에서는
AZ, PVC, Pod 스케줄링 이슈가 가까운것과 여분시 많이 연결됩니다.
여러분도 복구 방식을 지정하기 전에
모음 자세한 테스트를 가졌다면 더 방해되는 것이 없을 것입니다! 💪
---
> 운영에서 일어날 수 있는 것은 사전에 일어날 수 있게 해보자.
> — 지리적 DevOps 방식
댓글
댓글 쓰기