この文書は自動機械翻訳技術を使用して翻訳されています。 正確な翻訳を提供するように努めておりますが、翻訳された内容の完全性、正確性、信頼性については一切保証いたしません。 相違がある場合は、元の英語版 英語 が優先され、正式なテキストとなります。

k3sトークン

K3sは、ノード参加プロセスを保護し、データストアに保存される機密情報を暗号化するためにトークンを使用します。トークンは、参加するノードに対してクラスターを認証し、同時にノードをクラスターに認証します。

トークン形式

K3sトークンは、安全な形式または短い形式のいずれかで指定できます。安全な形式が推奨されます。これは、クライアントが資格情報を送信する前に、参加するクラスターのアイデンティティを認証できるようにするためです。

セキュリティ

安全なトークン形式(時折「フル」トークンと呼ばれる)は、以下の部分を含みます:

<prefix><cluster CA hash>::<credentials>

  • prefix: トークン形式を識別する固定の`K10`プレフィックス

  • cluster CA hash:参加ノードにサーバーを認証するために使用されるクラスターのサーバーCA証明書のハッシュ。

    • 自己署名CA証明書の場合、これはディスクに保存されたPEM形式の証明書のSHA256ハッシュ値です。

    • カスタムCA証明書の場合、これはルート証明書のDERエンコーディングのSHA256ハッシュ値であり、一般的に証明書フィンガープリントとして知られています。

  • credentials:参加ノードをクラスターに認証するために使用されるユーザー名とパスワード、またはベアラートークン。

TLSブートストラッピング

安全なトークンが指定されている場合、参加ノードは資格情報を送信する前に接続しているサーバーのアイデンティティを検証するために以下の手順を実行します:

  1. TLS検証が無効になっている場合、参加するサーバーの`/cacerts`からCAバンドルをダウンロードします。

  2. 上記のようにCA証明書のSHA256ハッシュを計算します。

  3. 計算されたSHA256ハッシュをトークンのハッシュと比較します。

  4. ハッシュが一致する場合、サーバーによって提示された証明書がサーバーのCAバンドルによって検証できることを確認します。

  5. サーバー証明書が有効な場合、トークンの種類に応じて基本認証またはベアラートークン認証を使用してクラスターに参加するための資格情報を提示します。

短整数

短いトークン形式には、クラスターに参加するノードを認証するために使用されるパスワードまたはベアラートークンのみが含まれます。

短いトークンが使用される場合、参加ノードはサーバーによって提示されたCAバンドルを暗黙的に信頼します。TLSブートストラッピングプロセスのステップ2-4はスキップされます。初期接続はhttps://en.wikipedia.org/wiki/Man-in-the-middle_attack[中間者]攻撃に対して脆弱である可能性があります。

トークンの種類

K3sは3種類のトークンをサポートしています。デフォルトではサーバートークンのみが利用可能であり、追加のトークンタイプは管理者によって構成または作成する必要があります。

タイプ CLIオプション 環境変数

サーバ

--token

K3S_TOKEN

エージェント

--agent-token

K3S_AGENT_TOKEN

ブートストラップ

n/a

n/a

サーバ

クラスター内の最初のサーバーを起動する際にトークンが提供されない場合、ランダムなパスワードで1つが作成されます。サーバートークンは常に`/var/lib/rancher/k3s/server/token`に安全な形式で書き込まれます。

サーバートークンは、サーバーノードとエージェントノードの両方をクラスターに参加させるために使用できます。サーバートークンにアクセスできる人は、実質的にクラスターへの完全な管理者アクセスを持っています。このトークンは慎重に保護する必要があります。

サーバートークンは、ブートストラップデータとして知られるデータストアに永続化される機密情報を暗号化するためのhttps://en.wikipedia.org/wiki/PBKDF2[PBKDF2]パスフレーズとしても使用されます。ブートストラップデータは、新しいサーバーノードをセットアップしたり、スナップショットから復元したりするために不可欠です。この理由から、トークンはクラスターのデータストア自体と一緒にバックアップする必要があります。

カスタムCA証明書が使用されていない限り、クラスター内の最初のサーバーを起動する際には、短い(パスワードのみ)トークン形式のみが使用できます。これは、サーバーが自己署名のクラスターCA証明書を生成するまで、クラスターCAハッシュを知ることができないためです。

カスタムCA証明書の使用に関する詳細は、`k3s certificate`ドキュメントを参照してください。
クラスターのバックアップに関する詳細は、バックアップと復元ドキュメントを参照してください。

エージェント

