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 방식

댓글

가장 많이 본 글