통합 스토리지(Raft)를 사용한 고가용성 Vault Enterprise 클러스터
통합 스토리지(Raft)를 사용한 고가용성 Vault Enterprise 클러스터
중요 참고: 이 차트는 Helm 2와 호환되지 않습니다. 이 차트에는 Helm 3.6+를 사용하세요.
통합 스토리지(raft)를 사용해 고가용성 Vault Enterprise 클러스터를 배포하는 방법을 설명합니다.
본문
통합 스토리지로 배포하기
팁: 전체 라이선스 구성 옵션은 Running Vault Enterprise를 참고하세요.
1단계: 클러스터 배포
server.ha.raft.enabled값을 사용해 통합 스토리지를 활성화합니다. 파드가 Helm 차트가 제공하는 내부 서비스를 사용해 직접 통신할 수 있도록 구성해야 합니다.
$ helm install vault hashicorp/vault \
--set='server.image.repository=hashicorp/vault-enterprise' \
--set='server.image.tag=2.0.4-ent' \
--set='server.ha.enabled=true' \
--set='server.ha.raft.enabled=true'
- vault-0 파드를 초기화합니다.
$ kubectl exec -ti vault-0 -- vault operator init
- vault-0 파드를 봉인 해제합니다.
$ kubectl exec -ti vault-0 -- vault operator unseal
- 나머지 파드를 Raft 클러스터에 조인합니다. 예를 들어 vault-1을 클러스터에 조인하려면:
$ kubectl exec -ti vault-1 -- vault operator raft join http://vault-0.vault-internal:8200
- 나머지 파드를 클러스터에서 봉인 해제합니다. 예를 들어 vault-1을 클러스터에서 봉인 해제하려면:
$ kubectl exec -ti vault-1 -- vault operator unseal
2단계: 배포 검증
파드에 연결해 활성 피어를 나열하면 Raft 클러스터가 성공적으로 초기화되었는지 확인할 수 있습니다.
- vault-0 파드에서 루트 토큰으로 로그인합니다.
$ kubectl exec -ti vault-0 -- vault login
- 모든 raft 피어를 나열합니다.
$ kubectl exec -ti vault-0 -- vault operator raft list-peers
Node Address State Voter
---- ------- ----- -----
a1799962-8711-7f28-23f0-cea05c8a527d vault-0.vault-internal:8201 leader true
e6876c97-aaaa-a92e-b99a-0aafab105745 vault-1.vault-internal:8201 follower true
4b5d7383-ff31-44df-e008-6a606828823b vault-2.vault-internal:8201 follower true
중복 영역 설정하기
Vault Enterprise 라이선스 필요.
Kubernetes 1.35+의 Vault Enterprise 배포에서는 가용 영역 간 가용성과 장애 허용을 개선하기 위해 중복 영역(redundancy zones)을 활성화할 수 있습니다.
요구사항
- Kubernetes 1.35 이상
topology.kubernetes.io/zone으로 라벨이 지정된 노드- Vault Enterprise 라이선스
옵션 1: 서버 플래그로 Vault 구성
Helm 설치 중에 명시적 서버 플래그를 제공할 수 있습니다.
$ helm install vault hashicorp/vault \
--set='server.image.repository=hashicorp/vault-enterprise' \
--set='server.image.tag=2.0.4-ent' \
--set='server.ha.enabled=true' \
--set='server.ha.replicas=6' \
--set='server.ha.raft.enabled=true' \
--set='server.ha.raft.redundancyZones.enabled=true' \
--set-string='server.ha.raft.config=
ui = true
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
storage "raft" {
path = "/vault/data"
autopilot_redundancy_zone = "VAULT_REDUNDANCY_ZONE"
}
service_registration "kubernetes" {}' \
--set='server.topologySpreadConstraints[0].maxSkew=1' \
--set='server.topologySpreadConstraints[0].topologyKey=topology.kubernetes.io/zone' \
--set='server.topologySpreadConstraints[0].whenUnsatisfiable=DoNotSchedule'
옵션 2: values 파일로 Vault 구성
YAML values 파일을 만듭니다.
# values.yaml
server:
image:
repository: hashicorp/vault-enterprise
tag: 2.0.4-ent
ha:
enabled: true
replicas: 6
# 2 voting nodes per zone across 3 zones
raft:
enabled: true
redundancyZones:
enabled: true
config: |
ui = true
listener "tcp" {
tls_disable = 1
address = "[::]:8200"
cluster_address = "[::]:8201"
}
storage "raft" {
path = "/vault/data"
autopilot_redundancy_zone = "VAULT_REDUNDANCY_ZONE"
}
service_registration "kubernetes" {}
topologySpreadConstraints:
- maxSkew: 1
topologyKey: topology.kubernetes.io/zone
whenUnsatisfiable: DoNotSchedule
Helm 설치 중에 values 파일을 참조합니다.
$ helm install vault hashicorp/vault -f values.yaml
중복 구성 초기화 및 검증
설치와 중복 영역 구성을 검증하려면 Vault를 초기화·봉인 해제해야 합니다.
- 봉인 해제 키를 생성하도록 Vault를 초기화합니다.
$ kubectl exec -ti vault-0 -- vault operator init
- 첫 번째 파드를 봉인 해제합니다.
$ kubectl exec -ti vault-0 -- vault operator unseal
- 나머지 파드를 클러스터에 조인·봉인 해제합니다.
$ for i in {1..5}; do
kubectl exec -ti vault-$i -- vault operator raft join http://vault-0.vault-internal:8200
kubectl exec -ti vault-$i -- vault operator unseal
done
- 파드 영역 분포를 확인합니다.
$ kubectl get pods -l app.kubernetes.io/name=vault \
-o custom-columns=NAME:.metadata.name,ZONE:.metadata.labels.'topology\.kubernetes\.io/zone'
- raft 피어를 확인합니다.
$ kubectl exec -ti vault-0 -- vault operator raft list-peers
- Autopilot 상태를 확인합니다(영역별 투표/비투표 상태 표시).
$ kubectl exec -ti vault-0 -- vault operator raft autopilot state
자세한 내용은 전체 중복 영역 문서를 참고하세요.
출처: 문서