[Vault] Helm를 이용해 Vault 배포하기

2023. 7. 29. 23:51볼트 (Vault)

본 문서는 아래 사이트를 참고해서 작성했습니다.

 

Vault on Kubernetes deployment guide | Vault | HashiCorp Developer

Describes the required steps to install and configure a single HashiCorp Vault cluster onto a Kubernetes cluster as defined in the Vault Reference Architecture.

developer.hashicorp.com

 

 


Getting Started

 

Vault는 토큰이나 패스워드 등 민감한 정보를 읽고 쓰는 데 사용됩니다.

 

출처 : https://developer.hashicorp.com/vault/docs/what-is-vault

 

예를 들어 API 서버에서 데이터베이스에 접근하고자 할 때 사용자 이름과 패스워드를 어떤 숨겨진 파일에 해당 정보를 저장해서 사용해도 되는데, 이 방법을 사용하면 관리가 어려울 뿐더러 변경 사항을 공유하지 못합니다.

당장에 사용자 정보가 변경되었을 때 이를 사용하는 모든 서버의 파일을 일일이 방문하긴 귀찮기 때문입니다.

 

따라서 이와 같은 민감한 정보들만을 다루는 서버를 운용하면 좋습니다.

 

배포는 도커 + 쿠버네티스 + Helm를 기반으로 진행됩니다.

본인이 처음이라면, 아래 포스트 정도는 읽고 오는 것을 추천합니다.

 

[Kubernetes] 1. 컨테이너 생성 및 구동

시작하면서 쿠버네티스는 어플리케이션을 생성 - 배포 - 관리하는 플랫폼입니다. 먼저 컨셉을 이해하기 전에 어떻게 이게 가능할 것인지 스스로에게 질문을 하면 좋은데, 만약 우리가 신나게 프

oimbook.tistory.com

 

[Kubernetes] 2. 클러스터 배포하기

시작하면서 쿠버네티스 클러스터(cluster)를 배포하는 방법은 여러 가지가 있습니다. 사실 범용 서비스이자 어플리케이션 기반이니만큼 클라우드 서비스를 사용하는 게 좋습니다. (AWS, Azure...) 하

oimbook.tistory.com

 

 

 


Create Namespace

 

먼저 vault 네임스페이스를 만듭니다.

kubectl create namespace vault

 

 

 

 


Installation

 

Helm은 리눅스에서의 apt 처럼 쿠버네티스의 설치 패키지 도구입니다.

실제로 어떤 어플리케이션을 설치할 때 관련된 이미지와 매니페스트(yaml)들을 상세하게 찾아서 작성해야 하는데

Helm을 사용하면 알아서 만들어 배포해주기 때문에 시간을 크게 절약할 수 있을 뿐더러 커스터마이징도 편리합니다.

 

Install Helm

Helm 설치는 우분투를 기준으로 작성했습니다. 다른 OS는 아래 가이드를 참고해주시길 바랍니다.

 

Installing Helm

Learn how to install and get running with Helm.

helm.sh

 

설치는 apt를 사용합니다. 아래 순서대로 실행해주세요.

curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt update
sudo apt install helm

 

설치가 끝났으면 Helm 버전을 확인해봅니다.

sudo apt-get install helm
더보기

version.BuildInfo{Version:"v3.12.1", GitCommit:"f32a527a060157990e2aa86bf45010dfb3cc8b8d", GitTreeState:"clean", GoVersion:"go1.20.4"}

 

 

Deploy Vault

Helm 레포지토리에 Vault를 등록합니다.

helm repo add hashicorp https://helm.releases.hashicorp.com
더보기

"hashicorp" has been added to your repositories

 

등록된 Vault를 확인해봅니다.

helm search repo hashicorp/vault
더보기

NAME                             CHART VERSION APP VERSION DESCRIPTION                          
hashicorp/vault                  0.25.0        1.14.0      Official HashiCorp Vault Chart       
hashicorp/vault-secrets-operator 0.1.0         0.1.0       Official Vault Secrets Operator Chart

 

결과를 보면 vault 말고도 vault-secrets-operator를 확인할 수 있는데, 이는 Vault와 쿠버네티스 간 데이터를 동기화해주는 어플리케이션으로 사용자가 특별한 로직 없이 쉽게 동기화된 데이터를 주고 받을 수 있도록 해줍니다.

(자세한 설명은 여기를 방문해주세요)

 

여기까지 왔으면 install 명령어로 배포할 수 있습니다.

