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

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

概要

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

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

始める前に

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

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

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

gcloud init の使用

  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 ローテーションを開始すると、クラスタ マスターは元の 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 will then recreate all
    nodes to point to the new IP address. 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 で短時間のダウンタイムが発生します。

次のステップ