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


このページでは、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 アドレスを使用するようにノードプールを再作成します。ノードプールをすでに実行されている GKE バージョンにアップグレードして、手動で再作成することもできます。
  3. ローテーションを開始した後は、クラスタの API クライアント(kubectl コマンドライン インターフェースを使用する開発マシンなど)を更新して、新しい IP アドレスでコントロール プレーンとの通信を開始する必要があります。
  4. ローテーションを完了すると、コントロール プレーンは以前の IP アドレスでのトラフィックの処理を停止します。

IP アドレスのローテーションを開始すると、GKE によってノードが再作成されます。このとき、メンテナンスの可用性が考慮されます。Google Cloud Next などの大規模なイベントの期間中は、中断が発生しないように自動ノード再作成を一時停止することがあります。メンテナンス可用性が IP ローテーションに与える影響と、ローテーションの手順中にクラスタで発生する中断の種類について詳しくは、ノード アップグレード戦略を使用してノードを再作成し、メンテナンス ポリシーを遵守する手動変更の表の IP ローテーションの行をご覧ください。GKE は、ノードの更新にリソースの可用性に依存します。ノードの更新の詳細については、ノードの更新による中断の計画をご覧ください。

IP アドレスのローテーションを開始してから 7 日以内にローテーションを完了しなかった場合、GKE はローテーションを完了しようとします。クラスタ内のノードが以前の IP アドレスを引き続き使用している場合、自動完了オペレーションは失敗しますが、GKE はノードが再作成され、オペレーションが完了するまで完了を試行し続けます。

ローテーションを開始した後、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 アドレスのローテーションは最初は完了しません。ただし、GKE は、メンテナンスの可用性により GKE が続行できるようになるまで、ノードの再作成とローテーションの完了を試みます。

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

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

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

    詳細については、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

ハードコードされた IP アドレスとファイアウォール ルールを更新する

使用環境でコントロール プレーンの IP アドレスをハードコードした場合、またはコントロール プレーンの IP アドレスをターゲットとするファイアウォール ルールがある場合は、アドレスを新しい IP アドレスに更新します。アプリケーションとファイアウォール ルールの IP アドレスを更新せずにローテーションを完了すると、GKE が以前のコントロール プレーン IP アドレスに対するサービスを停止したときに、それらのリソースで中断が発生する可能性があります。

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

クラスタ外の 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 アドレスのローテーションが完了せず、次のようなエラー メッセージが返される場合は、エラー 400: ノードプールの再作成が必要を参照してください。

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

IP アドレスのローテーションを開始してから 7 日以内にローテーションを完了しなかった場合、GKE はローテーションを完了しようとします。クラスタ内のノードが以前の IP アドレスを引き続き使用している場合(メンテナンスの可用性と関連する制約によりノードが再作成されないことが原因である可能性があります)、自動完了は失敗しますが、GKE はノードが再作成され、オペレーションが完了するまで完了を試行し続けます。

次のステップ