Cloud Runから"192.168.1.0/24"のサブネットにアクセスできない

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

G-gen の佐々木です。当記事では Cloud Run から VPC ネットワークに接続する際の、宛先サブネットの IP アドレス範囲に関する注意点を紹介します。

宛先サブネットの IP アドレス範囲に関する既知の問題

ドキュメントの記載

2024年3月の時点では、Cloud Run のドキュメントには以下のような記載があります。

プライベート IP 経由でいずれかの宛先にアクセスする場合、宛先をサブネット 192.168.1.0/24 上にすることはできません。このサブネットを使用すると、Cloud Run が宛先と通信できなくなります。

これは、Cloud Run でサーバーレス VPC アクセスや Direct VPC Egress を使用して、VPC 内のリソースを宛先とする通信を行う場合に起こりうる問題です。

代表的なケース

この問題の影響を受ける代表的なケースとして、Cloud Run から Cloud SQL、AlloyDB などのデータベースに接続するケースがあります。

Cloud Run からプライベート IP アドレスを使用して Cloud SQL(もしくは AlloyDB)インスタンスに接続する場合、以下のような構成となります。

"192.168.1.0/24" のサブネットにあるデータベースインスタンスに接続できない

このとき、接続先となる Cloud SQL(AlloyDB)インスタンスのプライベート IP アドレスが 192.168.1.0/24 の場合、以下のようにデータベースへの接続に失敗してしまいます。

アプリケーションのログ
2024/03/06 22:53:45 db.Query: failed to connect to `host=192.168.1.5 user=myuser database=mydb`: dial error (dial tcp 192.168.1.5:5432: connect: no route to host)

例外

当社が2024年3月に行った検証では、Cloud Run jobs ではドキュメントの記載通り192.168.1.0/24 の宛先に接続することができませんでしたが、Cloud Run services では接続できることを確認しました。

しかし、ドキュメントでは Cloud Run の種類を明記していないため、Cloud Run services でも引き続き接続できる保証はありません。

したがって、どちらの Cloud Run でも、接続先として 192.168.1.0/24 のサブネットを使用するのは避けたほうがよいでしょう。

対処法

プライベート IP アドレスを使用する場合

リソースを作り直す

理想的には、宛先となるリソースを作り直し、192.168.1.0/24 以外の IP アドレス範囲をもつサブネットに接続するように Cloud Run を構成するのがよいでしょう。

Compute Engine VM をプロキシとして使用する

どうしても作り直しができない状況では、192.168.1.0/24 以外のプライベート IP アドレスをもつ Compute Engine VM にプロキシを構成し、これを経由するように接続を行います。

例として、Cloud SQL や AlloyDB に接続したい場合は、Google Cloud から提供されている Auth Proxy を Compute Engine VM で実行し、Cloud Run から Auth Proxy を経由してデータベースに接続します。

プロキシVMを経由して "192.168.1.0/24" のサブネットに接続する

この方法では、Compute Engine VM の運用を考慮しなければならない点に注意が必要です。Cloud Run からデータベースに常時接続するようなケースでは、なるべくは避けたほうがよいでしょう。

パブリック IP アドレスを使用する場合

宛先が Cloud SQL や AlloyDB の場合は、Cloud Run で Auth Proxy を使用することで、パブリック IP アドレスでも安全にデータベースに接続することができます。

Cloud SQL Auth Proxy は Cloud Run の種類を問わずネイティブ機能として利用できます。

その反面、AlloyDB Auth Proxy は Cloud Run のマルチコンテナ機能を使用し、サイドカーコンテナとして実行する必要があります。

2024年3月現在、マルチコンテナ機能は Cloud Run services でしかサポートされておらず、Cloud Run jobs の場合は Cloud Run 側で AlloyDB Auth Proxy を実行することはできません。

Cloud Run から Auth Proxy を使用して Cloud SQL、AlloyDB に接続する方法については、以下の記事をご一読ください。

blog.g-gen.co.jp

blog.g-gen.co.jp

なお、AlloyDB におけるパブリック IP アドレスの利用は2024年3月時点でプレビュー機能である点には注意してください。

以下の記事で、Cloud Run services から AlloyDB Auth Proxy を使用して AlloyDB に接続する方法を解説しています。

blog.g-gen.co.jp

佐々木 駿太 (記事一覧)

G-gen最北端、北海道在住のクラウドソリューション部エンジニア

2022年6月にG-genにジョイン。Google Cloud Partner Top Engineer 2024に選出。好きなGoogle CloudプロダクトはCloud Run。

趣味はコーヒー、小説(SF、ミステリ)、カラオケなど。