設定具備外部後端的區域性外部 Proxy 網路負載平衡器

本指南說明如何設定區域性外部 Proxy 網路負載平衡器,將要求代理至外部後端。外部後端是指位於 Google Cloud外部的端點。

在您依循這份指南之前,請先熟悉 Internet NEG 總覽說明文件,包括限制

下圖架構顯示區域性外部 Proxy 網路負載平衡器前端,以及外部後端。

區域性外部 Proxy 網路負載平衡器,具有外部後端。
圖 1. 具有外部後端的區域性外部 Proxy 網路負載平衡器 (按一下可放大)。

權限

如要按照本指南操作,您必須建立網際網路 NEG,並在專案中建立或修改代理網路負載平衡器。您必須是專案擁有者或編輯者 (roles/ownerroles/editor),或是應具有以下兩個 Compute Engine 身分與存取權管理角色

工作 必要角色
建立及修改負載平衡器元件 Compute Network Admin
(roles/compute.networkAdmin)
建立及修改 NEG Compute 執行個體管理員
(roles/compute.instanceAdmin)

在 Google Cloud外部設定外部後端環境

如要設定外部後端環境,請參閱下列章節。

設定網路端點

設定網路端點,將外部後端公開給Google Cloud。請確認端點 (IP:Port 組合或完整網域名稱 (FQDN) 和通訊埠) 可透過網際網路存取。這個端點稍後會從網際網路 NEG 參照。

如要瞭解網際網路 NEG 端點的詳細設定需求,請參閱「網際網路 NEG 總覽」。

允許外部後端接收來自 Google Cloud的流量

完成建立僅限 Proxy 的子網路並設定 Cloud NAT 閘道後,即可完成這個步驟。

如要讓來自 Google Cloud 的請求連上外部後端,您必須執行下列步驟:

  1. 使用用於 Google Cloud外向流量的 IP 位址,設定 Cloud NAT 閘道。閘道會將僅限 Proxy 的子網路範圍對應至外部 IP 位址。如需步驟說明,請參閱「設定 Cloud NAT 閘道」。
  2. 請確認外部後端環境已設定為允許來自 Google Cloud 的流量傳送至外部後端。舉例來說,如果您為 NAT 閘道使用預先保留的 IP 位址,就會在外部環境中將這些 IP 位址加入許可清單。您可能需要與外部環境的網路或安全性管理員合作,才能完成這項設定。

設定 Google Cloud 環境

您需要具有兩個子網路的虛擬私有雲網路:一個用於負載平衡器元件,另一個用於區域的僅限 Proxy 子網路。接著,您將建立具有網際網路 NEG 後端的負載平衡器。

建立虛擬私有雲網路和子網路

這個子網路用於建立負載平衡器的元件。

Cloud 控制台

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
    前往「VPC networks」(虛擬私有雲網路)
  2. 按一下「建立虛擬私有雲網路」
  3. 輸入「名稱」LB_NETWORK
  4. 在「Subnets」(子網路) 區段中:
    • 將「Subnet creation mode」(子網路建立模式) 設為 [Custom] (自訂)
    • 在「New subnet」(新的子網路) 區段中,輸入以下資訊:
      • Name (名稱):LB_SUBNET_NAME
      • Region (區域):REGION
      • IP address range (IP 位址範圍):LB_SUBNET_RANGE
    • 按一下 [完成]
  5. 點選「建立」

gcloud

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

    gcloud compute networks create LB_NETWORK \
      --subnet-mode=custom
    
  2. LB_NETWORK 網路中建立子網路。

    gcloud compute networks subnets create LB_SUBNET_NAME \
      --network=LB_NETWORK \
      --range=LB_SUBNET_RANGE \
      --region=REGION
    

設定僅限 Proxy 的子網路

REGION 區域內所有區域 Envoy 型負載平衡器都會使用這個 Proxy 專用子網路。

