k3s 証明書
クライアントおよびサーバー証明書
K3sのクライアントおよびサーバー証明書は、発行日から365日間有効です。期限切れの証明書や、期限切れまで90日以内の証明書は、K3sが起動するたびに自動的に更新されます。
クライアントおよびサーバー証明書のローテーション
クライアントおよびサーバー証明書を手動でローテーションするには、k3s certificate rotate
サブコマンドを使用します:
# K3sを停止
systemctl stop k3s
# 証明書をローテーション
k3s certificate rotate
# K3sを起動
systemctl start k3s
証明書の名前を指定することで、個別またはリストの証明書をローテーションできます:
k3s certificate rotate --service <SERVICE>,<SERVICE>
以下の証明書がローテーション可能です:admin
, api-server
, controller-manager
, scheduler
, k3s-controller
, k3s-server
, cloud-controller
, etcd
, auth-proxy
, kubelet
, kube-proxy
。
証明書認証局 (CA) 証明書
Kubernetesの適切な動作には、いくつかのCA証明書が必要です。KubernetesがCA証明書をどのように使用するかについての詳細は、KubernetesのPKI証明書と要件ドキュメントを参照してください。
デフォルトでは、K3sは最初のサーバーノードの起動時に自己署名のCA証明書を生成します。これらのCA証明書は発行日から10年間有効で、自動的に更新されません。
権威あるCA証明書とキーは、データストアのブートストラップキー内に保存され、サーバートークンをPBKDF2パスフレーズとして使用してAES256-GCMおよびHMAC-SHA1で暗号化されます。 CA証明書とキーのコピーは、K3sサーバーの起動時にディスクに抽出されます。 任意のサーバーは、クラスターに参加するノードのリーフ証明書を生成でき、Kubernetesの証明書APIコントローラーはランタイムで追加の証明書を発行することができます。
CA証明書とキーをローテーションするには、k3s certificate rotate-ca
コマンドを使用します。
このコマンドは、更新された証明書とキーが使用可能であることを確認するための整合性チェックを実行します。
更新されたデータが受け入れ可能であれば、データストアの暗号化されたブートストラップキーが更新され、次回K3sが起動する際に新しい証明書とキーが使用され ます。
証明書とキーの検証中に問題が発生した場合、システムログにエラーが報告され、操作は変更なしでキャンセルされます。
k3s certificate rotate-ca
コマンドのサポートおよび外部CAによって署名されたCA証明書の使用は、2023-02リリース(v1.26.2+k3s1、v1.25.7+k3s1、v1.24.11+k3s1、v1.23.17+k3s1)から利用可能です。
カスタムCA証明書の使用
クラスターの最初のサーバーの初回起動時に正しい場所にCA証明書とキーが見つかった場合、CA証明書の自動生成はバイパスされます。
適切な証明書とキーを事前に作成するためのサンプルスクリプトは、K3sリポジトリのcontrib/util/generate-custom-ca-certs.sh
にあります。
このスクリプトは、K3sを初めて起動する前に実行する必要があり、共通のルートおよび中間CA証明書によって署名された完全なリーフCA証明書セットを作成します。
既存のルートまたは中間CAがある場合、このスクリプトを使用して(または開始点として使用して)既存の権限にルート化されたPKIを持つK3sクラスターをプロビジョニングするための正しいCA証明書を作成できます。
カスタム証明書認証局ファイルは/var/lib/rancher/k3s/server/tls
に配置する必要があります。以下のファイルが必要です:
server-ca.crt
server-ca.key
client-ca.crt
client-ca.key
request-header-ca.crt
request-header-ca.key
// 注:etcdファイルは、埋め込みetcdが使用されていない場合でも必要です。etcd/peer-ca.crt
etcd/peer-ca.key
etcd/server-ca.crt
etcd/server-ca.key
// 注:これはサービスアカウントトークンに署名するために使用される秘密鍵です。対応する証明書はありません。service.key
カスタムCAトポロジー
カスタムCA証明書は、以下のトポロジーに従う必要があります:
サンプルスクリプトの使用
サンプルスクリプトを使用して既存のルートCAでクラスターCA証明書に署名する場合、スクリプトを実行する前にターゲットディレクトリにルートおよび中間ファイルを配置する必要があります。 ファイルが存在しない場合、スクリプトは新しいルートおよび中間CA証明書を作成します。
既存のルートCA証明書のみを使用する場合、以下のファイルを提供してください:
root-ca.pem
root-ca.key
既存のルートおよび中間CA証明書を使用する場合、以下のファイルを提供してください:
root-ca.pem
intermediate-ca.pem
intermediate-ca.key
K3sを起動する前にカスタム証明書とキーを生成するためにサンプルスクリプトを使用するには、以下のコマンドを実行します:
# 証明書生成のためのターゲットディレクトリを作成
mkdir -p /var/lib/rancher/k3s/server/tls
# ルートCA証明書と中間CA証明書+キーをスクリプトの正しい場所にコピー
# この例では、既存のルートおよび中間CAファイルが/etc/sslにあると仮定します。
# 既存のルートおよび/または中間CAがない場合、スクリプトはそれらを生成します。
cp /etc/ssl/certs/root-ca.pem /etc/ssl/certs/intermediate-ca.pem /etc/ssl/private/intermediate-ca.key /var/lib/rancher/k3s/server/tls
# カスタムCA証明書とキーを生成
curl -sL https://github.com/k3s-io/k3s/raw/master/contrib/util/generate-custom-ca-certs.sh | bash -
コマンドが正常に完了した場合、K3sを初めてインストールおよび/または起動できます。 スクリプトがルートおよび/または中間CAファイルを生成した場合、これらのファイルをバックアップして、後でCA証明書をローテーションする必要がある場合に再利用できるようにしてください。