こんにちは、オールアバウト SRE所属の @h_amakasu です。
この記事は、All About Group(株式会社オールアバウト) Advent Calendar 2020 14日目の記事です。
本稿の概要
今年の夏にロードバランサーの新機能として「サーバレス ネットワーク エンドポイント グループ」(以下サーバレスNEG)が追加されました。
これにより、GCP ロードバランサーのバックエンドにサーバレスサービス(Cloud Run やCloud Function など)を設定できるようになり、従来ではできなかったCloud Run やCloud Function へのCloud CDN やCloud Armor が使えるようになりました。
本稿では、サーバレスNEG にCloud Run を設定したロードバランサー構成の構築手順をまとめてみました。
構築手順
Cloud Run への検証用サービスのデプロイ
今回はバックエンドサービスにCloud Run を用いるので、検証用のサービスをデプロイします。
$ cat << EOF > Dockerfile
FROM centos:7
RUN set -x \
&& yum -y update \
&& yum -y install httpd
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
EOF
$ docker build -t example -f Dockerfile .
$ docker tag example asia.gcr.io/gcp_project/example-httpd:latest
$ docher push asia.gcr.io/gcp_project/example:latest
$ gcloud beta run deploy example \
--image asia.gcr.io/gcp_project/example:latest \
--platform=managed \
--region=asia-northeast1 \
--allow-unauthenticated \
--port=80
ロードバランサの作成
GCP 管理画面から「ネットワーク サービス」 > 「負荷分散」とジャンプし、「ロードバランサを作成」を選択します。
バックエンドの作成
「バックエンドの構成」を選択し、「バックエンドサービスとバックエンドバケット」から「バックエンド サービス」を作成します。
バックエンドタイプのプルダウンメニューを以下のように「サーバーレス ネットワーク エンドポイント グループ」に変更します。
新しいバックエンドで「サーバーレス ネットワーク エンドポイント グループの作成」を選択し、先ほどのCloud Run で構築したサービスと紐付けます。
Cloud CDN やCloud Armor の設定
バックエンド サービスの編集では、主題でもあるCloud CDN やCloud Armor を設定することができます。
画像例ではCloud Armor を有効にしてみました。
フロントエンドの作成
最後に、フロントエンドを構成します。
(バックエンドの設定時にCloud CDNを有効にした場合は、HTTPSで受け付けられるようにする必要があります)
これで「作成」を洗濯すれば構築完了です。
構築後のロードバランサーの詳細は以下のようになり、バックエンドがサーバレスNEGで、Cloud Armor が有効になっていることがわかります。
最後に黒塗り箇所のIPアドレスにアクセスして、期待した挙動をするか確認します。
許可されたアドレスからは以下のように正常に表示され、不許可のIPアドレスからは「403 Forbidden」となります。
まとめ
サーバレスNEG を使って、Cloud Run でもCloud CDN やCloud Armor が使えるようになりました。
以前弊社のテックブログでも公開したCloud RunからCloud SQLやMemorystoreへの繋ぎ方とくみあわせることで、使えるシーンはより広がったと思います。
ただ、この構成は1点課題があることもわかりました。
この構成、Cloud Run にロードバランサーを被せるような形になりますが、Cloud Run のサービスそのものに自動で割り当てられたURL へは直接参照できてしまう点です。この点、抜け穴になってしまうので、今後のアップデートに期待したいとことです。