プライベートIPアドレス在庫枯渇問題への対応

記事タイトルとURLをコピーする

当記事は みずほリサーチ&テクノロジーズ × G-gen エンジニアコラボレーション企画 で執筆されたものです。


みずほリサーチ&テクノロジーズ株式会社の舘山です。当記事では Google Cloud をハイブリッドクラウドとして利用する際の、プライベート IP アドレスの枯渇問題について考えます。また Amazon Web Services (AWS) の仕様と比較することで、さらに理解を深めます。

当ブログは G-gen × みずほRT によるコラボ記事です

はじめに

当記事では、組織のプライベート 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 アドレスとして利用することが出来ます。ただし後述するように、サービスによっては固有の制約事項がありますので注意が必要です。

他クラウドの例

Google Cloud の仕様を明確に理解するために他のクラウドの仕様の例を挙げます。Amazon Web Services (AWS) では、大量の IP アドレスが必要なワークロードでは、以下の様な構成が考えられます。

  • 外部との直接通信要否に応じてサブネットを分ける
  • 大量のIPアドレスが必要なリソースは内部利用専用サブネットに配置する
  • 内部利用専用サブネットには、当該システムの通信要件にない範囲からIPアドレスを割り当てる
  • 内部利用専用サブネットの IP アドレス範囲は、共通 VPC およびオンプレミスと経路交換しない
  • VPC 外から内部利用専用サブネットへのインバウンド通信はロードバランサを経由する
  • 内部利用専用サブネットから VPC 外へのアウトバウンド通信は Private NAT Gateway を利用する。

AWSにおける組織のプライベートIPアドレス節約構成例(シングルAZ)

なお AWS ブログでは内部利用専用サブネットを利用する、別の構成例が紹介されています。

How to solve Private IP exhaustion with Private NAT Solution

Google Cloud の場合

Google Cloud で同様の構成を採用する場合、以下の仕様差異に留意が必要です。

サブネットに PUPI を利用する場合の注意点

一般的な注意点

各サービス毎に PUPI (Privately Used Public IP) の利用に関して固有の制限事項があります。以下は例です。

なお、各サービスにおける 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 が必要になります。

GoogleCloudのサブネット構成

Google 管理 VPC とプライベートサービスアクセス

Google 管理 VPC を利用するサービスについて、同じ Google 管理 VPC を共用できるサービスと、そうでないサービスが存在します。

前者はプライベートサービスアクセスをサポートするサービス群です。

対象サービスの一覧は VPC のガイドを参照してください。

例として、互いにプライベートサービスアクセスをサポートする Cloud Build プライベートプールから Cloud SQL インスタンスにはプライベート IP アドレスで直接通信することが可能です (ただし同じ VPC と関連付けている場合に限る)。

一方、GKE はプライベートサービスアクセスをサポートしません。GKE 限定公開クラスタのコントロールプレーンは専用の Google 管理 VPC に配置されます。

そのため Cloud Build プライベートプールから GKE の API サーバには、VPC ピアリング推移的アクセス制限により、プライベート IP アドレスで直接通信することはできません。

2種類のGoogle管理VPC

この問題のワークアラウンドは Cloud アーキテクチャセンターの記事を参照してください。

Cloud Filestore や Cloud Memorystore のように、両方の接続モードを選択できるサービスも存在します。

GKE 以外にサービス固有の Google 管理 VPC を利用するサービスの例としてはマネージド Microsoft AD があります。

関連記事

blog.g-gen.co.jp

blog.g-gen.co.jp

舘山 浩之

みずほリサーチ&テクノロジーズ

先端技術研究部に所属。個人のキャリアではAWSの利用経験が長く、Google Cloudは2022年より利用開始。