Querier

Cloud Load Balancingから複数のCloud Runサービスへトラフィックを転送する

2023.08.22に公開 | 2023.08.23に更新

Querier運営

@querier_io@querierinc

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る

今回は、Google Cloud Platform内のサービスである、Cloud Load BalancingとCloud Runを使って、セキュアかつ手軽にサーバーを構築する方法を解説していきます。

特にスタートアップで最低限のセキュリティと可用性は保ちたいが、リソースはないような組織にはぴったりな構成だと思いますので、ぜひ最後まで読んでみてください。

前提

今回は、Cloud Runのサービスは構築済みの前提で話を進めていきます。Cloud Runに関する詳しい解説はこちらの記事をご参照ください。

今までCloud Runの前段に特にロードバランサなどを配置していなく、セキュリティや可用性、複数サービスへのトラフィック転送の観点から、ロードバランサを配置したいと考えている方を対象に解説していきます。

Cloud Load Balancingとは

GCPのロードバランサとして活躍するCloud Load Balancingは、サーバーやインスタンスへの入力トラフィックを均等に分散させる役割を果たします。

これにより、サイトの可用性が向上したり、パスごとにサービスをルーティングすることができます。

特徴

1. グローバルとリージョナルのロードバランシング
GCPのロードバランサは、グローバルなトラフィックとリージョナルなトラフィックの両方に対応しています。

これにより、ユーザーに近いデータセンターにリクエストをルーティングし、応答時間を短縮できます。

2. プロトコルの多様性
HTTP/HTTPS、TCP/UDPといった一般的な通信プロトコルに対応しており、さまざまなアプリケーションの要件を満たすことができます。

3. スケーラビリティ
GCPの強力なインフラストラクチャを利用し、大量のトラフィックも問題なくハンドリングします。

Cloud Runの前段にロードバランサを配置する

まずはCloud Load Balancingを作成します。

  1. [ネットワークサービス] > [ロードバランシング] をクリックする
  2. [ロードバランサの作成] をクリックする
  3. [アプリケーション ロードバランサ(HTTP/S)][構成を開始] をクリックする
  4. [インターネットから VM またはサーバーレス サービスへ][グローバル外部アプリケーション ロードバランサ] にチェックがついていることを確認する
  5. [続行] をクリックする
  6. [ロードバランサの名前] に任意の名前を入力する

フロントエンドの構成

次に、フロントエンドの設定をしていきます。今回は以下の構成で設定してみようと思います。

  • プロトコル: HTTPS
  • 証明書: Googleマネージド
  • HTTP → HTTPSリダイレクト: 有効

それでは、設定する手順を解説します。

  1. [プロトコル][HTTPS] に変更する
  2. [IP address] をクリックし、[IPアドレスを作成] をクリックする
  3. 任意の名前をつけて、[予約] をクリックする
  4. [証明書] をクリックし、[新しい証明書を作成] をクリックする
  5. 任意の名前を入力し、[Googleマネージドの証明書を作成する] を選択する
  6. 今回ロードバランサに紐付けるドメインを入力し、[作成] をクリックする
  7. [HTTP から HTTPS へのリダイレクトを有効にする] を選択する
  8. [完了] をクリックする

バックエンドの構成

次に、バックエンドの設定をしていきます。

  1. [バックエンドの構成] をクリックする
  2. [バックエンドサービスとバックエンドバケット] から [バックエンドサービスを作成] をクリックする
  3. 任意のバックエンドサービスの名前を入力する
  4. [バックエンドタイプ][サーバーレスネットワークエンドポイントグループ] を選択する
  5. [サーバレスネットワークエンドポイントグループ] から[サーバーレスネットワークエンドポイントグループの作成] をクリックする
  6. 任意の名前とCloud Runサービスが存在するリージョンを選択する
  7. [サーバーレスネットワークエンドポイントグループの種類][Cloud Run] を選択する
  8. [サービス] でロードバランサの背後で利用するサービスを選択する
  9. [作成] をクリックする

※複数のサービスを利用する場合は、上記の手順を繰り返します

ルーティングルール

