內部負載平衡和 DNS 名稱

DNS 位址記錄 (稱為「A 記錄」) 是用來對應 DNS 名稱與 IP 位址。在設定內部負載平衡器時,您可以選擇為 GCP 指定「服務標籤」,為負載平衡器建立 Compute Engine 內部 DNS 名稱。此內部 DNS 名稱由您的專案 ID、內部轉送規則名稱和您選擇的服務標籤所構成。

位於同一專案、虛擬私人雲端 (VPC) 網路和地區中的用戶端 VM,均可使用內部 DNS 名稱 (A 記錄) 代替轉送規則的 IP 位址,藉此向負載平衡器傳送流量。在程式碼和指令碼中,您可以用 DNS 名稱代替 IP 位址。

規格

  • 內部負載平衡器支援下列功能:

    • 內部 TCP/UDP 負載平衡器
  • 如要進一步瞭解 GCP 為負載平衡器建立的 DNS 名稱格式,請參閱 DNS 記錄格式一節。由於 DNS 名稱包含轉送規則名稱,因此即使您在多個轉送規則中使用相同的服務標籤,各個 DNS 名稱也不會有重複的問題。

  • 位於同一專案和 VPC 網路中任何地區的用戶端 VM,均可執行負載平衡器內部 DNS 名稱的 DNS 搜尋;不過用戶端 VM 必須與負載平衡器位於同一地區才能向其傳送流量。

  • 您只能在「建立」內部轉送規則時指定服務標籤。您無法為現有的內部轉送規則新增服務標籤。不過,您可以將現有的轉送規則替換為具有服務標籤的新轉送規則。如果您先刪除了原始轉送規則,替代的轉送規則可以使用與原始 IP 位址相同的內部 IP 位址。

  • 透過服務標籤建立的內部 DNS 名稱具有下列限制:

    • 不會建立對應的反向 (PTR) 記錄。
    • 每個內部轉送規則只能有一個服務標籤。
    • 除了服務標籤和轉送規則名稱,您不能變更內部 DNS 名稱中的其他部分,包括格式和網域名稱 (.internal)。

    如果您的內部負載平衡器需要更有彈性的 DNS 名稱,您可以在 Cloud DNS 代管的私人區域中建立自訂記錄。

DNS 記錄格式

內部 TCP/UDP 負載平衡器專屬的 Compute Engine 內部 DNS A 記錄會使用下列格式:

  • 內部 TCP/UDP 負載平衡:

    [SERVICE_LABEL].[FORWARDING_RULE_NAME].il4.[REGION].lb.[PROJECT_ID].internal

其中

  • [SERVICE_LABEL] 是您指定的服務標籤,格式如下:
    • 您最多可以使用 63 個小寫字母 (az)、數字 (09) 或破折號 (-)。
    • 服務標籤的開頭必須為小寫字母。
    • 服務標籤的結尾必須為小寫字母或數字。
  • [FORWARDING_RULE_NAME] 是您建立轉送規則時所設定的名稱。
  • [REGION] 是您建立轉送規則的地區。
  • [PROJECT_ID] 是您的專案 ID。格式為 organization:project-id 的專案 ID 會轉換為 project-id.organization。舉例來說,如果您的專案 ID 為 example.com:example-marketing-prod,GCP 會使用 example-marketing-prod.example.com

建立具有服務標籤的內部轉送規則

此程序顯示將服務標籤指派給內部負載平衡器中內部轉送規則的步驟。前端設定的屬性和後段設定的其他屬性均會省略。如需完整範例,請參閱:

  • 設定內部 TCP/UDP 負載平衡一文;在 gcloud 和 API 欄位中,以適當的值取代預留位置:

  • [FORWARDING_RULE_NAME] 是內部轉送規則的名稱。

  • [REGION] 是內部 TCP/UDP 負載平衡器所在的地區。

  • [BACKEND_SERVICE_NAME] 是內部 TCP/UDP 負載平衡器的後端服務名稱。

  • [NETWORK] 是內部 TCP/UDP 負載平衡器的 VPC 網路名稱。

  • [SUBNET] 是指定 VPC 網路中的子網路名稱,與負載平衡器後端服務位於相同地區。

  • [INTERNAL_IP] 是所選子網路中主要 IP 範圍內的內部 IP 位址。您可以省略 --address 旗標,由 GCP 為您選擇可用的 IP 位址。

  • [PROTOCOL]TCPUDP,與後端服務的通訊協定相符。

  • [PORTS] 是一個陣列,最多可包含五個以數字表示的通訊埠,或是 ALL 字樣。詳情請參閱轉送規則和通訊埠規格一節。

  • [SERVICE_LABEL] 是所需的服務標籤,必須遵循命名慣例

對於內部 TCP/UDP 負載平衡器,loadBalancingSchemeINTERNAL