主控台

  1. 在 Google Cloud 控制台中,前往「VPC Networks」(虛擬私有雲網路) 頁面。
    前往「VPC networks」(虛擬私有雲網路)
  2. 從清單中選取「網路」
  3. 按一下 [新增子網路]
  4. 輸入「名稱」PROXY_ONLY_SUBNET_NAME
  5. 選取「Region」(區域)REGION
  6. 將「用途」設為「區域受管理 Proxy」
  7. 輸入「IP address range」(IP 位址範圍)PROXY_ONLY_SUBNET_RANGE
  8. 按一下「新增」

gcloud

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

gcloud compute networks subnets create PROXY_ONLY_SUBNET_NAME \
  --purpose=REGIONAL_MANAGED_PROXY \
  --role=ACTIVE \
  --region=REGION \
  --network=LB_NETWORK \
  --range=PROXY_ONLY_SUBNET_RANGE

設定 Cloud NAT 閘道

設定 Cloud NAT 閘道前,請務必詳閱相關限制和定價考量。詳情請參閱「區域 NEG:使用 Cloud NAT 閘道」。

下列指令說明如何設定 Cloud NAT 閘道。Cloud NAT 閘道可設定為使用自動 NAT 外部 IP 位址 (分配方式是根據需求),或使用手動預先保留的外部 IP 位址組合。閘道會將僅限 Proxy 的子網路範圍對應至外部 IP 位址。

設定自動 NAT 分配 IP 位址

建立 Cloud NAT 閘道時,如果要使用自動 NAT IP 位址分配功能,您可以指定 Cloud NAT 閘道分配 IP 位址的網路服務級別 (進階級或標準級)。

主控台

  1. 前往 Google Cloud 控制台的「Cloud NAT」頁面。

    前往 Cloud NAT

  2. 按一下「開始使用」或「建立 Cloud NAT 閘道」

  3. 輸入閘道名稱 LB_NAT_CONFIG

  4. 在「NAT 類型」中,選取「Public」

  5. 在「Network」(網路) 清單中選取「LB_NETWORK」。

  6. 在「Region」(區域) 清單中選取「REGION」。

  7. 在該地區建立 Cloud Router。

  8. 在「Source endpoint type」中,選取「Managed proxy load balancers」

  9. 在「Source」(來源) 清單中,選取「Custom」(自訂)

    • 在「子網路」中,選取 PROXY_ONLY_SUBNET_NAME
  10. 在「Cloud NAT IP 位址」清單中,選取「自動 (建議)」

  11. 在「Network service tier」(網路服務級別) 部分,選擇「Premium」(進階級) 或「Standard」(標準)。

  12. 點選「建立」

gcloud

如果外部後端環境不需要您將可將流量傳送至外部後端的特定 IP 位址加入許可清單,請使用動態分配的 IP 位址。 Google Cloud

  1. 建立 Cloud Router:

    gcloud beta compute routers create ROUTER_NAME \
      --network=LB_NETWORK \
      --region=REGION
  2. 設定 Cloud NAT 閘道。

    gcloud beta compute routers nats create LB_NAT_CONFIG \
      --router=ROUTER_NAME \
      --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
      --nat-custom-subnet-ip-ranges=PROXY_ONLY_SUBNET_NAME \
      --auto-allocate-nat-external-ips \
      --region=REGION
    

更改下列內容:

  • LB_NAT_CONFIG:NAT 設定的名稱。

  • ROUTER_NAME:Cloud Router 的名稱。

  • REGION:要建立的 NAT 區域。如果未指定,系統可能會提示您選取區域 (僅限互動模式)。

  • PROXY_ONLY_SUBNET_NAME:僅限 Proxy 子網路的名稱。

設定手動分配的 IP 位址

只有在外部後端環境要求您為特定 Google Cloud IP 位址使用許可清單時,才使用手動指派的 IP 位址。如果外部後端環境不需要許可清單,請改用動態分配功能,如上文所述。

建立 Cloud NAT 閘道時,您可以選擇手動指派 NAT IP 位址 (取決於特定條件),並從進階級別或標準級別指派。

