設定內部 HTTP(S) 負載平衡的事前準備

設定內部 HTTP(S) 負載平衡包含兩個階段:

  • 執行事前準備工作,例如確保必要帳戶具有正確的權限,以及準備虛擬私人雲端網路
  • 設定負載平衡器資源

本指南說明如何設定必備條件, 其他指南則說明如何設定負載平衡資源。

在您依循這份指南操作之前,請先熟悉以下概念:

權限

如要依照本指南的說明操作,您必須能在專案中建立執行個體與修改網路。您必須是專案擁有者或編輯者,或是必須具有以下所有 Compute Engine 身分與存取權管理角色

工作 必要角色
建立網路、子網路和負載平衡器元件 網路管理員
新增與移除防火牆規則 安全管理員
建立執行個體 執行個體管理員

設定總覽

您可以按照以下整體設定流程所述來設定內部 HTTP(S) 負載平衡。以下各個步驟編號對應至圖表中所標示的編號。

已標示編號的內部 HTTP(S) 負載平衡元件 (按一下可放大)
已標示編號的內部 HTTP(S) 負載平衡元件 (按一下可放大)

如圖所示,這個範例在 us-west1 地區的虛擬私人雲端網路中建立了一個內部 HTTP(S) 負載平衡器,其中具有一個後端服務和兩個後端群組。

這個圖表顯示以下資訊:

  1. 具有兩個子網路的虛擬私人雲端網路:

    1. 一個子網路是用於後端 (執行個體群組和 NEG) 和轉送規則。其主要 IP 位址範圍為 10.1.2.0/24

    2. 一個子網路是 us-west1 地區中的僅限 Proxy 子網路。您必須在使用內部 HTTP(S) 負載平衡器的虛擬私人雲端網路的每個地區中,建立一個僅限 Proxy 的子網路。該地區的僅限 Proxy 子網路會在該地區的所有內部 HTTP(S) 負載平衡器之間共用。系統會從僅限 Proxy 的子網路中分配從內部 HTTP(S) 負載平衡器傳送至服務後端之封包的來源位址。在這個範例中,該地區的僅限 Proxy 子網路的主要 IP 位址範圍為 10.129.0.0/26。詳情請參閱內部 HTTP(S) 負載平衡器適用的僅限 Proxy 子網路

  2. 允許所需流量在網路中流動的防火牆規則。其中包括新增一個允許來自 10.129.0.0/26 的 TCP 通訊埠 80、443 和 8000 流量的規則 (這個範例中的僅限 Proxy 的子網路範圍),以及新增另一個健康狀態檢查探測的規則。

  3. 後端執行個體。這個範例將示範以下後端部署:

    1. Google Compute Engine VM
    2. 新增至網路端點群組 (NEG) 的 Google Kubernetes Engine (GKE) 後端
  4. 執行個體群組和 NEG:

    1. Compute Engine VM 部署的代管或非代管執行個體群組
    2. GKE 部署的 NEG

    在每個區域中,您可以根據您的部署需求擁有不同類型的後端群組組合。

  5. 回報後端完備性的地區健康狀態檢查。

  6. 監控後端使用情況和健康狀態的地區後端服務。

  7. 地區網址對應,這項服務會剖析要求的網址,並根據要求網址的主機和路徑,將要求轉送至特定的後端服務。

  8. 地區目標 HTTP 或 HTTPS Proxy,這項服務會接收來自使用者的要求,並將其轉送至網址對應。如為 HTTPS,請設定地區安全資料傳輸層 (SSL) 憑證資源。如果您設定了 HTTPS 負載平衡,目標 Proxy 會使用安全資料傳輸層 (SSL) 憑證來解密安全資料傳輸層 (SSL) 流量。目標 Proxy 可透過 HTTP 或 HTTPS 將流量轉送至您的執行個體。

  9. 具有負載平衡器內部 IP 位址的轉送規則,可將每個傳入要求轉送至目標 Proxy。

設定網路和子網路

您需要具有兩個子網路的虛擬私人雲端網路:一個用於負載平衡器的後端,另一個用於負載平衡器的 Proxy。內部 HTTP(S) 負載平衡器具有地區性。如果流量來源位於與負載平衡器相同地區的子網路中,虛擬私人雲端網路內的流量會轉送至負載平衡器。

這個範例會使用以下虛擬私人雲端網路、地區和子網路:

  • 網路:網路是名為 lb-network自訂模式虛擬私人雲端網路

  • 後端的子網路:us-west1 地區中名為 backend-subnet 的子網路使用 10.1.2.0/24 做為其主要 IP 範圍。

  • Proxy 的子網路:us-west1 地區中名為 proxy-subnet 的子網路使用 10.129.0.0/26 做為其主要 IP 範圍。

為後端設定網路和子網路

Console

  1. 前往 Google Cloud Platform Console 的「VPC networks」(VPC 網路) 頁面。
    前往「VPC networks」(VPC 網路) 頁面
  2. 按一下 [Create VPC network] (建立虛擬私人雲端網路)
  3. 在「Name」(名稱) 欄位中輸入 lb-network
  4. 在「Subnets」(子網路) 區段中:
    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
      • 「Name」(名稱)backend-subnet
      • 「Region」(地區)us-west1
      • 「IP address range」(IP 位址範圍)10.1.2.0/24
      • 按一下 [Done] (完成)
  5. 按一下 [Create] (建立)。

