内部 HTTP(S) 負荷分散設定の準備

内部 HTTP(S) 負荷分散の設定には、次の 2 つのフェーズがあります。

  • 前提となる作業を行う(必要なアカウントに適切な権限を付与し、VPC ネットワークを準備するなど)。
  • ロードバランサのリソースを設定する。

このガイドでは、前提条件の設定方法について説明します。負荷分散のリソースの設定方法については、別のガイドで説明します。

このガイドに進む前に、次の内容を理解しておいてください。

権限

このガイドに進むには、プロジェクト内でインスタンスを作成してネットワークを変更できる必要があります。そのためにはプロジェクトのオーナーまたは編集者であるか、または次の Compute Engine IAM の役割をすべて持っている必要があります。

タスク 必要な役割
ネットワーク、サブネット、負荷分散コンポーネントの作成 ネットワーク管理者
ファイアウォール ルールの追加と削除 セキュリティ管理者
インスタンスの作成 インスタンス管理者

設定の概要

内部 HTTP(S) 負荷分散は、次のような構成フローで構成できます。図の中で番号の付いている項目については、図の後で簡単に説明します。

内部 HTTP(S) 負荷分散のコンポーネント - 番号付き(クリックして拡大)
内部 HTTP(S) 負荷分散のコンポーネント - 番号付き(クリックして拡大)

この例では、us-west1 リージョンの VPC ネットワークに内部 HTTP(S) ロードバランサを作成し、1 つのバックエンド サービスと 2 つのバックエンド グループを設定しています。

この図にあるコンポーネントについて説明します。

  1. 2 つのサブネットがある VPC ネットワーク:

    1. サブネットの 1 つは、バックエンド(インスタンス グループと NEG)と転送ルールに使用されます。プライマリ IP アドレスの範囲は 10.1.2.0/24 です。

    2. もう 1 つのサブネットは、us-west1 リージョンのプロキシ専用サブネットです。内部 HTTP(S) ロードバランサを使用する VPC ネットワークのリージョンごとにプロキシ専用サブネットを 1 つ作成する必要があります。リージョンのプロキシ専用サブネットは、リージョン内のすべての内部 HTTP(S) ロードバランサで共有されます。内部 HTTP(S) ロードバランサからサービスのバックエンドに送信されるパケットのソースアドレスは、プロキシ専用サブネットから割り当てられます。この例では、リージョンのプロキシ専用サブネットのプライマリ IP アドレスの範囲は 10.129.0.0/26 です。詳細については、内部 HTTP(S) ロードバランサのプロキシ専用サブネットをご覧ください。

  2. ネットワークで所定のトラフィック フローを許可するファイアウォール ルール。これには、10.129.0.0/26(この例ではプロキシ専用サブネットの範囲)からの TCP ポート 80, 443、8000 へのトラフィックを許可するルールと、ヘルスチェック プローブ用の別のルールが含まれます。

  3. バックエンド インスタンス。この例では、次のバックエンドをデプロイしています。

    1. Google Compute Engine VM
    2. ネットワーク エンドポイント グループ(NEG)に追加された Google Kubernetes Engine バックエンド(GKE)
  4. インスタンス グループと NEG:

    1. Compute Engine VM デプロイのマネージド インスタンス グループまたは非マネージド インスタンス グループ
    2. GKE デプロイの NEG

    各ゾーンで、デプロイ要件に基づいてバックエンド グループタイプを組み合わせることができます。

  5. バックエンドの準備状況を報告するリージョン ヘルスチェック。

  6. バックエンドの使用状況と健全性をモニタリングするリージョン バックエンド サービス。

  7. リージョン URL マップはリクエストの URL を解析し、リクエスト URL のホストとパスに基づいて特定のバックエンド サービスにリクエストを転送します。

  8. リージョン ターゲット HTTP または HTTPS プロキシ。ユーザーからリクエストを受け取り、URL マップに転送します。HTTPS の場合、リージョン SSL 証明書リソースを構成します。HTTPS 負荷分散を構成する場合、ターゲット プロキシは SSL 証明書を使用して SSL トラフィックを復号します。ターゲット プロキシは、HTTP または HTTPS でインスタンスをトラフィックに転送できます。

  9. ロードバランサの内部 IP アドレスを含む転送ルール。受信リクエストをターゲット プロキシに転送します。