먼저 --dry-run 옵션을 넣어서 배포가 잘 되는 지 확인해봅니다.

(--dry-run 옵션은 실제로 배포하는 것이 아닌 가상으로 배포해줍니다)

helm install vault hashicorp/vault --namespace vault --dry-run
더보기

... manifests

 

NOTES:
Thank you for installing HashiCorp Vault!

Now that you have deployed Vault, you should look over the docs on using
Vault with Kubernetes available here:

https://www.vaultproject.io/docs/


Your release is named vault. To learn more about the release, try:

  $ helm status vault
  $ helm get manifest vault

 

본인이 오래된 Helm 버전을 사용하고 있다면 Vault Change Log를 보고 릴리즈 버전을 선택하는 것을 추천합니다.

참고로 vault 0.20.0 버전부터는 Helm 3.6+을 써야한다고 합니다.

 

아래 명령어를 실행하면 설치 가능한 vault 버전들을 알 수 있습니다.

helm search repo hashicorp/vault --versions
더보기

NAME                             CHART VERSION APP VERSION DESCRIPTION                               
hashicorp/vault                  0.25.0        1.14.0      Official HashiCorp Vault Chart            
hashicorp/vault                  0.24.1        1.13.1      Official HashiCorp Vault Chart            
hashicorp/vault                  0.24.0        1.13.1      Official HashiCorp Vault Chart            
hashicorp/vault                  0.23.0        1.12.1      Official HashiCorp Vault Chart            
hashicorp/vault                  0.22.1        1.12.0      Official HashiCorp Vault Chart            
hashicorp/vault                  0.22.0        1.11.3      Official HashiCorp Vault Chart 

...

 

이제 vault를 배포해봅니다.

helm install vault hashicorp/vault --namespace vault --version 0.25.0

 

일전에 --dry-run 한 결과와 동일하다면 성공입니다.

 

pod을 확인해보면

kubectl get pods --namespace=vault
더보기

NAME                                    READY   STATUS    RESTARTS   AGE
vault-0                                 0/1     Running   0          58s
vault-agent-injector-67c48f8f4c-wbt5k   1/1     Running   0          58s

 

처럼 배포되어 있음을 확인할 수 있습니다.

다만 시스템 사양에 따라 배포 후 바로 확인하면 ContainerCreating 상태일 수 있는데 잠시 기다리면 Running 상태가 됩니다.

 

 

Vault Agent Sidecar Injector

공유 메모리에 vault 자원을 올려놓아서, 컨테이너들이 vault 데이터를 쉽게 접근할 수 있도록 해줍니다.

여담으로 sidecar는 메인 서버가 있는 pod과 독립적으로 존재하면서, 해당 메인 서버를 보조하는 pod을 의미합니다.

(말 그대로 조수 역할, 자세한 내용은 여기를 방문하세요)


Helm을 이용해 설치했을 때 Vault와 함께 자동으로 배포해줍니다.

 

 

 

 

 

 


Glance of Vault

 

쿠버네티스 명령어로 포트포워딩을 하면 ui를 방문할 수 있습니다. (Vault의 기본 포트는 8200입니다)

kubectl port-forward vault-0 8200:8200 --namespace=vault &

 

http://localhost:8200/ui 를 방문하면 다음과 같이 초기화 페이지가 등장합니다.

 

Vault 서버 자체를 실행하는 키를 생성합니다.

이는 Vault 서버를 재배포하거나 재실행할 때 최초 인증 정보로 활용됩니다. (아래 튜토리얼을 참고하면 좋습니다.)

 

Web UI | Vault | HashiCorp Developer

Vault comes with support for a user-friendly and functional web UI out of the box. Learn how to enable and launch the Vault UI.

developer.hashicorp.com

 

Initialize를 눌러 루트 토큰과 키 정보를 확인하고 Download Keys를 눌러 받은 시크릿 정보를 잘 보관합니다.

그리고 Continue to Unseal을 누르고, 일전에 다운로드 받은 파일의 keys에 있는 토큰 키를 하나씩 입력해줍니다.

 

이제 로그인 페이지로 이동합니다.

우리는 아직 계정을 생성하지 않았으므로 Token에 일전에 다운로드 받은 파일의 root_token을 입력하고 로그인합니다.

 

 

수고하셨습니다. 😊

 

'볼트 (Vault)' 카테고리의 다른 글

[Vault] Secret 만들기  (0) 2024.04.13
[Vault] 사용자 계정 만들기  (0) 2024.04.13