主控台

  1. 前往 Google Cloud 控制台的「Cloud NAT」頁面。

    前往 Cloud NAT

  2. 按一下「開始使用」或「建立 Cloud NAT 閘道」

  3. 輸入閘道名稱 LB_NAT_CONFIG

  4. 在「Network」(網路) 清單中選取「LB_NETWORK」。

  5. 在「Region」(區域) 清單中選取「REGION」。

  6. 選取或建立該區域的 Cloud Router。

  7. 在「Source endpoint type」中,選取「Managed proxy load balancers」

  8. 在「Source」(來源) 清單中,選取「Custom」(自訂)

    • 在「子網路」中,選取 PROXY_ONLY_SUBNET_NAME
  9. 在「Cloud NAT IP 位址」清單中,選取「手動」

  10. 在「Network service tier」(網路服務級別) 部分,選擇「Premium」(進階級) 或「Standard」(標準)。

  11. 選取或建立要用於 NAT 的靜態預留外部 IP 位址。

  12. 如要指定其他 IP 位址,請按一下「Add IP address」(新增 IP 位址),然後選取或建立其他靜態保留外部 IP 位址。

  13. 點選「建立」

gcloud

  1. 建立 IP 位址。由於閘道會執行一對一的 NAT 轉譯,因此您必須確保保留的 IP 位址集區足夠大,才能處理預期的流量量。如果分配的 NAT IP 位址數量不足,可能會導致流量流失。

    gcloud compute addresses create IP_ADDRESS_NAME_1 IP_ADDRESS_NAME_2 [IP_ADDRESS_NAME_3 ...] \
      --region=REGION
    
  2. 建立 Cloud Router:

    gcloud compute routers create ROUTER_NAME \
      --network=LB_NETWORK \
      --region=REGION
  3. 設定 Cloud NAT 閘道。

    gcloud beta compute routers nats create LB_NAT_CONFIG \
      --router=ROUTER_NAME \
      --endpoint-types=ENDPOINT_TYPE_MANAGED_PROXY_LB \
      --nat-custom-subnet-ip-ranges=PROXY_ONLY_SUBNET_NAME \
      --nat-external-ip-pool=IP_ADDRESS_NAME_1,IP_ADDRESS_NAME_2,[IP_ADDRESS_NAME_3 ...] \
      --region=REGION
    

    更改下列內容:

  • LB_NAT_CONFIG:NAT 設定的名稱。

  • ROUTER_NAME:Cloud Router 的名稱。

  • PROXY_ONLY_SUBNET_NAME:僅限 Proxy 子網路的名稱。

  • REGION:要建立的 NAT 區域。如果未指定,系統可能會提示您選取區域 (僅限互動模式)。

設定動態通訊埠分配

更新 Cloud NAT 閘道,以便使用動態通訊埠分配模式,充分運用已指派的 IP 位址。

gcloud

  1. 更新 Cloud NAT 閘道。建議您將通訊埠數量下限設為 2048,上限設為 4096。

    gcloud compute routers nats update LB_NAT_CONFIG \
        --router=ROUTER_NAME \
        --enable-dynamic-port-allocation \
        --min-ports-per-vm=MIN_PORTS_PER_VM \
        --max-ports-per-vm=MAX_PORTS_PER_VM \
        --region=REGION
    
  2. 確認已啟用動態通訊埠分配功能,且已設定通訊埠的最低和最高數量。

    gcloud compute routers nats describe LB_NAT_CONFIG \
         --router=ROUTER_NAME \
         --region=REGION
    

    輸出結果會與下列內容相似:

    enableDynamicPortAllocation: true
    enableEndpointIndependentMapping: false
    endpointTypes:
    ‐ ENDPOINT_TYPE_MANAGED_PROXY_LB
    logConfig:
      enable: true
      filter: ALL
    maxPortsPerVm: 4096
    minPortsPerVm: 2048
    name: LB_NAT_CONFIG
    natIpAllocateOption: MANUAL_ONLY
    natIps:
    ‐ https://www.googleapis.com/compute/projects/PROJECT_NAME/regions/REGION/addresses/ADDRESS
    sourceSubnetworkIpRangesToNat: ALL_SUBNETWORKS_ALL_IP_RANGES
    type: PUBLIC
    

詳情請參閱 Cloud NAT 說明文件中的「指定 NAT 的子網路範圍」。