gcloud

  1. 使用 gcloud compute networks create 指令,建立自訂虛擬私人雲端網路:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. 使用 gcloud 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",
}

設定僅限 Proxy 的子網路

僅限 Proxy 的子網路適用於 us-west1 地區中的所有內部 HTTP(S) 負載平衡器。

Console

如果您使用的是 GCP Console,您可以等之後再於負載平衡 UI 中建立僅限 Proxy 的子網路。詳情請參閱繼續進行設定程序

gcloud

使用 gcloud compute networks subnets create 指令,建立僅限 Proxy 的子網路。

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 方法建立僅限 Proxy 的子網路,將「[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:適用於虛擬私人雲端網路中所有目標的輸入規則,允許來源在 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:輸入規則,適用於要進行負載平衡的執行個體,可在 804438000 通訊埠上允許來自內部 HTTP(S) 負載平衡器代管 Proxy 的 TCP 流量。這個範例會使用目標標記 load-balanced-backend 來辨識應套用這項規則的執行個體。

如果沒有這些防火牆規則,預設拒絕輸入規則將會封鎖傳入至後端執行個體的流量。

Console

  1. 前往 Google Cloud Platform 主控台的「Firewall rules」(防火牆規則) 頁面。
    前往「Firewall rules」(防火牆規則) 頁面
  2. 按一下 [Create firewall rule] (建立防火牆規則),然後輸入以下資訊以建立允許子網路流量的規則:
    • 「Name」(名稱)fw-allow-backend-subnet
    • 「Network」(網路)lb-network
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Targets」(目標):[All instances in the network] (網路中的所有執行個體)
    • 「Source filter」(來源篩選器)IP ranges
    • 「Source IP ranges」(來源 IP 範圍)10.1.2.0/24
    • 「Protocols and ports」(通訊協定和通訊埠):選擇 [Specified protocols and ports] (指定的通訊協定和通訊埠),然後勾選 tcpudpicmp
  3. 按一下 [Create] (建立)。
  4. 再次按一下 [Create firewall rule] (建立防火牆規則),以建立允許連入 SSH 連線的規則:
    • 「Name」(名稱)fw-allow-ssh
    • 「Network」(網路)lb-network
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Target」(目標):[Specified target tags] (指定的目標標記)
    • 「Target tags」(目標標記):allow-ssh
    • 「Source filter」(來源篩選器)IP ranges
    • 「Source IP ranges」(來源 IP 範圍)0.0.0.0/0
    • 「Protocols and ports」(通訊協定和通訊埠):選擇 [Specified protocols and ports] (指定的通訊協定和通訊埠),勾選 tcp,然後在通訊埠編號中輸入 22
  5. 按一下 [Create] (建立)。
  6. 第三次按一下 [Create firewall rule] (建立防火牆規則),以建立允許 GCP 健康狀態檢查的規則:
    • 「Name」(名稱)fw-allow-health-check
    • 「Network」(網路)lb-network
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Target」(目標):[Specified target tags] (指定的目標標記)
    • 「Target tags」(目標標記)load-balanced-backend
    • 「Source filter」(來源篩選器)IP ranges
    • 「Source IP ranges」(來源 IP 範圍)130.211.0.0/2235.191.0.0/16
    • 「Protocols and ports」(通訊協定和通訊埠):選擇 [Specified protocols and ports] (指定的通訊協定和通訊埠),然後勾選 tcp (可視需要選擇一組通訊埠)。
  7. 按一下 [Create] (建立)
  8. 第四次按一下 [Create firewall rule] (建立防火牆規則),以建立允許負載平衡器 Proxy 伺服器連結後端的規則:
    • 「Name」(名稱)fw-allow-proxies
    • 「Network」(網路)lb-network
    • 「Direction of traffic」(流量方向):[ingress] (輸入)
    • 「Action on match」(相符時執行的動作):[allow] (允許)
    • 「Target」(目標):指定的目標標記
    • 「Target tags」(目標標記)load-balanced-backend
    • 「Source filter」(來源篩選器)IP ranges
    • 「來源 IP 範圍」10.129.0.0/26
    • 「Protocols and ports」(通訊協定和通訊埠):選擇 [Specified protocols and ports] (指定的通訊協定和通訊埠),勾選 tcp,然後在通訊埠編號中輸入 80, 443, 8000
  9. 按一下 [Create] (建立)

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. 建立 fw-allow-ssh 防火牆規則以允許與具有 allow-ssh 網路標記的 VM 建立 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. 建立 fw-allow-health-check 規則以允許 GCP 健康狀態檢查。這個範例可允許來自健康狀態檢查探測器的所有 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. 建立 fw-allow-proxies 規則以允許內部 HTTP(S) 負載平衡器的 Proxy 連結後端。

    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 要求並將「[project-id]」替換為您的專案 ID,藉此建立 fw-allow-backend-subnet 防火牆規則。

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 要求並將「[project-id]」替換為您的專案 ID,藉此建立 fw-allow-ssh 防火牆規則。

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 要求並將「[project-id]」替換為您的專案 ID,藉此建立 fw-allow-health-check 防火牆規則。

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 防火牆規則以允許 Proxy 子網路內的 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 Pod 上執行,使用以下其中一項程序:

後續步驟