Open2

GCP内のネットワークについて覚書

NMNM

CloudRunのサービスからCloudSQLへのアクセス方法

CloudRunへデプロイしたアプリケーションからCloudSQLインスタンスのDBへ接続するための方法。
出来る限りGCPのローカルネットワークを使用し、費用の掛からない方法順で記載。

  1. 直接VPCに接続する
    Runサービスの編集で「ネットワークキング」>「アウトバウンド トラフィック用の VPC に接続する」>「VPC に直接トラフィックを送信する」
    コンテナ上のアプリケーションでDBインスタンスのローカルIPを指定。
    個人的一番設定が楽。
    CloudSQLへのアクセスは指定したVPCのサブネットのIPが自動的に振られる。リビジョン変えると変わる。

  2. SQLプロキシを設定する。
    Runサービスの編集で「コンテナ」>「Cloud SQL 接続」
    コンテナ上のアプリケーションの接続はunix_socketでDB接続名を指定する。
    Runの実行ユーザに「CloudSQLクライアント」のIAMロールが必要。
    CloudSQLへのアクセスはプロキシされたローカルIP固定。

  3. サーバレスVPCコネクタを使用する
    VPCネットワークの「サーバレスVPCアクセス」でコネクタを作成する
    Runサービスの編集で「ネットワークキング」>「アウトバウンド トラフィック用の VPC に接続する」>「サーバーレス VPC アクセス コネクタを使用」
    コンテナ上のアプリケーションでローカルIPを指定。
    CloudSQLへのアクセスはコネクタに指定したサブネット内のIPが自動的に振られる。コネクタ内のインスタンスが2つの場合、IPも2つ使用される。コネクタがスケールイン/アウトすると変わる。

  4. グローバルIPをCloudSQLに付与して接続する
    設定はCloudSQL側でする必要があり、インスタンスは数分接続できなくなる。Run側はCloudNATに接続するための設定「VPC下り(外向き)」を設定する必要あり。
    CloudRunとNATについて
    コンテナ上のアプリケーションでDBインスタンスのグローバルIPを指定。
    外部ネットワーク経由のアクセスになるのでCloudNAT+静的IP+トラフィック費用がかかるかも。
    CloudSQLへのアクセスはNATのグローバルIP固定。

備考:
12はローカルネットワーク経由なので費用が安く、途中に色々なサービスを挟まない分パフォーマンスが上がる。他のサーバレスサービスとの接続は追加で設定が必要。
3はコネクタの最小インスタンス数が2、かつ24時間フルで起動するためどうしてもランニングコストがやばい。けど他のサーバレスサービスと接続する場合は必要そう。
4はグローバルを経由するのでその分料金がかかるが、VPCなどの設定をせずともアクセスが可能になるはず(未検証)

NMNM

Regional Load BalancerでSSLに自己証明を持ちいる

Googleマネージドの証明書はグローバルロードバランサーでしか使用できない。テスト等でロードバランサを立てた場合に自己証明書を用いる場合のメモ

自己証明書の作成

適当なLinux環境で作成する

# 設定ファイルの作成(myapp.localは作成するドメイン名)
$ cat <<EOF > openssl.cnf
[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no

[req_distinguished_name]
CN = myapp.local

[v3_req]
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1 = myapp.local
EOF

# 作成
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout myapp.local.key -out myapp.local.crt -config openssl.cnf

LBのフロントエンドの構成セクション

  • HTTPの設定をする
  • HTTPSの設定をする
    証明書をクリックし、「新しい証明書を作成」を選択。
    証明書に「myapp.local.crt」の内容を入力し、秘密鍵に「myapp.local.key」を入力する。
    自己証明である警告が出るがOK。
  • SSLポリシーは「GCPのデフォルト」

後はローカルのhostsを書き換えて確認。
設定ファイルで指定したドメイン名でなくても問題はない。