k3s secrets-encrypt
K3sは、保存時のシークレット暗号化を有効にすることをサポートしています。詳細については、Secrets Encryptionを参照してください。
シークレット暗号化ツール
v1.21.8+k3s1から利用可能
K3sには、以下の自動制御を可能にするCLIツールsecrets-encrypt
が含まれています:
- シークレット暗号化の無効化/有効化
- 新しい暗号化キーの追加
- 暗号化キーのローテーションと削除
- シークレットの再暗号化
暗号化キーのローテーションの適切な手順に従わないと、クラスターが永久に破損する可能性があります。慎重に進めてください。
新しい暗号化キーのローテーション(実験的)
v1.28.1+k3s1から利用可能。この新しいバージョンのツールは、現在ベータ版のK8s 自動設定リロードを利用しています。GAはv1.29.0で予定されています。
古いリリースについては、Encryption Key Rotation Classicを参照してください。
- Single-Server
- High-Availability
シングルサーバークラスターでシークレット暗号化キーをローテーションするには:
-
フラグ
--secrets-encryption
を使用してK3sサーバーを起動します。注記暗号化なしでK3sを起動し、後で有効にすることは現在サポートされていません。
-
シークレット暗号化キーをローテーションします。
k3s secrets-encrypt rotate-keys
-
再暗号化が完了するのを待ちます。サーバーログを監視するか、以下を待ちます:
$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: reencrypt_finished
HAセットアップでシークレット暗号化キーをローテーションするには:
-
すべてのK3sサーバーを
--secrets-encryption
フラグで起動します。簡略化のため、サーバーをS1、S2、S3と呼びます。注記暗号化なしでK3sを起動し、後で有効にすることは現在サポートされていません。
-
S1でシークレット暗号化キーをローテーションします。
k3s secrets-encrypt rotate-keys
-
再暗号化が完了するのを待ちます。サーバーログを監視するか、以下を待ちます:
$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: reencrypt_finished備考K3sは1秒あたり約5つのシークレットを再暗号化します。シークレットの数が多いクラスターでは、再暗号化に数分かかることがあります。サーバーログで進行状況を確認できます。
-
同じ引数でS1のK3sを再起動します。K3sをサービスとして実行している場合:
# systemdを使用している場合
systemctl restart k3s
# openrcを使用している場合
rc-service k3s restart -
S1が起動したら、S2とS3のK3sを再起動します。
暗号化キーのローテーションクラシック
- Single-Server
- High-Availability
シングルサーバークラスターでシークレット暗号化キーをローテーションするには:
-
フラグ
--secrets-encryption
を使用してK3sサーバーを起動します。注記暗号化なしでK3sを起動し、後で有効にすることは現在サポートされていません。
-
準備します。
k3s secrets-encrypt prepare
-
同じ引数でK3sサーバーを再起動します。K3sをサービスとして実行している場合:
# systemdを使用している場合
systemctl restart k3s
# openrcを使用している場合
rc-service k3s restart -
ローテーションします。
k3s secrets-encrypt rotate
-
同じ引数でK3sサーバー を再起動します。
-
再暗号化します。
備考K3sは1秒あたり約5つのシークレットを再暗号化します。
シークレットの数が多いクラスターでは、再暗号化に数分かかることがあります。k3s secrets-encrypt reencrypt
埋め込みDBと外部DBクラスターの両方で手順は同じです。
HAセットアップでシークレット暗号化キーをローテーションするには:
-
すべてのK3sサーバーを
--secrets-encryption
フラグで起動します。簡略化のため、サーバーをS1、S2、S3と呼びます。Notes- 暗号化なしでK3sを起動し、後で有効にすることは現在サポートされていません。
- 必須ではありませんが、
secrets-encrypt
コマンドを実行するサーバーノードを1つ選ぶことをお勧めします。
-
S1で準備します。
k3s secrets-encrypt prepare
-
同じ引数でS1を再起動します。K3sをサービスとして実行している場合:
# systemdを使用している場合
systemctl restart k3s
# openrcを使用している場合
rc-service k3s restart -
S1が起動したら、S2とS3を再起動します。
-
S1でローテーションします 。
k3s secrets-encrypt rotate
-
同じ引数でS1を再起動します。
-
S1が起動したら、S2とS3を再起動します。
-
S1で再暗号化します。
備考K3sは1秒あたり約5つのシークレットを再暗号化します。
シークレットの数が多いクラスターでは、再暗号化に数分かかることがあります。k3s secrets-encrypt reencrypt
-
同じ引数でS1を再起動します。
-
S1が起動したら、S2とS3を再起動します。
シークレット暗号化の無効化/再有効化
- Single-Server
- High-Availability
--secrets-encryption
フラグを使用してサーバーを起動した後、シークレット暗号化を無効にすることができます。
シングルノードクラスターでシークレット暗号化を無効にするには:
-
無効化します。
k3s secrets-encrypt disable
-
同じ引数でK3sサーバーを再起動します。K3sをサービスとして実行している場合:
# systemdを使用している場合
systemctl restart k3s
# openrcを使用している場合
rc-service k3s restart -
フラグを使用して再暗号化します。
k3s secrets-encrypt reencrypt --force --skip
シングルノードクラスターでシークレット暗号化を再有 効化するには:
-
有効化します。
k3s secrets-encrypt enable
-
同じ引数でK3sサーバーを再起動します。
-
フラグを使用して再暗号化します。
k3s secrets-encrypt reencrypt --force --skip
--secrets-encryption
フラグを使用してHAクラスターを起動した後、シークレット暗号化を無効にすることができます。
必須ではありませんが、secrets-encrypt
コマンドを実行するサーバーノードを1つ選ぶことをお勧めします。
簡略化のため、このガイドで使用する3つのサーバーをS1、S2、S3と呼びます。
HAクラスターでシークレット暗号化を無効にするには:
-
S1で無効化します。
k3s secrets-encrypt disable
-
同じ引数でS1を再起動します。K3sをサービスとして実行している場合:
# systemdを使用している場合
systemctl restart k3s
# openrcを使用している場合
rc-service k3s restart -
S1が起動したら、S2とS3を再起動します。
-
S1でフラグを使用して再暗号化します。
k3s secrets-encrypt reencrypt --force --skip
HAクラスターでシークレット暗号化を再有効化するには:
-
S1で有効化します。
k3s secrets-encrypt enable
-
同じ引数でS1を再起動します。
-
S1が起動したら、S2とS3を再起動します。
-
S1でフラグを使用して再暗号化します。
k3s secrets-encrypt reencrypt --force --skip
シークレット暗号化のステータス
secrets-encryptツールには、ノード上のシークレット暗号化の現在のステータスに関する情報を表示するstatus
コマンドが含まれています。
シングルサーバーノードでのコマンドの例:
$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: start
Server Encryption Hashes: All hashes match
Active Key Type Name
------ -------- ----
* AES-CBC aescbckey
HAクラスターでの別の例、キーをローテーションした後、サーバーを再起動する前:
$ k3s secrets-encrypt status
Encryption Status: Enabled
Current Rotation Stage: rotate
Server Encryption Hashes: hash does not match between node-1 and node-2
Active Key Type Name
------ -------- ----
* AES-CBC aescbckey-2021-12-10T22:54:38Z
AES-CBC aescbckey
各セクションの詳細は以下の通りです:
- Encryption Status: ノード上でシークレット暗号化が無効か有効かを表示します。
- Current Rotation Stage: ノード上の現在のローテーションステージを示します。
ステージは:start
、prepare
、rotate
、reencrypt_request
、reencrypt_active
、reencrypt_finished
です。 - Server Encryption Hashes: HAクラスターに役立ちます。これは、すべてのサーバーがローカルファイルと同じステージにあるかどうかを示します。次のステージに進む前にサーバーの再起動が必要かどうかを確認するために使用できます。上記のHAの例では、node-1とnode-2のハッシュが異なり、現在同じ暗号化設定を持っていないことを示しています。サーバーを再起動すると、設定が同期されます。
- Key Table: ノード上で見つかったシークレ ット暗号化キーに関する情報を要約します。
- Active: "*"は、現在シークレット暗号化に使用されているキーを示します。アクティブなキーは、Kubernetesが新しいシークレットを暗号化するために使用します。
- Key Type: このツールを使用するすべてのキーは
AES-CBC
タイプです。詳細はこちらを参照してください。 - Name: 暗号化キーの名前。