請務必為外部後端環境的 NAT IP 位址範圍使用許可清單,以便外部後端接收來自 Google Cloud的流量。

保留負載平衡器的 IP 位址

為負載平衡器保留靜態 IP 位址。

主控台

  1. 在 Google Cloud 控制台,前往「Reserve a static address」(預約靜態位址) 頁面。

    前往「保留靜態位址」

  2. 為新地址選擇「名稱」

  3. 在「Network Service Tier」中,選取「Standard」

  4. 在「IP 版本」部分,選取「IPv4」。IPv6 位址只限通用位址,且只適用於全球負載平衡器。

  5. 在「Type」(類型) 中,選取「Regional」(區域)

  6. 選擇一個 [Region] (地區)

  7. 將「Attached to」(連接至) 選項設為「None」(無)。建立負載平衡器後,這個 IP 位址就會附加至負載平衡器的轉送規則。

  8. 按一下「Reserve」,即可預留 IP 位址。

gcloud

  1. 如要使用 gcloud compute 保留靜態外部 IP 位址,請使用 compute addresses create 指令

    gcloud compute addresses create LB_IP_ADDRESS  \
       --region=REGION \
       --network-tier=STANDARD
    

    更改下列內容:

    • LB_IP_ADDRESS:您要稱呼此位址的名稱。
    • REGION:您要保留這個位址的地區。此區域應與負載平衡器位於相同區域。所有區域 IP 位址都是 IPv4
  2. 使用 compute addresses describe 指令查看結果:

    gcloud compute addresses describe LB_IP_ADDRESS
    

設定網際網路 NEG

您可以使用 INTERNET_FQDN_PORT 端點或 INTERNET_IP_PORT 端點建立網際網路 NEG。

主控台

建立含有 INTERNET_FQDN_PORT 端點的 NEG

  1. 在 Google Cloud 控制台中,前往「Network endpoint group」(網路端點群組) 頁面。

    前往網路端點群組

  2. 按一下「建立網路端點群組」

  3. 為網際網路 NEG 指定 INTERNET_NEG_NAME。詳情請參閱「資源命名慣例」。

  4. 在「網路端點群組類型」清單中,選取「網路端點群組 (網際網路)」,然後執行下列操作:

    • 在「範圍」清單中選取「區域」
    • 選用步驟:在「Region」清單中,變更此 NEG 的 REGION
    • 在「Network」(網路) 清單中選取「LB_NETWORK」。
    • 在「Default port」方塊中輸入 DEFAULT_PORT_NUMBER
    • 在「透過」清單中,選取「完整網域名稱與通訊埠」
  5. 選取 [Create] (建立)。

INTERNET_FQDN_PORT 端點新增至 NEG

  1. 在 Google Cloud 控制台中,前往「Network endpoint group」(網路端點群組) 頁面。

    前往網路端點群組

  2. 按一下「INTERNET_NEG_NAME」。
  3. 請輸入完整網域名稱,例如 myorg.example.com。您必須使用標準 FQDN 語法指定 FQDN 物件。

  4. 選用:在「Port type」(通訊埠類型) 中,選取「Custom」(自訂)。如果「通訊埠類型」Default,系統會使用 NEG 的預設通訊埠。

  5. 在「Port number」(通訊埠編號) 方塊中輸入 PORT_NUMBER_1
  6. 選取 [Create] (建立)。

建立含有 INTERNET_IP_PORT 端點的 NEG

  1. 在 Google Cloud 控制台中,前往「Network endpoint group」(網路端點群組) 頁面。

    前往網路端點群組

  2. 按一下「建立網路端點群組」

  3. 指定網路 NEG 的名稱 INTERNET_NEG_NAME。詳情請參閱「資源命名慣例」。

  4. 在「網路端點群組類型」清單中,選取「網路端點群組 (網際網路)」,然後執行下列操作:

    • 在「範圍」清單中選取「區域」
    • 選用步驟:在「Region」清單中,變更此 NEG 的 REGION
    • 在「Network」(網路) 清單中選取「LB_NETWORK」。
    • 在「Default port」方塊中輸入 DEFAULT_PORT_NUMBER
    • 在「Add endpoints through」清單中,選取「IP 和通訊埠」
  5. 選取 [Create] (建立)。

