クラスタ認証情報のローテーション

このページでは、Google Kubernetes Engine で認証情報のローテーションを行う方法について説明します。

概要

認証情報のローテーションを行うと、クラスタの認証情報を取り消して新しい認証情報を発行できます。これにより、クラスタ クライアント証明書(MasterAuth API フィールドより)、鍵と API サーバーの証明書、kubelet クライアント証明書をはじめとして、クラスタルート認証局(CA)の秘密鍵、その CA によって署名されたすべての証明書と秘密鍵がローテーションされます。これらの認証情報がクラスタ内でどのように使用されるかについては、クラスタの信頼性をご覧ください。

認証情報のローテーションは定期的に行うことをおすすめします。こうすることで、認証情報の有効期間を短縮して GKE クラスタの保護を強化できます。これらは自動的にはローテーションされません。

認証情報のローテーションでは、認証情報のローテーションだけでなく IP のローテーションも行われます。

始める前に

作業を始める前に、次のことを確認してください。

次のいずれかの方法で gcloud のデフォルトの設定を指定します。

  • gcloud init。デフォルトの設定全般を確認する場合に使用します。
  • gcloud config。プロジェクト ID、ゾーン、リージョンを個別に設定する場合に使用します。

gcloud init の使用

エラー One of [--zone, --region] must be supplied: Please specify location を受信した場合は、このセクションの内容を実施します。

  1. gcloud init を実行して、次の操作を行います。

    gcloud init

    リモート サーバーで SSH を使用している場合は、--console-only フラグを指定して、コマンドがブラウザを起動しないようにします。

    gcloud init --console-only
  2. 手順に従って gcloud を承認し、Google Cloud アカウントを使用します。
  3. 新しい構成を作成するか、既存の構成を選択します。
  4. Google Cloud プロジェクトを選択します。
  5. デフォルトの Compute Engine ゾーンを選択します。

gcloud config の使用

  • デフォルトのプロジェクト ID を設定します。
    gcloud config set project project-id
  • ゾーンクラスタを使用する場合は、デフォルトのコンピューティング ゾーンを設定します。
    gcloud config set compute/zone compute-zone
  • リージョン クラスタを使用する場合は、デフォルトのコンピューティング リージョンを設定します。
    gcloud config set compute/region compute-region
  • gcloud を最新バージョンに更新します。
    gcloud components update

認証情報のローテーションの仕組み

認証情報のローテーションは、新しい IP アドレスへの移行など、複数のステップで構成されるプロセスです。

  • 認証情報のローテーションを開始すると、クラスタ コントロール プレーン(マスター)は元の IP アドレスに加えて新しい IP アドレスでもサービスを開始します。新しい認証情報がワークロードとコントロール プレーンに発行されます。
  • ローテーションを開始した後は、クラスタの API クライアント(kubectl コマンドライン インターフェースを使用する開発マシンなど)を更新して、新しい IP アドレスでコントロール プレーンとの通信を開始する必要があります。
  • ローテーションを完了すると、コントロール プレーンでは以前の IP アドレスでのトラフィックの処理が停止され、古い認証情報が取り消されます。

認証情報のローテーションを行う

以降のセクションで、認証情報のローテーションを行う方法について説明します。

ローテーションを開始する

認証情報のローテーションを開始するには、次の gcloud コマンドを実行します。これにより、新しい認証情報が作成されて、これらの認証情報がコントロール プレーンに発行されます。また、このコマンドによって、元の IP と新しい IP の 2 つの IP アドレスを処理するようにコントロール プレーンが構成されます。

gcloud container clusters update cluster-name --start-credential-rotation

マスターが再構成されると、GKE によってクラスタノードが新しい IP と認証情報を使用するように自動的に更新されます。各ノードプールには「要再作成」のマークが付けられます。GKE は自動再作成が完了するまで認証情報のローテーションを完了しません。

ローテーションを検査する

ローテーションのオペレーションをモニタリングするには、次のコマンドを実行します。

gcloud container operations list | grep "AUTO_UPGRADE_NODES.*RUNNING"

このコマンドは、更新オペレーションのオペレーション ID を返します。

オペレーションをポーリングするには、オペレーション ID を次のコマンドに渡します。

gcloud container operations wait operation-id

ノードプールは 1 つずつ再作成され、それぞれに固有のオペレーションがあります。複数のノードプールがある場合は、上記の手順を使用して各オペレーションをポーリングできます。

API クライアントを更新する

認証情報のローテーションが開始したら、新しい認証情報が使用されるようにクラスタの外部にあるすべての API クライアントを更新する(デベロッパー マシンの kubectl など)必要があります。

API クライアントを更新するには、クライアントごとに次のコマンドを実行します。

gcloud container clusters get-credentials cluster-name

ローテーションを完了する

ローテーションを完了するには、次のコマンドを実行します。これにより、新しい認証情報のみがサービスを提供するようにコントロール プレーンが構成されいます。

gcloud container clusters update cluster-name --complete-credential-rotation

次のステップ