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

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

このページでは、バージョン 1.16.10-gke.8 以降を実行する Google Kubernetes Engine(GKE)クラスタでコントロール プレーンの IP をローテーションする方法について説明します。

概要

IP ローテーションを行うことで、コントロール プレーンが Kubernetes API からのリクエストに対応するために使用する IP アドレスを変更できます。コントロール プレーンの IP アドレスは静的であり、IP ローテーションを実行しない限り変更されません。

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

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

始める前に

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

  • Google Kubernetes Engine API を有効にします。
  • Google Kubernetes Engine API の有効化
  • このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして、初期化します。

IP ローテーションを行う

IP ローテーションは、複数のステップから構成されるプロセスです。

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

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

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

    gcloud container clusters update CLUSTER_NAME \
        --start-ip-rotation
    

    CLUSTER_NAME はクラスタの名前で置き換えます。

    出力は次のようになります。

    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. Google Kubernetes Engine will then schedule recreation of all nodes
    to point to the new IP address.  If maintenance window is
    used, nodes are not recreated until a maintenance window occurs. See
    documentation 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)?
    

    また、このコマンドを実行すると、元の IP アドレスと新しい IP アドレスの 2 つの IP アドレスを処理するようにコントロール プレーンが構成されます。

  2. ローテーションを確認し、シェルを開いたままの状態で操作を完了します。

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

メンテナンスの時間枠を使用している場合、メンテナンスの時間枠が発生するまで、ノードは再作成されません。すべてのノードを手動で作成するには、gcloud container clusters upgrade コマンドを実行して、すでにノードプールが動作している GKE バージョンを指定した --cluster-version フラグを渡します。詳細については、メンテナンス時間枠の注意点をご覧ください。

ローテーションを調べる

  1. ノードのアップグレード オペレーションをモニタリングするには、次のコマンドを実行します。

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

    このコマンドは、ノードのアップグレード オペレーションのオペレーション ID を返します。

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

    gcloud container operations wait OPERATION_ID
    

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

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

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

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

gcloud container clusters get-credentials CLUSTER_NAME

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

クラスタ外の API クライアントを更新したら、ローテーションを完了して、新しい IP アドレスのみでサービスを提供するようにコントロール プレーンを構成します。

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

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 --region COMPUTE_REGION
CLUSTER_NAME`). This operation is long-running and will
block other operations on the cluster (including delete) until it has
run to completion.

IP アドレスのローテーションが完了せず、次のようなエラー メッセージが返される場合は、トラブルシューティングを参照してください。

ERROR: (gcloud.container.clusters.update) ResponseError: code=400, message=Node pool "test-pool-1" requires recreation.

次のステップ