GCP の Interconnect や CloudVPN に GCS のトラフィックを乗せる方法

GCP の Interconnect や CloudVPN に GCS のトラフィックを乗せる方法を調べた時にいい感じにまとまったページがなかったのでメモしておきます。

概要

まずなんでこれをやりたいかというと、まず初めに 転送コスト です。コストがかかる方向は制限されますが、結構ばかにならないです。 例えば Partner Interconnect であれば 1/2 から 1/3 程度のコストに抑えられます(※ 記事執筆時点の情報。ポート利用料など別課金あり)

あとはレイテンシやセキュリティなど理由は様々あると思います。

実現するにあたり、方法は何個かあるかと思います。

一番綺麗なのは 「*.googleapis.com が restricted.googleapis.com への CNAME として解決されるようにして、Interconnect や CloudVPN 上にトラフィックがいくようにルーティングをいじる」だと思います。実は試してはないのでうまくいくのかはわかってないです。

オンプレミス ホスト用の限定公開の Google アクセスの構成  |  VPC  |  Google Cloud

2番目に、踏み台用意して GCS のトラフィックを強引に中を通す方法です。 イメージとしては以下の図のようになります。図中の②を通すイメージです。

f:id:komeiy:20190301212651p:plain

f:id:komeiy:20190301212656p:plain

割と簡単ですね。検証も楽なので試してみます。

踏み台利用パターン

flunetd の plugin など利用していると困るのですが、今回はターゲットを gsutil を利用している場合とします。 gsutil は proxy を利用することが可能なので割と簡単に実現可能です。もうこの時点でハイハイってなっている人多いので書く必要があるのかというツッコミもありそうですが。

以下を見るのがわかりやすいです。

Boto を使用する場合  |  Cloud Storage  |  Google Cloud

該当箇所は以下の通り

$ cat .boto | egrep "^proxy"
proxy = localhost
proxy_port = 3128

まずは proxy をセットした後に gsutil で疎通ができないことを確認。適当に snmpd_strace_output.txt という名前のテキストを置いておきました。

$ gsutil cp gs://<your bucket>/snmpd_strace_output.txt .
INFO:root:Retrying request, attempt #4...
INFO 0227 20:49:30.945226 retry_util.py] Retrying request, attempt #4...

プロキシサーバとして、今回は squid を立てます。構築が面倒でしたので、こちらを参考にさせて頂きコンテナで構築します。

$ docker run  -p 3128:3128 -ti docker.io/salrashid123/squidproxy /apps/squid/sbin/squid -NsY -f /apps/squid.conf.forward

プロキシサーバは以下のように確認可能です。

$ curl -v -x localhost:3128  https://www.yahoo.com/

はい、できるようになりました。

$ gsutil cp gs://<your bucket>/snmpd_strace_output.txt .
Copying gs://<your bucket>/snmpd_strace_output.txt...
/ [1 files][  1.6 KiB/  1.6 KiB]
Operation completed over 1 objects/1.6 KiB.

最終的には localhost ではなく別のインスタンスからプロキシ経由でアクセスするので GCP 側の firewwall 開ける必要あります。

proxy が EIP 持つ必要なかれば private Google Access にしちゃいましょう。簡単です。 普通にONにするだけ、EIP取ってもプロキシ経由で疎通できることを確認しておきます。

$  gsutil cp gs://<your bucket>/snmpd_strace_output.txt .
Copying gs://<your bucket>/snmpd_strace_output.txt...
/ [1 files][  1.6 KiB/  1.6 KiB]
Operation completed over 1 objects/1.6 KiB.

限定公開の Google アクセスの構成  |  VPC  |  Google Cloud

その他

課題となる点は冗長性かなと思います。 特定のサブネットのアドレスでプロキシと疎通取れれば良いので、Kubernetes なり別のレイヤーで担保するようにするのが良さそうです。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

Google Cloud Platform エンタープライズ設計ガイド

Google Cloud Platform エンタープライズ設計ガイド

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載! ] (Software Design plusシリーズ)

クラウドエンジニア養成読本[クラウドを武器にするための知識&実例満載! ] (Software Design plusシリーズ)