0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GCPのCloud Load Balancingで任意のバックエンドを設定する

Last updated at Posted at 2024-09-15

GCPではロードバランサーのバックエンドにVMインスタンスを配置する場合、インスタンスグループを使用するらしいです。
このインスタンスグループの作成には、インスタンステンプレートが必要です。
この方法ではスケーラビリティを確保する前提の構成になってしまいます。
(数年前に仕事で調べていたのにすっかり忘れていました。)
用途によってはバックエンドには単独のVMインスタンスだけいい場合もある、ロードバランサーをリバースプロキシとして使用したい場合もあるので、その設定方法です。

ちなみに図ではわかりにくいですが、IPアドレスは80と443で同じものを使っています。下線部はサービス名、太字は設定した名前です。
gcp_lb001.png

VMをバックエンドに持つ構成

結論から言うと、ネットワークエンドポイントグループを作成し、そこにVMインスタンスを追加していく形になります。
Cloud Load Balancingのバックエンドにはネットワークエンドポイントグループというものを指定できるのです。

個人的にCloud Load Balanacingを理解するのに少しややこしい印象があるのですが、それでもなんとかはできました。
やったことの手順をまとめると以下のようになります。

  1. VPCを作成
  2. VMインスタンスをVPC内に作成。HTTPを有効化
    • なんでもいいのでウェブサーバーをセットアップ(今回はApache)
    • OKしか書いてないhcheck.htmlを設置。ヘルスチェックのエンドポイントにする
    • index2.htmlを配置して、ちゃんと設置したものにアクセスできるかを確認する
    • VMにSSHしてcurl http://localhost/index2.htmlなでHTTPが使えることを確認
  3. ネットワークエンドポイントグループを作成
    • VMを指定する場合はゾーンを選択
    • GCP以外のサーバーを指定する場合はインターネットを選択
  4. Cloud Load Balancingを作成
    • フロントエンドサービスを作成
    • バックエンドサービスを作成。このときにネットワークエンドポイントグループを指定。ヘルスチェックも作成する
    • ルーティングルールはデフォルトの状態で、作成したネットワークエンドポイントグループに設定する
  5. IPアドレスによるアクセス制限をかける場合は、バックエンドサービス作成時に自動で作成されるバックエンドセキュリティポリシー(Cloud Armor)で行う

で、なんとかトライアンドエラーを繰り返してうまく動きました。

外部のサーバーをバックエンドに持つ構成

今度は自身が持っているウェブサイトをロードバランサー配下に設置してみようと考えました。

サイトは以下のようになっています。

  • レンタルサーバーに設置
  • DNS・ドメインはレンタルサーバーやGCPとは別のサービスで管理
  • SSLはレンタルサーバーのサービスでLet's Encryptを使用

目標はDNSをロードバランサーに向け、SSLもロードバランサーにインストールする構成です。

結果的にはネットワークエンドポイントグループをインターネットに設定することで外部のパブリックIPを指定することができるのでそれで解決可能です。
また、ネットワークエンドポイントグループでゾーンを指定した場合、ヘルスチェックは必須だったのですが、インターネットの場合は、ヘルスチェックは不要です。

SSLの設定にハマる

ロードバランサーを設定するときにSSLの作成もすることができます。
通常SSLは業者から証明書を発行してもらって、それを設定します。
レンタルサーバーでは手軽に導入可能なLet's Encryptを使う感じになっていました。
パブリッククラウドでは、GoogleやAWSがSSLの認証局になってくれるので手軽に導入可能とも言えます。

ただちょっと困ったことに、ドメインが解決可能な状態になっていないといけないっぽい。
PROVISIONING_FAILEDから変化がなかったので、色々試した結果、DNSをロードバランサーに向けて、SSLを再度作成し直しました。
15分ぐらいでACTIVEになり、SSLは使えるようになります。

ただ証明書自体が変わってしまったため、ブラウザはERR_SSL_VERSION_OR_CIPHER_MISMATCHとなってしまい、サイトがまともに見られなくなります。
その日は次の日仕事があったので、一晩放置したところ、次の日の朝には見られるようになっていました。

Googleマネージド証明書はワイルドカードで発行できないため、サブドメインはそれぞれ指定が必要です。 (これはできるみたいです。そうだよなという感じですが)
これらの事情からSSLだけは自前で取得しようかなと思いました。

参考画像

ネットワークエンドポイントグループの設定内容。左がVM、右がレンタルサーバー。
gcp_lb003.png

Cloud Load Balancing設定の一部
gcp_lb002.png

Cloud Load Balancing設定の一部(バックエンド部分)。上がVM、下がレンタルサーバー
gcp_lb005.png

VMはHTTPを許可。ロードバランサーと80で喋れるようにしておく。
gcp_lb004.png

参考リンク

【Google Cloud】IAP×Cloud Load BalancingでWebアプリケーションを保護して公開しよう! | Tech-Tech
SSL 証明書のトラブルシューティング | Load Balancing | Google Cloud
APIをダウンタイムなしでAWSからGCPに引越しました - JX通信社エンジニアブログ

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?