このドキュメントでは、Google Kubernetes Engine(GKE)クラスタ内の特定の Pod に 1 つ以上の永続 IP アドレスを割り当てることで、信頼性の高い通信を構成する方法について説明します。高可用性を必要とするアプリケーションでは、これらの永続 IP アドレスを構成して、高速フェイルオーバーをサポートしたり、ヘルスチェック ベースのロード バランシングを使用したりすることもできます。
カスタム ネットワーク アドレス変換(NAT)ソリューションを実行している場合、NAT ソリューションが接続を開始または受信するときに、発信接続と受信接続の両方で静的永続 IP アドレスが必要になることがあります。また、ビジネス要件に基づいて、他のシステムとのやり取り方法や特定の種類のリクエストの処理方法を管理するために、アプリケーションに割り振られる IP アドレスを制御することもできます。
デフォルトでは、Pod は下り(外向き)トラフィックにインターフェース IP アドレスを使用します。Pod が再起動または移動されると、インターフェースの IP アドレスが変更されます。ルーティングをより細かく制御するには、GKE で Pod の永続 IP アドレスを手動で構成します。
これらの IP アドレスは、インターネット経由で通信する外部 IP アドレスまたは Google Cloudネットワーク内で通信する内部 IP アドレスのいずれかです。Google 提供の IP アドレスを使用するか、お客様所有の IP アドレス(BYOIP)を使用できます。
GKE の Pod に永続 IP アドレスを構成することで、アプリケーションとビジネス ロジックをマッピングし、特定の Pod が任意の永続 IP アドレスとの間でトラフィックを送受信できるようにします。
次の図に示すのは、複数のネットワーク インターフェースを持つ Pod が、デフォルト ネットワークで通信しながら、セカンダリ ネットワークの永続 IP アドレスを使用する方法です。
用語とコンセプト
このページでは、次のコンセプトを使用します。
ヘルスチェック ベースのロード バランシング
特定のラベルセレクタに一致する複数のアクティブな Pod 間で永続 IP アドレスからのトラフィックを分散する場合は、ヘルスチェック ベースのロード バランシングを使用します。この機能は、作成したリージョン ヘルスチェックを使用して Pod を継続的にモニタリングし、トラフィックが正常なエンドポイントにのみ転送されるようにします。永続 IP アドレスのスタンバイ(バックアップ)Pod を構成することもできます。GKE は、すべてのプライマリ アクティブ Pod がヘルスチェックに失敗した場合にのみ、これらのスタンバイ Pod にトラフィックを自動的に分散します。この構成により、障害発生時に個々の Pod が過負荷になるのを防ぎ、サービスの継続的な可用性を確保できます。
Gateway クラス
Gateway クラス。永続 IP アドレスの割り当てを管理するこの Gateway には、次のクラスがあります。
- 外部 IP アドレスの場合: gke-persistent-regional-external-managed
- 内部(Google Cloudのみ)IP アドレスの場合: gke-persistent-regional-internal-managed
- 高速フェイルオーバーを使用する外部 IP アドレスの場合: gke-persistent-fast-regional-external-managed
- 高速フェイルオーバーを使用する内部(Google Cloudのみ)IP アドレスの場合: gke-persistent-fast-regional-internal-managed
次の Gateway クラスは、ヘルスチェック ベースのロード バランシングに適用されます。
- 複数の Pod で共有される内部(Google Cloudのみ)永続 IP アドレスの場合: gke-passthrough-lb-internal-managed。
複数の Pod で共有される外部永続 IP アドレスの場合: gke-passthrough-lb-external-managed
Gateway クラスは特定のリージョン内で動作します。Gateway クラスは基本的な IP アドレス管理を提供し、レイヤ 3(L3)ネットワーク ルーティングに重点を置いています。
次の表は、各 Gateway クラスの機能を比較したものです。
| 機能 | gke-persistent-* Gateway クラス | gke-passthrough-lb-* Gateway クラス |
|---|---|---|
| 最終目標 | 単一のワークロードの永続 IP アドレス。 | 複数のワークロード間のロード バランシング。 |
| Pod マッピング | 1:1(最近作成された一致する Pod に転送します)。 | 1:N(一致するすべての正常な Pod にトラフィックを分散します)。 |
| ヘルスチェック | ルーティングの決定では対象外です。 | 必須(リージョン ヘルスチェックを使用)。 |
| バックアップ Pod | サポートされていません。 | サポートされています(フェイルオーバーにスタンバイ Pod を使用します)。 |
| フェイルオーバーの速度 | 標準または高速(*-fast-* クラスを使用)。 |
ヘルスチェック パラメータで構成可能 |
Gateway オブジェクト
Gateway オブジェクトは、永続 IP アドレスの管理と構成の中心的な役割を果たします。GKE の Gateway オブジェクトは、永続 IP アドレスのプールを管理します。これらの IP アドレスの一覧を取得し、GKEIPRoute に割り当てる方法を定義します。
リスナー
リスナーは、Gateway Namespace 全体で Gateway が保持する永続 IP アドレスを使用できる Pod を制御する GKE Gateway 構成の一部です。リスナーを使用すると、柔軟性とセキュリティのためにアクセスをカスタマイズできます。各リスナーには一意の名前が必要です。Namespace(すべて、ラベルベース、または Gateway の Namespace のみ)でアクセスをフィルタリングできます。
GKEIPRoute オブジェクト
GKEIPRoute オブジェクトは、GKE クラスタ内の特定の Pod に永続 IP アドレスを割り当てるように構成するカスタム リソースです。GKEIPRoute オブジェクトのステータス セクションを使用して、永続 IP アドレスの設定をモニタリングできます。このセクションには、次のフィールドで重要な情報が提供されます。
Pod
Pod フィールドには、永続 IP アドレスにリンクされている Pod の正確な名前が示されます。1 つの Pod で複数の永続 IP アドレスを使用できます。
条件
Conditions フィールドには、外部 IP アドレスの設定が正しく機能しているかどうかが示されます。また、構成が有効でない場合に問題を診断する際にも役立ちます。4 つの条件があります。
Accepted:GKEIPRouteリソース仕様が有効かどうかを示します。構成にエラーがある場合、Acceptedの状態はFalseで、理由が示されます。GCPReady: Google Cloud が必要なリソースをすべて準備したことを示します。 Google Cloud リソースのプロビジョニング プロセス中に発生したエラーは、GCPReady条件のステータスに反映されます。DPV2Ready: データパス プログラミングのステータスを示します(データパスの準備ができていること、構成された永続 IP アドレスでのネットワーク接続を許可するようにプログラムされていることなどを示します)。Ready: 永続 IP アドレスの設定が有効で機能していることを示します。Pod には、アプリケーションで使用するように構成した永続 IP アドレスでアクセスできます。他の 3 つの条件がすべてTrueの場合、これはTrueに設定されます。
nodeSelector高速フェイルオーバーを使用する場合は、
nodeSelectorフィールドを使用して、高速フェイルオーバー用に事前構成されているノードを指定する必要があります。これにより、フェイルオーバーが発生したときに、永続 IP アドレスを使用して指定されたノードで新しい Pod を迅速にオンラインにできます。これらのノードで永続 IP アドレスを使用して Pod をスケジュールしてください。通常、これを行うには、Pod のnodeSelectorを使用してノードのラベルを照合します。高速フェイルオーバーを構成する場合はnodeSelectorフィールドを使用し、指定したラベルで選択されるノードが 64 個を超えないようにします。
次のフィールドは、ヘルスチェックベースのロード バランシングにのみ適用されます。
loadBalancing: Pod の健全性をモニタリングするリージョン ヘルスチェック名を指定します。backupPodSelector: すべてのプライマリ Pod が異常な場合にトラフィックを受信する Pod のセットを定義します。
リアクティブ モード
リアクティブ モードは、永続 IP アドレスにリンクされた Pod が変更されたとき(ノード間の移動など)や、新たに作成された Pod が使用可能になったときのシステムの動作を決定します。リアクティブ モードを使用すると、Pod が変更されても永続 IP アドレスを引き続き使用できます。
リアクション モードは次のいずれかです。
ReadyCondition
ReadyCondition モードでは、永続 IP アドレス システムは Pod の健全性を優先します。永続 IP アドレス システムは、指定されたラベルと一致し、Kubernetes のヘルスプローブに合格した Pod にのみ IP アドレスを割り当てます。
ReadyステータスはTrueとして通知されます。このモードは、永続 IP アドレスを受信する Pod が、受信トラフィックと送信トラフィックを処理する準備が完全に整っていることが重要なアプリケーションに最適です。Exists
Exists モードでは、Pod の存在が優先されます。永続 IP アドレスは、Pod が構成のラベルと一致し、クラスタ内の特定のノードにスケジュールされている場合に Pod に接続されます。これは、Pod が存在し、実行する場所が指定されていることを意味します。このモードは、永続 IP アドレスの迅速な割り当てが厳密な準備よりも優先されるシナリオや、アプリケーションの完全な状態よりも即時の接続性が重要である開発やテストなどの環境に適しています。
StatefulSet
StatefulSets は、安定した ID と永続ストレージが必要なアプリケーション用に設計された Kubernetes ワークロードの一種です。StatefulSet 内の Pod には、予測可能な名前(my-app-0、my-app-1 など)が付けられます。
Deployment
Deployment は、Pod が互換性があるステートレス アプリケーションを管理するための Kubernetes ワークロードの一種です。Deployment 内の Pod 名は完全に予測できません。
ユースケース
GKE Pod の永続 IP アドレスは、GKE 上でネットワーク関連のアプリケーションを運用するネットワーク サービス プロバイダとセキュリティ サービス プロバイダのユースケースに対応します。
GKE Pod の永続 IP アドレスは、次のユースケースに対応しています。
- NAT の制御: ネットワーク機能を実行する Pod に永続 IP アドレスを割り当てることで、アウトバウンド トラフィックに使用される送信元 IP アドレスをきめ細かく制御できます。これにより、独自の NAT ロジックを統合できます。
- 専用 IP アドレスプール: 専用 IP アドレスを使用すると、特定のアドレスを個々の 5G Core Pod に一致させ、特定のベンダー ソフトウェアとの互換性を確保できます。
- 信頼性の高いトラフィック フロー: リターン トラフィックは同じネットワーク機能経由で戻す必要があるため、永続 IP アドレスを使用すると、外部システムが通信を中断することなく、正しい Pod を認識して応答できます。
- 時間的な制約のあるアプリケーションの高可用性: 通信業界など、厳格な稼働時間要件があるアプリケーションでは、高速フェイルオーバーで永続 IP アドレスを使用して、障害発生時にトラフィックを正常な Pod にすばやくリダイレクトできます。これにより、ダウンタイムを数秒に短縮できます。
- 負荷分散: ヘルスチェック ベースのロード バランシングを使用すると、GKE は複数のアクティブな Pod にトラフィックを分散し、単一のインスタンスの過負荷を回避します。正常な Pod が使用できない場合は、異なる Namespace またはノードにバックアップ Pod を構成できます。
利点
GKE Pod の永続 IP アドレスには次の利点があります。
- 外部 ID: Pod に外部永続 IP アドレスを割り当てると、Pod が再起動されたり、クラスタ内で移動しても、外部システムは Pod にアクセスできます。これは、外部から検出可能なエンドポイントが必要なサービスに役立ちます。
- 信頼性の高い通信: 特定の IP アドレスを持つ他のリソースに依存するアプリケーションは、永続 IP アドレスを使用して信頼性の高い接続を確立できます。永続 IP アドレスは、IP アドレスの依存関係がハードコードされているレガシー システムやアプリケーションで重要です。
- レガシー移行: レガシー移行は、移行プロセス中に特定の IP アドレスに依存するアプリケーションの移行に役立ちます。
- BYOIP: BYOIP を使用すると、GKE クラスタ内ですでに所有している特定の IP アドレス範囲を制御できます。
- アプリケーションの稼働時間の改善: 高速フェイルオーバー機能により、Pod の障害発生時にダウンタイムを数秒に短縮することで、重要なアプリケーションの稼働時間を大幅に改善できます。
- 自動フェイルオーバーによる高可用性: プライマリ Pod がヘルスチェックに失敗した場合に、トラフィックを正常なスタンバイ Pod に自動的にリダイレクトすることで、サービスの可用性を実現します。
次のステップ
- GKE Pod で永続 IP アドレスを使用して通信を制御する
- ヘルスチェック ベースのロード バランシングを設定する方法を学習する
- Pod のマルチネットワーク サポートについて確認する
- Pod のマルチネットワーク サポートの設定を確認する