ネットワークとサブネットの構成

ロードバランサのバックエンド用とロードバランサのプロキシ用の 2 つのサブネットが存在する VPC ネットワークが必要です。内部 HTTP(S) ロードバランサはリージョンです。VPC ネットワーク内のトラフィックは、ロードバランサと同じリージョンのサブネット内にある場合にロードバランサに転送されます。

この例では、次の VPC ネットワーク、リージョン、サブネットを使用します。

  • ネットワーク: ネットワークは、lb-network というカスタムモードの VPC ネットワークです。

  • バックエンドのサブネット: us-west1 リージョンの backend-subnet という名前のサブネット。プライマリ IP 範囲として 10.1.2.0/24 を使用します。

  • プロキシのサブネット: us-west1 リージョンの proxy-subnet という名前のサブネット。プライマリ IP 範囲として 10.129.0.0/26 を使用します。

バックエンドのネットワークとサブネットの構成

Console

  1. Google Cloud Platform Console で [VPC ネットワーク] ページに移動します。
    [VPC ネットワーク] ページに移動
  2. [VPC ネットワークを作成] をクリックします。
  3. [名前] に「lb-network」と入力します。
  4. [サブネット] セクションで次の設定を行います。
    • [サブネット作成モード] を [カスタム] に設定します。
    • [新しいサブネット] セクションに、次の情報を入力します。
      • 名前: backend-subnet
      • リージョン: us-west1
      • IP アドレス範囲: 10.1.2.0/24
      • [完了] をクリックします。
  5. [作成] をクリックします。

gcloud

  1. gcloud compute networks create コマンドを使用して、カスタム VPC ネットワークを作成します。

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. gecoud compute networks subnets create コマンドを使用して、us-west1 リージョンの lb-network ネットワークにサブネットを作成します。

    gcloud compute networks subnets create backend-subnet \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-west1
    

api

networks.insert メソッドに POST リクエストを送ります。[project-id] は、プロジェクト ID で置き換えます。

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/networks
{
  "routingConfig": {
    "routingMode": "REGIONAL"
  },
  "name": "lb-network",
  "autoCreateSubnetworks": false
}

subnetworks.insert メソッドに POST リクエストを送ります。[project-id] は、プロジェクト ID で置き換えます。

POST https://www.googleapis.com/compute/v1/projects/[project-id]/regions/us-west1/subnetworks
{
  "name": "backend-subnet",
  "network": "projects/[project-id]/global/networks/lb-network",
  "ipCidrRange": "10.1.2.0/24",
  "region": "projects/[project-id]/regions/us-west1",
}

プロキシ専用サブネットの構成

プロキシ専用サブネットは、us-west1 リージョン内のすべての内部 HTTP(S) ロードバランサで共有されるサブネットです。

Console

GCP Console を使用している場合は、Load Balancing の UI でプロキシ専用サブネットを作成することもできます。詳しくは、セットアップ プロセスを続けるをご覧ください。

gcloud

gcloud compute networks subnets create コマンドを使用して、プロキシ専用サブネットを作成します。

gcloud beta compute networks subnets create proxy-subnet \
  --purpose=INTERNAL_HTTPS_LOAD_BALANCER \
  --role=ACTIVE \
  --region=us-west1 \
  --network=lb-network \
  --range=10.129.0.0/26

api

subnetworks.insert メソッドを使用して、プロキシ専用サブネットを作成します。[project-id] は、プロジェクト ID で置き換えます。

POST https://www.googleapis.com/compute/projects/[project-id]/regions/us-west1/subnetworks
{
  "name": "proxy-subnet",
  "ipCidrRange": "10.129.0.0/26",
  "network": "projects/[project-id]/global/networks/lb-network",
  "region": "projects/[project-id]/regions/us-west1",
  "purpose": "INTERNAL_HTTPS_LOAD_BALANCER",
  "role": "ACTIVE"
}