デフォルトでは、エージェントトークンはサーバートークンと同じです。エージェントトークンは、クラスターが起動する前または後に、すべてのサーバーのCLIオプションまたは環境変数を変更することによって設定できます。エージェントトークンは、サーバートークンと同様に静的に構成されており、期限切れになりません。

エージェントトークンは、`/var/lib/rancher/k3s/server/agent-token`に安全な形式で書き込まれます。エージェントトークンが指定されていない場合、このファイルはサーバートークンへのリンクです。

ブートストラップ

バージョンゲート

`k3s token`コマンドのサポートと、ブートストラップトークンを使用してノードを結合する機能は、2023-02リリース(v1.26.2+k3s1、v1.25.7+k3s1、v1.24.11+k3s1、v1.23.17+k3s1)から利用可能です。

K3sは、動的に生成され、自動的に期限切れになるエージェントhttps://kubernetes.io/docs/reference/access-authn-authz/bootstrap-tokens/[ブートストラップトークン]をサポートしています。

k3sトークン

k3sトークンCLIツールは、以下を処理します:

  • `kubeadm token`ブートストラップトークンと同じ生成および検証コードを使用したブートストラップトークンのライフサイクル。両方のCLIは似ています。

  • サーバートークンのローテーション

NAME:
   k3s token - Manage tokens

USAGE:
   k3s token command [command options] [arguments...]

COMMANDS:
   create    Create bootstrap tokens on the server
   delete    Delete bootstrap tokens on the server
   generate  Generate and print a bootstrap token, but do not create it on the server
   list      List bootstrap tokens on the server
   rotate    Rotate original server token with a new token

OPTIONS:
   --help, -h  show help

k3s token create [token]

新しいトークンを作成します。`[token]`は、`k3s token generate`によって生成された実際の書き込むトークンです。トークンが指定されていない場合は、ランダムなものが生成されます。

クラスターCAハッシュを含む安全な形式のトークンがstdoutに書き込まれます。このコマンドの出力は保存する必要があります。トークンの秘密部分は再表示できません。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/k3sまたはrootでない場合は${HOME}/.rancher/k3s)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

`--description`の値

このトークンの使用方法に関するわかりやすい説明

`--groups`の値

このトークンが認証に使用される際に、認証対象として扱われる追加のグループ。(デフォルト:デフォルト: "system:bootstrappers:k3s:default-node-token")

`--ttl`の値

トークンが自動的に削除されるまでの期間(例:1秒、2分、3時間)。「0」に設定すると、トークンは決して期限切れになりません(デフォルト:24時間0分0秒)

`--usages`の値

このトークンの使用方法を説明します。(デフォルト: "署名、認証")

k3s token delete

1つ以上のトークンを削除します。完全なトークンを提供することも、トークンIDのみを提供することもできます。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/k3sまたはrootでない場合は${HOME}/.rancher/k3s)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

k3s token generate

ランダムなブートストラップトークンを生成します。

トークンを生成するためにこのコマンドを使用する必要はありません。`[a-z0-9]{6}.[a-z0-9]{16}`の形式で、最初の部分がトークンID、2番目の部分が秘密である限り、自分で行うことができます。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/k3sまたはrootでない場合は${HOME}/.rancher/k3s)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

k3s token list

ブートストラップトークンのリストを表示し、そのID、説明、および残りの有効期限を示します。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/k3sまたはrootでない場合は${HOME}/.rancher/k3s)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

`--output`の値

出力形式。有効なオプション: テキスト、JSON(デフォルト: "テキスト")

k3s token rotate

バージョンゲート

2023年10月のリリース(v1.28.2+k3s1、v1.27.7+k3s1、v1.26.10+k3s1、v1.25.15+k3s1)から利用可能。

元のトークンを新しいトークンに置き換えます。このコマンドを実行した後、すべてのサーバーと、元のトークンで参加したエージェントは、新しいトークンで再起動する必要があります。

新しいトークンを指定しない場合は、トークンが自動的に生成されます。

フラグ 説明

`--data-dir`の値

状態を保持するフォルダー(デフォルト:/var/lib/rancher/k3sまたはルートでない場合は${HOME}/.rancher/k3s)

`--kubeconfig`の値

接続先のサーバー[$KUBECONFIG]

`--server`の値

接続先のサーバー(デフォルト: "https://127.0.0.1:6443") [$K3S_URL]

`--token`の値

サーバーまたはエージェントをクラスターに参加させるために使用される既存のトークン [$K3S_TOKEN]

`--new-token`の値

既存のトークンを置き換える新しいトークン

回転前に取得されたスナップショットは、クラスターを復元する際に古いトークンを必要とします。