VaultをIntegrated Storage (raft)でセットアップ
Vaultをインストール・セットアップしてみたので、そのときのメモになります。
想定する環境
想定する環境を説明します。Vaultについては、Integrated Storage (Raft)を利用して、クラスターを構成します。
ダイアグラム
3台のサーバでクラスターを構成してみます。

サーバのOS・CPUアーキテクチャーとか
Ubuntu 20.04 LTSにインストールします。
% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.2 LTS"% arch
x86_64インストール
aptリポジトリがあるので、そこからインストールします。公式解説ページはこちら。
HashiCorp GPGキーの追加
以下のコマンドを実行して、GPGキーを追加します。
% curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
$ sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"インストール
各サーバー上で以下のコマンドを実行して、Vaultのインストールを行います。
% sudo apt-get update && sudo apt-get install vaultインストールすると導入されるもの
以下のものが導入されるようです:
vaultのバイナリーsystemd設定ファイル/opt/vaultディレクトリが作成される/opt/vault/dataはデータ格納用を意図していると思われる/opt/vault/tlsはオレオレ証明書を作成して格納しているようです
/etc/vault.dが作成される/etc/vault.d/vault.hclが標準の設定ファイルとしてデプロイされる
注意点
systemd設定ファイルが導入されますが、自動起動はしません。自動起動させるにはsudo systemctl enable vaultを自分で実施する必要があります。オレオレ証明書の中身を確認する限り、バーチャルホスト名が「Vault」の時に有効な証明書を作っているようです。
% openssl x509 -text -noout -in /opt/vault/tls/tls.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 7e:28:fd:b0:56:83:69:a9:d0:08:8c:26:f5:18:60:1e:42:17:16:02
Signature Algorithm: sha256WithRSAEncryption
Issuer: O = HashiCorp, CN = Vault
Validity
Not Before: Jun 7 23:23:17 2021 GMT
Not After : Jun 6 23:23:17 2024 GMT
Subject: O = HashiCorp, CN = Vault
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public-Key: (4096 bit)
[…snip…]セットアップ
セットアップの手順を説明していきます。
設定ファイルの置換
各サーバ上の/etc/vault.d/vault.hclを、以下の内容で上書きします。なお、下の例はvault01サーバの例です。適宜、IPアドレス・ホスト名など読み替えてください。
ui = true
disable_mlock = true
storage "raft" {
path = "/opt/vault/data"
# ノード名はサーバごとに変わりますので置き換えてください
node_id = "vault01"
# 再接続先のIPアドレスもサーバごとに変わりますので置き換えてください
retry_join {
leader_api_addr = "http://192.168.10.143:8200"
}
retry_join {
leader_api_addr = "http://192.168.10.144:8200"
}
}
# ここも変わりますので置き換えてください。
api_addr = "http://192.168.10.142:8200"
cluster_addr = "http://192.168.10.142:8201"
# HTTPS listener
listener "tcp" {
address = "0.0.0.0:8200"
cluster_address = "0.0.0.0:8201"
# SSL通信は今回は使用しない
tls_disable = true
# tls_cert_file = "/opt/vault/tls/tls.crt"
# tls_key_file = "/opt/vault/tls/tls.key"
}Vault起動 (1台目)
どこでもいいので、以下のコマンドを実行し、どこかのサーバでVaultを起動します。
% sudo systemctl start vaultvaultコマンドに接続先サーバを指示するため、VAULT_ADDR環境変数を指定します:
% export VAULT_ADDR=http://192.168.10.142:8200後は通常通り、vault operator initコマンドを実行します。すると、リカバリーキーとInitial Root Tokenが発行されます。vault operator unsealコマンドでunsealします。
Vault起動 (2台目以降)
それ以外のサーバーでは、sudo systemctl start vaultを実行してから、vault operator unsealコマンドでunsealします。
動作確認
vault statusコマンドを実行して、storage Typeがraft、HA Enabledがtrueであることを確認します。
% vault status
Key Value
--- -----
Recovery Seal Type shamir
Initialized true
Sealed false
Total Recovery Shares 5
Threshold 3
Version 1.7.3
Storage Type raft
Cluster Name vault-cluster-e2a49833
Cluster ID 08252ea2-3816-419e-7f67-2d8929c438bb
HA Enabled true
HA Cluster https://192.168.10.144:8201
HA Mode active
Active Since 2021-06-26T15:14:28.755516837Z
Raft Committed Index 31294
Raft Applied Index 31294vault operator raft list-peersコマンドを実行すると、適切にセットアップされていれば、どこかのサーバーがleaderに、その他がfollowerとして表示されます。
kazu634@vault01% vault operator raft list-peers
Node Address State Voter
---- ------- ----- -----
vault01 192.168.10.142:8201 follower true
vault02 192.168.10.143:8201 follower true
vault03 192.168.10.144:8201 leader trueIntegrated storage (raft)を利用している際に、ノードの異常などを検知して、クラスターリーダーの変更などをする機能をautopilotと呼んでいます。この機能の状態をvault operator raft autopilot stateコマンドで確認できます。Healthyがtrueであることを確認します。
kazu634@vault01% vault operator raft autopilot state
Healthy: true
Failure Tolerance: 1
Leader: vault03
Voters:
vault03
vault01
vault02
Servers:
vault01
Name: vault01
Address: 192.168.10.142:8201
Status: voter
Node Status: alive
Healthy: true
Last Contact: 3.880838102s
Last Term: 10
Last Index: 31293
vault02
Name: vault02
Address: 192.168.10.143:8201
Status: voter
Node Status: alive
Healthy: true
Last Contact: 1.404623564s
Last Term: 10
Last Index: 31293
vault03
Name: vault03
Address: 192.168.10.144:8201
Status: leader
Node Status: alive
Healthy: true
Last Contact: 0s
Last Term: 10
Last Index: 31293その他
その他のセットアップ関連です。
自動起動
sudo systemctl enable vaultコマンドを実行します。