INTERNET_IP_PORT 端點新增至 NEG

  1. 在 Google Cloud 控制台中,前往「Network endpoint group」(網路端點群組) 頁面。

    前往網路端點群組

  2. 按一下「INTERNET_NEG_NAME」。
  3. 在「IP 位址」欄位中輸入 IP_ADDRESS_1
  4. 選用:在「Port type」清單中,選取「Custom」。如果「通訊埠類型」Default,系統會使用 NEG 的預設通訊埠。

  5. 在「Port number」(通訊埠編號) 欄位中輸入 PORT_NUMBER_1
  6. 選取 [Create] (建立)。

gcloud

如要建立含有 INTERNET_FQDN_PORT 端點的 NEG,請按照下列步驟操作:

  1. 建立 NEG 資源。

    gcloud beta compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type=INTERNET_FQDN_PORT \
        --default-port=DEFAULT_PORT_NUMBER \
        --network=LB_NETWORK \
        --region=REGION
    
  2. 將端點新增至 NEG。如果未指定通訊埠,系統會使用 NEG 的預設通訊埠。

    gcloud beta compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME_1,port=PORT_NUMBER_1" \
        [--add-endpoint="fqdn=FULLY_QUALIFIED_DOMAIN_NAME_2,port=PORT_NUMBER_2" \]
        --region=REGION
    

    更改下列內容:

    • FULLY_QUALIFIED_DOMAIN_NAME:端點的完整網域名稱
    • PORT_NUMBER:端點的通訊埠號碼

    每個 NEG 最多可新增 256 個端點。

如果網域可透過網際網路解析,則不需要其他設定即可設定 DNS。不過,如果您使用私人 FQDN,就必須設定 Cloud DNS,以利 DNS 解析。名稱必須託管在 Cloud DNS 上,或是可透過 DNS 轉送從 Cloud DNS 解析至內部部署 DNS。

請先建立 Cloud DNS 區域,以便在專案中代管 DNS 記錄。然後新增 DNS 記錄。如需具體設定步驟,請參閱 Cloud DNS 說明文件

如要建立含有 INTERNET_IP_PORT 端點的 NEG,請按照下列步驟操作:

  1. 建立 NEG 資源。

    gcloud beta compute network-endpoint-groups create INTERNET_NEG_NAME \
        --network-endpoint-type=INTERNET_IP_PORT \
        --default-port=DEFAULT_PORT_NUMBER \
        --network=LB_NETWORK \
        --region=REGION
    
  2. 將端點新增至 NEG。如果未指定通訊埠,系統會使用 NEG 的預設通訊埠。

    gcloud beta compute network-endpoint-groups update INTERNET_NEG_NAME \
        --add-endpoint="ip=IP_ADDRESS_1,port=PORT_NUMBER_1" \
        [--add-endpoint="ip=IP_ADDRESS_2,port=PORT_NUMBER_2" \]
        --region=REGION
    

    更改下列內容:

    • IP_ADDRESS:端點的 IP 位址
    • PORT_NUMBER:端點的通訊埠號碼

    您可以重複執行這個步驟,最多可為每個 NEG 新增 256 個端點。

建立負載平衡器

主控台

開始設定

  1. 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。

    前往「Load balancing」(負載平衡) 頁面

  2. 點選「建立負載平衡器」
  3. 在「負載平衡器類型」部分,選取「網路負載平衡器 (TCP/UDP/SSL)」,然後點選「下一步」
  4. 在「直通或使用 Proxy」部分,選取「Proxy load balancer」,然後點選「Next」
  5. 在「公開或內部」部分,選取「公開 (外部)」,然後點選「下一步」
  6. 在「全域或單一區域部署」部分,選取「最適合區域工作負載」,然後點選「Next」
  7. 按一下 [設定]

基本設定

  1. 輸入「負載平衡器名稱」
  2. 在「Region」(區域) 中選取 REGION
  3. 在「Network」(網路) 中選取 LB_NETWORK