Console

  1. 前往 Google Cloud Platform 主控台的「負載平衡」頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 按一下 [Create load balancer] (建立負載平衡器)
  3. 在「TCP Load Balancing」(TCP 負載平衡) 或「UDP Load Balancing」(UDP 負載平衡) 下,按一下 [Start configuration] (啟動設定)
  4. 在「Internet facing or internal only」(連結網際網路或僅限內部) 下,選取 [Only between my VMs] (僅在我的 VM 之間),然後按一下 [Continue] (繼續)
  5. 在「Name」(名稱) 中輸入負載平衡器的名稱。
  6. 完成「Backend configuration」(後端設定)
  7. 按一下 [Frontend configuration] (前端設定)。完成前端設定,在該區段底部指定「Service label」(服務標籤)
  8. 依序按一下 [Done] (完成) 及 [Review and finalize] (檢查並完成)

gcloud

gcloud compute forwarding-rules create [FORWARDING_RULE_NAME] \
    --load-balancing-scheme=INTERNAL | --load-balancing-scheme=INTERNAL_MANAGED \
    --region=[REGION] \
    --backend-service-region=[REGION] \
    --backend-service=[BACKEND_SERVICE_NAME] \
    --network=[NETWORK] \
    --subnet=[SUBNET] \
    --address=[INTERNAL_IP] \
    --ip-protocol=[PROTOCOL] \
    --ports=[PORTS] \
    --service-label=[SERVICE_LABEL]

API

使用 forwardingRules.insert 方法新增轉送規則和服務標籤

POST https://www.googleapis.com/compute/v1/projects/[PROJECT]/regions/[REGION]/forwardingRules

{
  "name": "[FORWARDING_RULE_NAME]",
  "IPProtocol": "[PROTOCOL]",
  "ports": [PORTS],
  "loadBalancingScheme": "INTERNAL",
  "subnetwork": "https://www.googleapis.com/compute/v1/projects/[PROJECT]/regions/[REGION]/subnetworks/[SUBNET]",
  "network": "https://www.googleapis.com/compute/v1/projects/[PROJECT]/global/networks/[NETWORK]",
  "backendService": "https://www.googleapis.com/compute/v1/projects/[PROJECT]/regions/[REGION]/backendServices/[BACKEND_SERVICE_NAME]",
  "serviceLabel": "[SERVICE_LABEL]"
}

查看服務標籤

Console

您可以針對內部負載平衡器的每個內部轉送規則,查看 Compute Engine 內部 DNS 名稱 (由服務標籤建立):

  1. 前往 Google Cloud Platform Console 的「Load balancing」(負載平衡) 頁面。
    前往「Load balancing」(負載平衡) 頁面
  2. 按一下內部負載平衡器的名稱,查看其詳細資料頁面。
  3. 指派給負載平衡器的內部轉送規則會列在「Frontend」(前端) 區段中。「DNS name」(DNS 名稱) 欄會顯示指派給各個轉送規則的 Compute Engine 內部 DNS 名稱。服務標籤位於名稱中的第一部分 (在第一個點之前)。如未顯示名稱,表示轉送規則未定義服務標籤。

gcloud

對於內部 TCP/UDP 負載平衡器,loadBalancingSchemeINTERNAL

  1. 列出專案中所有的內部轉送規則。請記下名稱和地區,以供下個步驟使用。

    gcloud compute forwarding-rules list \
        --filter="loadBalancingScheme=INTERNAL"
    
  2. 描述轉送規則,將 [FORWARDING_RULE_NAME] 替換為轉送規則名稱,並將 [REGION] 替換為轉送規則地區:

    gcloud compute forwarding-rules describe [FORWARDING_RULE_NAME] \
        --region=[REGION] \
        --format="get(serviceLabel)"
    

API

使用 forwardingRules.get 方法查看轉送規則和服務標籤

對 API 要求的回應包括服務標籤 (serviceLabel) 和 Compute Engine 內部 DNS 名稱 (serviceName)。

GET https://www.googleapis.com/compute/v1/projects/[PROJECT]/regions/[REGION]/forwardingRules/[FORWARDING_RULE_NAME]

TCP/UDP 回應:

{
  ...
  "serviceLabel": "[SERVICE_LABEL]",
  "serviceName": "[SERVICE_LABEL].[FORWARDING_RULE_NAME].il4.[REGION].lb.[PROJECT].internal",
  ...
}

範例

下列程序說明如何為內部 TCP/UDP 負載平衡器範例建立具有服務標籤的轉送規則。在該頁面上,內部轉送規則沒有服務標籤。如果遵照該範例,則可刪除轉送規則,並將其替換為具有服務標籤的規則。

  1. 刪除 fr-ilb 轉送規則。

    gcloud compute forwarding-rules delete fr-ilb \
        --region=us-west1
    
  2. 建立具有相同名稱和服務標籤的轉送規則。此規則中的其他參數 (包括 IP 位址和後端服務) 則與原始範例中的相同。

    gcloud compute forwarding-rules create fr-ilb \
        --region=us-west1 \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --network=lb-network \
        --subnet=lb-subnet \
        --address=10.1.2.99 \
        --ip-protocol=TCP \
        --ports=80 \
        --backend-service=be-ilb \
        --backend-service-region=us-west1 \
        --service-label=example
    

現在 us-west1 地區中的用戶端可以使用其內部 IP 位址 10.1.2.99 或下列 Compute Engine 內部 DNS 名稱 (其中 [PROJECT] 是您的專案 ID) 存取負載平衡器:

    example.fr-ilb.il4.us-west1.lb.[PROJECT].internal

後續步驟