ファイアウォール ルールの構成

この例では、次のファイアウォール ルールを使用します。

  • fw-allow-backend-subnet: VPC ネットワーク内のすべてのターゲットに適用される上りルール。10.1.2.0/24 範囲の送信元からのすべての TCP、UDP、ICMP トラフィックが許可されます。このルールにより、負荷分散されるインスタンス(VM)への backend-subnet 内の任意の送信元からのトラフィックが許可されます。この例では、ネットワーク内のすべてのインスタンスに適用されるファイアウォール ルールについて説明します。また、ロードバランサの実際のバックエンドにのみルールを適用することもできます。

  • fw-allow-ssh: 負荷分散されるインスタンスに適用される上りルール。任意のアドレスから TCP ポート 22 への SSH 受信接続が許可されます。このルールには、送信元の IP 範囲をより限定的に指定できます。たとえば、SSH セッションを開始するシステムの IP 範囲を指定できます。この例では、allow-ssh というターゲットタグを使用して、ファイアウォール ルールが適用される VM を識別します。

  • fw-allow-health-check: 負荷分散されたインスタンスに適用される上りルール。GCP ヘルスチェック システム(130.211.0.0/2235.191.0.0/16 からのすべての TCP トラフィックが許可されます。この例では、ターゲットタグ load-balanced-backend を使用して、適用するインスタンスを識別しています。

  • fw-allow-proxies: 負荷分散されるインスタンスに適用される上りルール。内部 HTTP(S) ロードバランサが管理するプロキシからポート 804438000 への TCP トラフィックが許可されます。この例では、ターゲットタグ load-balanced-backend を使用して、適用するインスタンスを識別しています。

これらのファイアウォール ルールを使用しないと、デフォルトの上り拒否ルールが適用され、バックエンド インスタンスへの受信トラフィックがブロックされます。

Console

  1. Google Cloud Platform Console で [ファイアウォール ルール] ページに移動します。
    [ファイアウォール ルール] ページに移動
  2. [ファイアウォール ルールを作成] クリックして次の情報を入力し、サブネット トラフィックを許可するルールを作成します。
    • 名前: fw-allow-backend-subnet
    • ネットワーク: lb-network
    • トラフィックの方向: 上り
    • 一致したときのアクション: 許可
    • ターゲット: ネットワーク内のすべてのインスタンス
    • ソースフィルタ: IP ranges
    • ソース IP の範囲: 10.1.2.0/24
    • プロトコルとポート: 指定されたプロトコルとポートを選択して、tcpudp または icmp を選択します。
  3. [作成] をクリックします。
  4. [ファイアウォール ルールを作成] を再度クリックして、SSH 接続の受信を許可するルールを作成します。
    • 名前: fw-allow-ssh
    • ネットワーク: lb-network
    • トラフィックの方向: 上り
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: allow-ssh
    • ソースフィルタ: IP ranges
    • ソース IP の範囲: 0.0.0.0/0
    • プロトコルとポート: 指定されたプロトコルとポートを選択し、tcp を選択して、ポート番号に 22 と入力します。
  5. [作成] をクリックします。
  6. [ファイアウォール ルールを作成] をもう一度クリックして、GCP ヘルスチェックを許可するルールを作成します。
    • 名前: fw-allow-health-check
    • ネットワーク: lb-network
    • トラフィックの方向: 上り
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: load-balanced-backend
    • ソースフィルタ: IP ranges
    • ソース IP の範囲: 130.211.0.0/2235.191.0.0/16
    • プロトコルとポート: 指定されたプロトコルとポートを選択して tcp を選択します(必要であれば、ポートのセットも選択します)。
  7. [作成] をクリックします。
  8. [ファイアウォール ルールを作成] をもう一度クリックして、ロードバランサのプロキシ サーバーにバックエンドへの接続を許可するルールを作成します。
    • 名前: fw-allow-proxies
    • ネットワーク: lb-network
    • トラフィックの方向: 上り
    • 一致したときのアクション: 許可
    • ターゲット: 指定されたターゲットタグ
    • ターゲットタグ: load-balanced-backend
    • ソースフィルタ: IP ranges
    • ソース IP の範囲: 10.129.0.0/26
    • プロトコルとポート: 指定されたプロトコルとポートを選択して tcp を選択し、ポート番号に 80, 443, 8000 を入力します。
  9. [作成] をクリックします。

gcloud

  1. gcloud compute firewall-rules create コマンドを使用して、サブネット内からの通信を許可する fw-allow-backend-subnet ファイアウォール ルールを作成します。

    gcloud compute firewall-rules create fw-allow-backend-subnet \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=10.1.2.0/24 \
        --rules=tcp,udp,icmp
    
  2. ネットワーク タグ allow-ssh を使用して、VM との SSH 接続を許可する fw-allow-ssh ファイアウォール ルールを作成します。source-ranges を省略すると、GCP は任意の送信元としてルールを解釈します

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    
  3. GCP ヘルスチェックを許可する fw-allow-health-check ルールを作成します。この例では、ヘルスチェック プローブからのすべての TCP トラフィックを許可します。ただし、必要に応じてポートの範囲を狭く構成することもできます。

    gcloud compute firewall-rules create fw-allow-health-check \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --source-ranges=130.211.0.0/22,35.191.0.0/16 \
        --target-tags=load-balanced-backend \
        --rules=tcp
    
  4. 内部 HTTP(S) ロードバランサのプロキシにバックエンドへの接続を許可する fw-allow-proxies ルールを作成します。

    gcloud compute firewall-rules create fw-allow-proxies \
      --network=lb-network \
      --action=allow \
      --direction=ingress \
      --source-ranges=10.129.0.0/26 \
      --target-tags=load-balanced-backend \
      --rules=tcp:80,tcp:443,tcp:8000
    

api

firewalls.insert メソッドに POST リクエストを送り、fw-allow-backend-subnet ファイアウォール ルールを作成します。[project-id] は、プロジェクト ID に置き換えます。

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/firewalls
{
  "name": "fw-allow-backend-subnet",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "10.1.2.0/24"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp"
    },
    {
      "IPProtocol": "udp"
    },
    {
      "IPProtocol": "icmp"
    }
  ],
  "direction": "INGRESS"
}