保留僅限 Proxy 子網路

如要保留僅限 Proxy 的子網路,請按照下列步驟操作:

  1. 按一下「保留子網路」
  2. 在「Name」(名稱) 中輸入 PROXY_ONLY_SUBNET_NAME
  3. 在「IP address range」(IP 位址範圍) 中,輸入 PROXY_ONLY_SUBNET_RANGE
  4. 按一下「新增」

前端設定

  1. 按一下「前端設定」
  2. 輸入名稱
  3. 在「Network Service Tier」(網路服務級別) 部分,選取「Standard」(標準)。
  4. 在「IP 位址」部分,選取先前預留的 IP 位址:LB_IP_ADDRESS
  5. 在「Port number」 中,指定介於 1 至 65535 之間的單一通訊埠編號。轉送規則只會轉送相符的目的地通訊埠封包。
  6. 按一下 [完成]

後端設定

  1. 按一下「後端設定」
  2. 按一下「後端服務和後端值區」
  3. 按一下「建立後端服務」
  4. 輸入名稱。
  5. 在「Backend type」部分,選取「Internet network endpoint group」
  6. 在「通訊協定」中,選取「TCP」
  7. 針對「後端」,請在「New backend」視窗中選取上一個步驟建立的「Regional internet network endpoint group」
  8. 按一下 [完成]
  9. 設定健康狀態檢查:
    1. 在「健康狀態檢查」部分,選取「建立健康狀態檢查」
    2. 將健康狀態檢查名稱設為 TCP_HEALTH_CHECK_NAME
    3. 在「通訊協定」中,選取「TCP」
    4. 將「Port」(通訊埠) 設為 80
    5. 保留剩餘的預設值,然後按一下「儲存」
  10. 點選「建立」

檢查並完成

  1. 按一下「檢查並完成」
  2. 如果沒有任何問題,請按一下「建立」

gcloud

  1. 選用:建立健康狀態檢查。外部後端的健康狀態檢查探測會使用分散式 Envoy 健康狀態檢查,並在之後進行 NAT 轉譯。
      gcloud compute health-checks create tcp TCP_HEALTH_CHECK_NAME \
          --region=REGION \
          --use-serving-port
      
  2. 建立後端服務:
      gcloud compute backend-services create BACKEND_SERVICE \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --health-checks=TCP_HEALTH_CHECK_NAME \
          --health-checks-region=REGION \
          --region=REGION
      
  3. 將網際網路 NEG 新增至後端服務:
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --network-endpoint-group-region=REGION \
          --region=REGION
       
      gcloud compute backend-services add-backend BACKEND_SERVICE \
          --network-endpoint-group=INTERNET_NEG_NAME \
          --network-endpoint-group-region=REGION \
          --region=REGION
       
  4. 建立目標 TCP Proxy,將要求轉送至後端服務。

      gcloud compute target-tcp-proxies create TARGET_TCP_PROXY_NAME \
          --backend-service=BACKEND_SERVICE \
          --region=REGION
      
  5. 建立轉送規則,將傳入要求轉送至 Proxy。針對 `--ports`,請指定單一通訊埠編號,範圍為 1 至 65535。轉送規則只會轉送相符的目的地通訊埠封包。

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=EXTERNAL_MANAGED \
          --network-tier=STANDARD \
          --network=LB_NETWORK \
          --address=LB_IP_ADDRESS \
          --target-tcp-proxy=TARGET_TCP_PROXY_NAME \
          --target-tcp-proxy-region=REGION \
          --region=REGION \
          --ports=PORT_NUMBER
      

測試負載平衡器

負載平衡器設定完畢後,您可以測試將流量傳送至負載平衡器的 IP 位址。

  1. 取得負載平衡器的 IP 位址。

    如要取得 IPv4 位址,請執行下列指令:

    gcloud compute addresses describe LB_IP_ADDRESS
    
  2. 在建立負載平衡器轉送規則時指定的 IP 位址和通訊埠,將流量傳送至負載平衡器。測試網際網路 NEG 後端是否回應要求,取決於在外部端點上執行的服務。

後續步驟