最後にルーティングルールを設定していきます。
今回は、 /serviceB というパスへのリクエストをCloud Runの serviceB というサービスにトラフィックを分割し、それ以外のリクエストは serviceAにルーティングする設定をしてみます。

  1. [ルーティングルール] をクリックする
  2. [バックエンド1] で [serviceA] を選択する
  3. [ホストとパスのルールを追加] をクリックする
  4. [ホスト2] にホストを入力する
  5. [パス2]/serviceBと入力する
  6. [バックエンド2] で [serviceB] を選択する
  7. [作成] をクリックする

これでロードバランサの設定は完了です。証明書のプロビジョニングに少し時間がかかる場合がありますが、少し待つと反映されています。

詳細なホストとパスのルールを設定する

Cloud Load Balancingでは、YAMLを利用してより複雑なルールを設定することができます。
今回は2つの例を挙げて解説していきます。より詳しい設定方法はこちらの公式ドキュメントをご参照ください。

まずは、該当のロードバランサの編集画面の [ルーティングルール] まで行きます。
[詳細なホストとパスのルール] を選択し、[ホストとパスのルールを追加] をクリックすることで、YAMLを記述することができます。

URLのパターンマッチングでトラフィックを分割する

defaultService: projects/<project-id>/global/backendServices/serviceA
name: matcher1
routeRules:
- description: service-b
  matchRules:
  - pathTemplateMatch: /version/*/serviceB
  priority: 1
  service: projects/<project-id>/global/backendServices/serviceB

ヘッダーでトラフィック分割する

defaultService: projects/<project-id>/global/backendServices/serviceA
name: matcher1
routeRules:
- description: service-b
  matchRules:
  - headerMatchs:
      - headerName: X-Service-Name
        prefixMatch: serviceB
  priority: 1
  service: projects/<project-id>/global/backendServices/serviceB

Cloud Armorと組み合わせる

Cloud ArmorはGoogle Cloud Platform (GCP)のウェブアプリケーションファイアウォールサービスです。

セキュリティポリシーを定義し、不正なトラフィックやDDoS攻撃からアプリケーションを保護することができます。

Cloud RunとCloud Load Balancingを使用する場合、Cloud Armorを組み合わせることで、より高度なセキュリティを確保することができます。

Cloud Armorでできること

1. DDoS攻撃の防止

Cloud Armorの主な機能の一つはDDoS攻撃の防止です。大量の不正なトラフィックがCloud Runのインスタンスに直接到達する前に、Cloud Armorがそれを検知しフィルタリングします。これにより、リソースの浪費やサービスダウンのリスクを大幅に削減できます。

2. IPベースのブラックリスト/ホワイトリスト

特定のIPアドレスやIP範囲からのアクセスを許可または拒否するポリシーを設定できます。これにより、信頼されたネットワークからのアクセスのみを許可する、あるいは不正なネットワークからのアクセスを拒否することができます。

3. カスタムルールの作成

特定のHTTPリクエストパターンを検出し、それに基づいてトラフィックを許可または拒否するカスタムルールを作成することができます。これにより、特定の攻撃ベクトルや不正なリクエストパターンに対して独自の保護策を施すことができます。

特定のIPアドレスからのリクエストを拒否する

  1. [ネットワークセキュリティ] > [Cloud Armor ポリシー] に行く
  2. [ポリシーの作成] をクリックする
  3. 任意のポリシー名を入力する
  4. [ルールの追加] をクリックする
  5. [一致] に拒否したいIPアドレスを入力する
  6. 任意の優先度を入力する
  7. [ターゲットポリシーの適用] をクリックする
  8. [ターゲットの追加] をクリックする
  9. [バックエンドサービスのターゲット1] でアタッチしたいバックエンドサービスを選択する
  10. [ポリシーの作成] をクリックする

以上で特定のIPアドレスを拒否する設定は完了です。

「Querier(クエリア)」は社内向け管理画面を圧倒的な速さで、かつビジネスのスケールに合わせて柔軟に構築することができるローコードツールです。

最新の記事

2〜3ヶ月と見積もっていた開発期間を、クエリアを導入することでわずか1週間に短縮できました

2012年5月創業のフルカイテン株式会社。 「在庫をフル回転させる」をコンセプトに、機械学習を駆使したSaaS『FULL KAITEN』を提供し、在庫問題の解決に取り組む。

more

管理画面の構築もWeb上で完結
エンジニアのためのローコードツール

Querierについて詳しく見る