통합 스토리지(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

자세한 내용은 전체 중복 영역 문서를 참고하세요.

출처: 문서

더 알아보기 (Learn more)