当記事は みずほリサーチ&テクノロジーズ × G-gen エンジニアコラボレーション企画 で執筆されたものです。
みずほリサーチ&テクノロジーズ株式会社の舘山です。当記事では Google Cloud をハイブリッドクラウドとして利用する際の、プライベート IP アドレスの枯渇問題について考えます。また Amazon Web Services (AWS) の仕様と比較することで、さらに理解を深めます。
- はじめに
- VPC で利用可能な IP アドレス範囲
- サブネットに PUPI を利用する場合の注意点
- 専用サブネット・VPC が必要なユースケース
- Google 管理 VPC とプライベートサービスアクセス
- 関連記事
はじめに
当記事では、組織のプライベート IP アドレス在庫枯渇問題への対応を考えます。なおあくまでプライベート IP アドレスの枯渇問題であって、IPv4 の "パブリック IP アドレス" 在庫枯渇問題とは関係ありません。
VPC をオンプレミスに専用線接続する場合、オンプレミス側と重複しないプライベート IP アドレスを利用する必要があります。
大規模で、歴史が古く、統廃合を繰り返してきた組織においては、組織のネットワーク内でユニークとなることが担保されたプライベート IP アドレス在庫が枯渇しているケースがあります。そのような組織においては、新規システムの VPC にとりあえず /16 (65,536個) のプライベート IP アドレスを払い出すような贅沢は許されません。
また、プライベート IP アドレスとして RFC 1918 範囲だけでなく RFC 6598 範囲 (100.64.0.0/10) やパブリック IP アドレス範囲を利用しているケースがあります。
VPC で利用可能な IP アドレス範囲
制約事項
Google Cloud では RFC6598 範囲と一部を除くパブリック IP アドレス範囲は VPC のプライベート IP アドレスとして利用することが出来ます。ただし後述するように、サービスによっては固有の制約事項がありますので注意が必要です。
- 参考 : 有効なIPv4範囲
他クラウドの例
Google Cloud の仕様を明確に理解するために他のクラウドの仕様の例を挙げます。Amazon Web Services (AWS) では、大量の IP アドレスが必要なワークロードでは、以下の様な構成が考えられます。
- 外部との直接通信要否に応じてサブネットを分ける
- 大量のIPアドレスが必要なリソースは内部利用専用サブネットに配置する
- 内部利用専用サブネットには、当該システムの通信要件にない範囲からIPアドレスを割り当てる
- VPC に後から IP アドレス範囲を追加する場合は 最初に利用する IP アドレス範囲による制限事項あり
- 内部利用専用サブネットの IP アドレス範囲は、共通 VPC およびオンプレミスと経路交換しない
- VPC 外から内部利用専用サブネットへのインバウンド通信はロードバランサを経由する
- 内部利用専用サブネットから VPC 外へのアウトバウンド通信は Private NAT Gateway を利用する。
なお AWS ブログでは内部利用専用サブネットを利用する、別の構成例が紹介されています。
How to solve Private IP exhaustion with Private NAT Solution
Google Cloud の場合
Google Cloud で同様の構成を採用する場合、以下の仕様差異に留意が必要です。
- 後から追加するサブネットのIPアドレス範囲は、AWSより制限が緩い
- AWS では RFC 6598 の IP アドレス範囲を利用する VPC に、後から RFC 1918 の IP アドレス範囲を追加できない
- AWS の Private NAT Gateway に相当するサービスが存在しないため、独自の NAT 構築が必要
- ただし Google Kubernetes Engine のユースケースでは IP マスカレードエージェントが利用可能
- VPC ピアリングで選択的にルートを設定するには サブネットにプライベートで使用されるパブリック IPv4 アドレス(PUPI)の利用が必要
- 専用サブネット・VPC が必要なユースケースの存在
サブネットに PUPI を利用する場合の注意点
一般的な注意点
各サービス毎に PUPI (Privately Used Public IP) の利用に関して固有の制限事項があります。以下は例です。
- Memorystore インスタンスがプライベート サービス アクセス接続モードを使用している場合、PUPI 範囲のクライアントは Memorystore インスタンスに接続できない
- Cloud SQL の承認済ネットワークに PUPI のサブネットは自動追加されない
- Cloud SQL の Google 管理 VPC へ PUPI のサブネット経路は自動でエクスポートされない
なお、各サービスにおける PUPI および RFC 6598 範囲のサポートについては、Google Cloud ガイドの記載が追いついていないケースがあるようですので注意が必要です。
Cloud SQLのガイド プライベート IP を構成する には、
Cloud SQL は、デフォルトでは VPC から RFC 1918 以外のサブネット ルートを学習しません。RFC 1918 以外のルートをエクスポートするには、Cloud SQL へのネットワーク ピアリングを更新する必要があります。
と記載されていますが、実際には RFC 6598 範囲のサブネットであれば経路が自動でエクスポートされます (2023年4月現在)。
多くの場合 RFC 1918 が言及されている箇所では、RFC 6598 の IP アドレス範囲も利用できそうですが、マネージド Microsoft AD の IP アドレス範囲など、本当に RFC 1918 範囲しか利用できない場合もあります。
プライベート IP アドレス不足から RFC 6598 範囲、 PUPI を活用せざるを得ない場合、最終的には実機での検証が必要になってきます。
GKE の場合の注意点
多数のIPアドレスが必要となる Googke Kubernetes Engine (GKE) については、Google からもガイドが提供されています。
専用サブネット・VPC が必要なユースケース
他クラウドの例
Google Cloud サービスでは固有の専用サブネットや VPC が必要になるケースが比較的多いといえます。ここでも、仕様を分かりやすくするために他クラウドの例を挙げます。
例えば AWS では、以下のネットワークインタフェースは全て Amazon EC2 インスタンスと同じサブネットに配置できます。
- AWS Lambda 関数から VPC へのアクセスのためのネットワークインタフェース
- Amazon RDS インスタンスのネットワークインタフェース
- ロードバランサ (ALB) のネットワークインタフェース
- VPC エンドポイントのネットワークインタフェース
- PrivateLink サービス提供用 NLB のネットワークインタフェース
- EKS のポッドのネットワークインタフェース
Google Cloud の場合
Google Cloud で同様の機能を利用するには、通常のサブネットとは別に、専用のIPアドレス、サブネット、VPC が必要になります。
- Cloud Functions 関数から VPC へアクセスにはサーバレス VPC アクセスコネクタ用サブネットが必要
- Cloud SQL インスタンスには利用者の VPC とピアリングされた Google 管理の VPCが必要
- 内部 HTTP ロードバランサにはプロキシ専用サブネットが必要
- Google API 用の Private Service Connect エンドポイントにはサブネット範囲外の IP アドレスが必要
- Private Service Connect サービス提供には専用サブネットが必要
- GKE のサービス、ポッドにはサブネットのセカンダリ IP アドレス範囲が必要
Google 管理 VPC とプライベートサービスアクセス
Google 管理 VPC を利用するサービスについて、同じ Google 管理 VPC を共用できるサービスと、そうでないサービスが存在します。
前者はプライベートサービスアクセスをサポートするサービス群です。
対象サービスの一覧は VPC のガイドを参照してください。
例として、互いにプライベートサービスアクセスをサポートする Cloud Build プライベートプールから Cloud SQL インスタンスにはプライベート IP アドレスで直接通信することが可能です (ただし同じ VPC と関連付けている場合に限る)。
一方、GKE はプライベートサービスアクセスをサポートしません。GKE 限定公開クラスタのコントロールプレーンは専用の Google 管理 VPC に配置されます。
そのため Cloud Build プライベートプールから GKE の API サーバには、VPC ピアリング推移的アクセス制限により、プライベート IP アドレスで直接通信することはできません。
この問題のワークアラウンドは Cloud アーキテクチャセンターの記事を参照してください。
- Cloud Build プライベート プールを使用した限定公開 Google Kubernetes Engine クラスタへのアクセス
- コントローラ アクセス用のネットワーク プロキシを持つ GKE 限定公開クラスタの作成
Cloud Filestore や Cloud Memorystore のように、両方の接続モードを選択できるサービスも存在します。
GKE 以外にサービス固有の Google 管理 VPC を利用するサービスの例としてはマネージド Microsoft AD があります。
関連記事
舘山 浩之
みずほリサーチ&テクノロジーズ
先端技術研究部に所属。個人のキャリアではAWSの利用経験が長く、Google Cloudは2022年より利用開始。