コントロール プレーンの 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 をインストールして初期化します。すでに gcloud CLI をインストールしている場合は、gcloud components update を実行して最新のバージョンを取得します。

IP ローテーションを行う

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

  1. IP ローテーションを開始すると、コントロール プレーンは元の IP アドレスに加えて新しい IP アドレスでもサービスを開始します。
  2. GKE は、新しい IP アドレスを使用するようにノードプールを再作成します。
  3. ローテーションを開始した後は、クラスタの API クライアント(kubectl コマンドライン インターフェースを使用する開発マシンなど)を更新して、新しい IP アドレスでコントロール プレーンとの通信を開始する必要があります。
  4. ローテーションを完了すると、コントロール プレーンは以前の 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. ローテーションを確認し、シェルを開いたままの状態で操作を完了します。

ノードを再作成する

新しい IP アドレスでサービスを提供するように API サーバーを再構成すると、GKE は新しい IP アドレスを使用するようにノードを自動的に更新します。GKE は、すべてのノードを最も近いサポート対象のノード バージョンにアップグレードし、ノードを再作成します。詳細については、ノードプールのアップグレードをご覧ください。

デフォルトでは、GKE はオペレーションの開始から 7 日後に IP アドレスのローテーションを自動的に完了します。クラスタ内のアクティブなメンテナンスの時間枠または除外により、この 7 日間に GKE が一部のノードを再作成できない場合、IP アドレスのローテーションは完了しません。

  • メンテナンスの除外またはメンテナンスの時間枠を使用すると、ローテーションが失敗する可能性がある場合は、クラスタを手動でアップグレードして、ノードを強制的に再作成します。

    gcloud container clusters upgrade CLUSTER_NAME \
        --location=LOCATION \
        --cluster-version=VERSION
    

    VERSION は、クラスタがすでに使用している GKE バージョンに置き換えます。

    詳細については、メンテナンス時間枠の注意点をご覧ください。

ノードプールの再作成の進行状況を確認する

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

    gcloud container operations list \
        --filter="operationType=UPGRADE_NODES AND status=RUNNING" \
        --format="value(name)"
    

    このコマンドは、ノードのアップグレード オペレーションのオペレーション 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.

次のステップ