firewalls.insert メソッドに POST リクエストを送り、fw-allow-ssh ファイアウォール ルールを作成します。[project-id] は、プロジェクト ID に置き換えます。

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/firewalls
{
  "name": "fw-allow-ssh",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "0.0.0.0/0"
  ],
  "targetTags": [
    "allow-ssh"
  ],
  "allowed": [
   {
     "IPProtocol": "tcp",
     "ports": [
       "22"
     ]
   }
  ],
 "direction": "INGRESS"
}

firewalls.insert メソッドに POST リクエストを送り、fw-allow-health-check ファイアウォール ルールを作成します。[project-id] は、プロジェクト ID に置き換えます。

POST https://www.googleapis.com/compute/v1/projects/[project-id]/global/firewalls
{
  "name": "fw-allow-health-check",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "130.211.0.0/22",
    "35.191.0.0/16"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp"
    }
  ],
  "direction": "INGRESS"
}

firewalls.insert メソッドを使用して fw-allow-proxies ファイアウォール ルールを作成し、プロキシ サブネット内での TCP トラフィックを許可します。[project-id] はプロジェクト ID で置き換えます。

POST https://www.googleapis.com/compute/v1/projects/{project}/global/firewalls
{
  "name": "fw-allow-proxies",
  "network": "projects/[project-id]/global/networks/lb-network",
  "sourceRanges": [
    "10.129.0.0/26"
  ],
  "targetTags": [
    "load-balanced-backend"
  ],
  "allowed": [
    {
      "IPProtocol": "tcp",
      "ports": [
        "80"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "443"
      ]
    },
    {
      "IPProtocol": "tcp",
      "ports": [
        "8000"
      ]
    }
  ],
  "direction": "INGRESS"
}

セットアップ プロセスを続ける

内部 HTTP(S) 負荷分散を設定するには、Compute Engine VM 上で実行するか GKE ポッドで実行するかに応じて、次のいずれかの手順を行います。

次のステップ