🔑

Vault の LTS 版がリリースされたので Vault クラスタをアップグレードしてみた

2024/04/12に公開

先日Vault 1.16がリリースされました!
https://www.hashicorp.com/blog/vault-1-16-brings-enhanced-resilience-visibility-and-more

Secrets SyncCustomizable GUI bannersEventsなどがGAされたりと色々な新しい機能が実装されているバージョンではありますが、Long Term Support(以下LTS)バージョンがリリースされた事も大きな発表かと思います。
https://www.hashicorp.com/blog/vault-enterprise-long-term-support-lts-improves-operational-efficiency

これにより、Vault Enterpriseをご利用のお客様は最大2年間同一のLTSバージョンを使い続ける事が出来る様になり、Day2運用におけるVaultのアップグレード作業負荷を軽減する事が可能になります。

という事で、検証環境のVault Enterpriseクラスタ環境をv1.15.2からv.1.16.1へアップグレードしましたので、その際のメモです。

Prerequisites

Vault Enterpriseクラスタの環境は以下の様な形で構成しています。各ノードはUbuntuの仮想マシンで構成されており、VaultはUbuntu上で稼働しています。

Primary DR secondary
node_1 xxx.xxx.xx.aaa xxx.xxx.xx.ddd
node_2 xxx.xxx.xx.bbb N/A
node_3 xxx.xxx.xx.ccc N/A
Storage backend Integrated storage Integrated storage
Seal/Unseal Shamir Shamir

アップグレードステップに関しては、ガイドに従って実施します。
https://developer.hashicorp.com/vault/docs/upgrading#enterprise-replication-installations

まずは、DR secondaryクラスタのnode_1からアップグレードを行い、その後にPrimaryクラスタのアップグレードを行います。Primaryクラスタのアップグレードに関しては、node_1がLeaderノードであるため、node_3 -> node_2 -> node_1の順番にアップグレードを行います。

アップグレードを行う際の手順は、Vault upgrade standard procedureドキュメントに沿って行います。

Prepare upgrade

アップグレード手順にも記載がありますが、まずはスナップショットを取得しておきます。本検証環境においては、あまり大きな環境では無いため、スナップショットファイルのサイズとしては、数MB程度になっています。

vault operator raft snapshot save backup_v1-15-2.snapshot

アップグレードを行う前に、Vaultサーバーのステータスを確認しておきます。vault statusコマンドは念のため全てのノードで確認しておきます。

vault status

レプリケーションのステータスを、PrimaryとDR secondaryの両方で確認しておきます。"connection_status": "connected"の確認や、last_dr_wal, last_walを確認し、DRレプリケーションが正常に動いている事を確認しておきます。

vault read -format=json sys/replication/dr/status

確認した結果、問題無さそうであれば、Vaultのアップグレード作業をしていきます。

Upgrade

アップグレード手順のRolling Upgrade Procedure for upgrading a single HA clusterに従って、実施していきます。

まずは、DR secondaryクラスタのVaultサーバーを停止します。

sudo systemctl stop vault

バイナリを変更する前に、現在のVaultのバージョンを確認します。

vault version
コマンド出力
Vault v1.15.2+ent (8b6cdc3100961bfd91cf03cfb5eaa0a2448199b5), built 2023-11-07T13:52:33Z

HashiCorpリリースサーバーからVault Enterpriseのv1.16.1をダウンロードしておきます。ダウンロードした新しいVaultバイナリで古いバイナリを置き換えます。

sudo mv vault /usr/bin/vault

バイナリを置き換えたら、Vaultバイナリのバージョンを改めて確認しておきます。

vault version
コマンド出力
Vault v1.16.1+ent (e1418439dfdd002afb6b5b4cf4bcb942f0391b19), built 2024-04-03T13:59:29Z

新しいVaultバイナリでVaultサーバーを起動します。

sudo systemctl start vault

Vaultのステータスを確認します。

vault status
コマンド出力
Key                Value
---                -----
Seal Type          shamir
Initialized        true
Sealed             true
Total Shares       1
Threshold          1
Unseal Progress    0/1
Unseal Nonce       n/a
Version            1.16.1+ent
Build Date         2024-04-03T13:59:29Z
Storage Type       raft
HA Enabled         true

Unsealキーを用いて、ストレージバックエンドをUnsealします。

vault operator unseal

再度Vaultのステータスを確認し、Unsealされた事を確認します。Sealedステータスがfalseになっている事が確認出来たら、次に進みます。

vault status
コマンド出力
Key                     Value
---                     -----
Seal Type               shamir
Initialized             true
Sealed                  false
Total Shares            1
Threshold               1
Version                 1.16.1+ent
Build Date              2024-04-03T13:59:29Z
Storage Type            raft
...

この手順を、Primaryクラスタのnode_3 -> node_2 -> node_1の順番に繰り返して、Primaryクラスタ全ノードのVaultサーバーのアップグレードを行います。
全ノードで作業が完了したら、アップグレード前に行ったVaultのステータス、レプリケーションステータスを確認し、問題無ければ完了です。

ここでは各ノード手動でVaultサーバーのアップグレードを行いましたが、ストレージバックエンドがIntegrated storageであれば、Autopilotという仕組みを利用したアップグレードも可能です。

お使いのVault Enterprise本番環境を実際にアップグレードする際は、検証環境等で事前に確認の上実施する様にして下さい。また、事前にサポートに以下の情報を共有しておくと、アップグレード作業中に何かトラブルがあった際の支援が迅速になります。詳細はVault Enterprise Support Planned Maintenance Notificationをご参照下さい。

  • Date and time of maintenance window.
  • Timezone for which the maintenance window has been scheduled.
  • Is Vault Enterprise deployed on-prem or in a cloud provider, and which one if so?
  • What is the backend storage for Vault? Integrated Storage, Consul, or something else?
  • Are proper snapshots or backups of the Vault Storage available?
  • Current Vault Version (and/or Consul Version)
  • Targeted Vault Version (and/or Consul Version)

Vault 1.16

アップグレードが完了した後、Vault UIにログインしてみると、v1.15の時と同じインターフェースの様に見受けられますが、左側のパネルにSecrets SyncやCustom UI messagesの設定のための項目が増えていたり、GAされた機能に関する項目がUIからも確認出来る様になっています。

Vault1.16 UI: Secrets Sync, Custom Messagesという新たな設定項目が追加されています

また、左側のパネルのMonitoring -> Client Countでクラスタで利用しているクライアント数を確認する事ができますが、Secrets Syncとして消費しているクライアント数も確認出来るようになっています。

Vault1.16 UI: Secrets Syncで消費しているクライアント数もUIから確認できます

参考になりそうな部分あれば、ご活用ください!

References

Discussion