コントロール プレーンの IP ローテーション

このページでは、Google Kubernetes Engine でコントロール プレーンの IP ローテーションを行う方法について説明します。

概要

IP ローテーションを行うことで、クラスタのコントロール プレーン(マスター)が Kubernetes API からのリクエストに対応するために使用する IP アドレスを変更できます。

IP ローテーションにより SSL 証明書とクラスタ認証局が変更されるため、以前のアドレスを新しいアドレスに接続する機能が制限されます。

始める前に

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

次のいずれかの方法で 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 ゾーン、リージョン クラスタまたは Autopilot クラスタの場合はデフォルトの Compute Engine リージョンを選択します。

gcloud config の使用

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

IP ローテーションの仕組み

IP ローテーションは、複数ステップのプロセスです。

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

IP ローテーションの実行

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

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

IP ローテーションを開始するには、次のコマンドを実行します。

gcloud container clusters update [CLUSTER_NAME] --start-ip-rotation

ここで、[CLUSTER_NAME] はクラスタの名前です。

上記のコマンドは、元のアドレスと新しいアドレスの 2 つの IP アドレスで機能するように、クラスタのコントロール プレーンを構成します。これにより、クラスタ API でわずかなダウンタイムが発生します。

このコマンドは、次の出力を返します。


This will start an IP Rotation on cluster [CLUSTER-NAME].
The master will be updated to serve on a new IP address in addition to
the current IP address. GKE schedule recreation of all nodes
to point to the new IP address.  If maintenence window is
used, nodes are not recreated until a maintenance window occurs. See
documentation https://cloud.google.com/kubernetes-engine/docs/how-to/ip-rotation
on how to manually update nodes. This operation is
long-running and will block other operations on the cluster (including
delete) until it has run to completion.
Do you want to continue (Y/n)?

確認したら、オペレーションが完了するまでシェルを開いたままにします。

コントロール プレーンが再構成されると、GKE はクラスタのノードが新しい IP アドレスを使用するように更新をスケジュールします。各ノードプールは「要再作成」とマークされます。GKE は、自動再作成が完了するまで IP ローテーションを終了しません。

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

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

gcloud container operations list --filter="UPGRADE_NODES RUNNING"

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

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

gcloud container operations wait [OPERATION_ID]

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

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

IP ローテーションの開始後、新しいアドレスを参照するように、クラスタの外部にあるすべての API クライアント(デベロッパー マシンの kubectl など)を更新する必要があります。

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

gcloud container clusters get-credentials [CLUSTER_NAME]

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

ローテーションを完了するには、次のコマンドを実行します。

gcloud container clusters update [CLUSTER_NAME] --complete-ip-rotation

このコマンドは、次の出力を返します。

This will complete the in-progress IP Rotation on cluster [CLUSTER_NAME].
The master will be updated to stop serving on the old IP address and only
serve on the new IP address. Make sure all API clients have been updated
to communicate with the new IP address (e.g. by running `gcloud container
clusters get-credentials --project [PROJECT-ID] --zone [COMPUTE-ZONE]
[CLUSTER-NAME]`). This operation is long-running and will
block other operations on the cluster (including delete) until it has
run to completion.

上記のコマンドは、新しい IP アドレスのみでサービスを提供するようにコントロール プレーンを構成します。これにより、クラスタ API でわずかなダウンタイムが発生します。

次のステップ