このページでは、Kubernetes Engine で IP ローテーションを行う方法について説明します。
概要
IP ローテーションを行うことで、クラスタの Kubernetes マスターが Kubernetes API からのリクエストに対応するために使用する IP アドレスを変更できます。
IP ローテーションを使用することで、稼働中の Kubernetes マスターの場所を難読化できます。IP ローテーションにより SSL 証明書とクラスタ認証局が変更されるため、以前のアドレスと新しいアドレスとの間に外部から認識できる接続はありません。
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 で短時間のダウンタイムが発生します。
マスターが再構成されると、Kubernetes Engine は自動的に、新しい IP アドレスを使用するようにクラスタのノードを更新します。各ノードプールは「要再作成」とマークされます。Kubernetes Engine は自動再作成が完了するまで IP ローテーションを終了しません。
ローテーションを検査する
更新オペレーションをモニタリングするには、次のコマンドを実行します。
gcloud container operations list | grep "AUTO_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
上記のコマンドは、新しい IP アドレスのみでサービスを提供するようにクラスタ マスターを構成します。これにより、クラスタ API で短時間のダウンタイムが発生します。