2023. 7. 29. 23:51ㆍ볼트 (Vault)
본 문서는 아래 사이트를 참고해서 작성했습니다.
Getting Started
Vault는 토큰이나 패스워드 등 민감한 정보를 읽고 쓰는 데 사용됩니다.
예를 들어 API 서버에서 데이터베이스에 접근하고자 할 때 사용자 이름과 패스워드를 어떤 숨겨진 파일에 해당 정보를 저장해서 사용해도 되는데, 이 방법을 사용하면 관리가 어려울 뿐더러 변경 사항을 공유하지 못합니다.
당장에 사용자 정보가 변경되었을 때 이를 사용하는 모든 서버의 파일을 일일이 방문하긴 귀찮기 때문입니다.
따라서 이와 같은 민감한 정보들만을 다루는 서버를 운용하면 좋습니다.
배포는 도커 + 쿠버네티스 + Helm를 기반으로 진행됩니다.
본인이 처음이라면, 아래 포스트 정도는 읽고 오는 것을 추천합니다.
Create Namespace
먼저 vault 네임스페이스를 만듭니다.
kubectl create namespace vault
Installation
Helm은 리눅스에서의 apt 처럼 쿠버네티스의 설치 패키지 도구입니다.
실제로 어떤 어플리케이션을 설치할 때 관련된 이미지와 매니페스트(yaml)들을 상세하게 찾아서 작성해야 하는데
Helm을 사용하면 알아서 만들어 배포해주기 때문에 시간을 크게 절약할 수 있을 뿐더러 커스터마이징도 편리합니다.
Install Helm
Helm 설치는 우분투를 기준으로 작성했습니다. 다른 OS는 아래 가이드를 참고해주시길 바랍니다.
설치는 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 서버를 재배포하거나 재실행할 때 최초 인증 정보로 활용됩니다. (아래 튜토리얼을 참고하면 좋습니다.)
Initialize를 눌러 루트 토큰과 키 정보를 확인하고 Download Keys를 눌러 받은 시크릿 정보를 잘 보관합니다.
그리고 Continue to Unseal을 누르고, 일전에 다운로드 받은 파일의 keys에 있는 토큰 키를 하나씩 입력해줍니다.
이제 로그인 페이지로 이동합니다.
우리는 아직 계정을 생성하지 않았으므로 Token에 일전에 다운로드 받은 파일의 root_token을 입력하고 로그인합니다.
수고하셨습니다. 😊
'볼트 (Vault)' 카테고리의 다른 글
[Vault] Secret 만들기 (0) | 2024.04.13 |
---|---|
[Vault] 사용자 계정 만들기 (0) | 2024.04.13 |