透過後端存取全球 Google API
本頁說明如何使用以跨區域內部應用程式負載平衡器為基礎的 Private Service Connect 後端,存取全域 Google API。
透過這項設定,您可以指定一或多個個別的全球 Google API,同時套用 Private Service Connect 後端提供的可見度和控制項。
- 您可以設定自訂主機名稱 (位於虛擬私有雲和已連線的內部部署網路中),將流量路由至所選的全球 Google API。
- 您可以從任何區域存取後端,後端也可以將流量負載平衡至位於任何區域的 Private Service Connect 網路端點群組 (NEG)。
- 您可以從對等互連的 VPC 網路將流量傳送至後端。
如需可用的全球 Google API 清單,請參閱「全球 Google API 目標」。
事前準備
- 
  
  
  
  
  
  
  
    
    
    
    
    
    
      
      
        
        
      
      
    
      
      
        
        
      
      
    
    
    
    
    
  
  如要取得設定後端以存取 Google 全球 API 所需的權限,請要求管理員授予您 Google Cloud 專案的下列 IAM 角色: - 
  
  
    
      運算管理員  (roles/compute.admin)
- 
  
  
    
      Certificate Manager 擁有者  (roles/certificatemanager.owner)
 如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。 
- 
  
  
    
      運算管理員  (
- 在專案中啟用 Compute Engine API。 
- 向憑證授權單位 (CA) 建立私密金鑰和已簽署憑證。按照「步驟 1:建立私密金鑰和憑證」的指示操作。您需要私密金鑰和憑證,才能使用 Certificate Manager 建立自行管理的 SSL 憑證。 
- 使用您建立的私密金鑰和已簽署憑證,為跨區域內部應用程式負載平衡器建立憑證資源。上傳憑證時,請務必將範圍設為 - all-regions。詳情請參閱「將自行管理的憑證上傳至 Certificate Manager」。設定負載平衡器的目標 HTTPS Proxy 時,需要憑證資源。
- 如果沒有僅限 Proxy 的子網路,請建立一個。在您打算建立跨區域內部應用程式負載平衡器轉送規則的虛擬私有雲網路和區域中,必須有單一僅限 Proxy 的子網路。該網路和區域內的所有內部應用程式負載平衡器都會使用這個子網路。 
建立 Private Service Connect NEG
針對要存取的每個全域 Google API,建立 Private Service Connect NEG。即使 Private Service Connect NEG 用於連線至全域 Google API,仍屬於區域性。
Private Service Connect NEG 建立後就無法更新。
主控台
- 前往 Google Cloud 控制台的「建立網路端點群組」頁面。 
- 在「建立網路端點群組」頁面中,輸入網路端點群組的「名稱」。 
- 在「網路端點群組類型」部分,選取「Private Service Connect NEG (區域)」。 
- 在「目標」中,選取「全域 Google API」。 
- 選取網路端點群組的「區域」。 
- 選取網路端點群組的「目標服務」。 
- 點選「建立」。 
gcloud
使用 network-endpoint-groups create 指令。
gcloud compute network-endpoint-groups create NEG_NAME \
    --network-endpoint-type=private-service-connect \
    --psc-target-service=TARGET_SERVICE \
    --region=REGION
更改下列內容:
- NEG_NAME:網路端點群組的名稱。
- TARGET_SERVICE:要連線的全球 Google API 目標,例如- pubsub.googleapis.com。請參閱支援的全球 Google API 目標清單。
- REGION:要在其中建立網路端點群組的區域。
API
對 regionNetworkEndpointGroups.insert 方法發出 POST 要求。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups
{
  "name": "NEG_NAME",
  "networkEndpointType": "PRIVATE_SERVICE_CONNECT",
  "pscTargetService": "TARGET_SERVICE"
}
更改下列內容:
- PROJECT_ID:網路端點群組的專案 ID。
- REGION:要在其中建立網路端點群組的區域。
- NEG_NAME:網路端點群組的名稱。
- TARGET_SERVICE:要連線的全球 Google API 目標,例如- pubsub.googleapis.com。請參閱支援的全球 Google API 目標清單。
設定負載平衡器
如要存取全域 Google API,請設定跨區域內部應用程式負載平衡器。
主控台
選取負載平衡器類型
- 前往 Google Cloud 控制台的「Load balancing」(負載平衡)頁面。 
- 點選「建立負載平衡器」。
- 在「Type of load balancer」(負載平衡器類型) 部分,選取「Application Load Balancer (HTTP/HTTPS)」(應用程式負載平衡器 (HTTP/HTTPS)),然後點選「Next」(下一步)。
- 在「公開或內部」部分,選取「內部」,然後點選「下一步」。
- 在「Cross-region or single region deployment」(跨區域或單一區域部署) 部分,選取「Best for cross-region workloads」(最適合跨區域工作負載),然後點選「Next」(下一步)。
- 按一下「Configure」(設定)。
基本設定
- 在「Name」(名稱) 中輸入負載平衡器的名稱。
- 選取負載平衡器的「網路」。 - 網路必須在您建立負載平衡器的區域中,包含僅限 Proxy 的子網路。 
前端設定
- 按一下「前端設定」。
- 輸入負載平衡器轉送規則的「Name」(名稱)。
- 在「通訊協定」欄位中,選取「HTTPS (包含 HTTP/2 和 HTTP/3)」。
- 選取負載平衡器子網路的「子網路區域」。
- 選取負載平衡器的「子網路」。
- 按一下「IP 位址」,然後執行下列其中一項操作:
- 如要自動指派臨時 IP 位址,請選取「臨時 (自動)」。
- 如要選擇臨時 IP 位址,請選取「臨時 (自訂)」,然後從負載平衡器子網路的 IP 位址範圍中,輸入「自訂臨時 IP 位址」。
- 如要保留及使用靜態內部 IP 位址,請按一下「建立 IP 位址」,然後執行下列步驟:- 輸入 IP 位址的「名稱」。
- 按一下「靜態 IP 位址」,然後執行下列其中一項操作:
- 如要自動指派靜態 IP 位址,請選取「自動指派」。
- 如要設定特定 IP 位址,請選取「讓我選擇」,然後從負載平衡器子網路的 IP 位址範圍輸入「自訂 IP 位址」。
 
- 按一下「保留」。
 
 
- 確認「Port」(通訊埠) 欄位已設為 443,以允許 HTTPS 流量。
- 按一下「憑證」清單,然後選取您自行管理的憑證。
- 按一下 [完成]。
後端設定
- 按一下「後端設定」。
- 針對要存取的每個全域 Google API,建立全域後端服務。如要建立全域後端服務,請執行下列步驟: - 在「Create or select backend services」(建立或選取後端服務) 選單中,選取 [Create a backend service] (建立後端服務)。
- 在「Name」(名稱) 中輸入後端服務的名稱。
- 將「後端類型」設為「Private Service Connect 網路端點群組」。
- 將「Private Service Connect 目標類型」設為「Global Google API」。
- 選取「HTTPS」HTTPS做為通訊協定。
- 在「後端」部分,按一下「新增後端」選單,然後選取 Private Service Connect 網路端點群組。 - 如需建立新的 Private Service Connect 網路端點群組,請按一下「建立 PSC NEG」。 
- 按一下 [完成]。 
- 點選「建立」。 
 
- 確認要新增的每個後端服務都已在「建立或選取後端服務」選單中選取,然後按一下「確定」。 
轉送規則
將傳入的 HTTPS 要求轉送至特定後端服務的規則集稱為網址對應。如要進一步瞭解網址對應,請參閱網址對應總覽。
如果只為負載平衡器設定一個後端服務,預設轉送規則就已足夠,您可以跳至「檢查並完成」。
如要設定多個後端服務,請為每個後端服務建立一個路徑比對器。每個主機規則只能參照一個路徑比對器,但兩個以上的主機規則可以參照同一個路徑比對器。
- 如果您有多個後端服務,請按一下「轉送規則」。
- 選取「簡易型主機與路徑規則」。
- 針對每個後端執行下列操作:
- 按一下 [Add host and path rule] (新增主機與路徑規則)。
- 在「Host」(主機) 部分,輸入用於將要求傳送至這項服務的主機名稱,例如 pubsub.example.com。
- 在「Paths」(路徑) 欄位中輸入路徑,例如 /*。
- 在「後端」部分,選取後端服務。
 
檢查並完成
- 按一下「檢查並完成」,檢查設定。
- 點選「建立」。
gcloud
- 針對要存取的每個全域 Google API,請執行下列操作: - 如要建立全域後端服務,請使用 - gcloud compute backend-services create指令。- gcloud compute backend-services create BACKEND_SERVICE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --protocol=HTTPS \ --global- 將 - BACKEND_SERVICE_NAME替換為後端服務的名稱。
- 如要將 NEG 新增至對應的後端服務,請使用 - gcloud compute backend-services add-backend指令。- gcloud compute backend-services add-backend BACKEND_SERVICE_NAME \ --network-endpoint-group=NEG_NAME \ --network-endpoint-group-region=REGION \ --global- 更改下列內容: - NEG_NAME:Private Service Connect NEG 的名稱。
- REGION:Private Service Connect NEG 的區域。
 
 
- 如要為負載平衡器建立全域 網址對應,請使用 - gcloud compute url-maps create指令。- 網址對應必須參照預設後端服務。如果負載平衡器只設定一個後端服務,請將該後端服務設為預設值。如果將負載平衡器設定為使用多個後端服務,請選擇其中一個後端服務做為網址對應的預設值。 - gcloud compute url-maps create URL_MAP_NAME \ --default-service=DEFAULT_BACKEND_SERVICE_NAME- 更改下列內容: - URL_MAP_NAME:網址對應表名稱。
- DEFAULT_BACKEND_SERVICE_NAME:負載平衡器預設後端服務的名稱。如果沒有任何主機規則與要求的主機名稱相符,系統就會使用預設值。
 
- 選用:如果將負載平衡器設定為使用多個後端服務,請完成這個步驟。如果網址對應只參照一個後端服務,請略過這個步驟。 - 如要將其他後端服務新增至網址對應,請使用 - gcloud compute url-maps add-path-matcher指令。- 為每個後端服務新增路徑比對器和一或多個主機規則。您必須為每個後端服務建立一個路徑比對器。每個主機規則只能參照一個路徑比對器,但兩個以上的主機規則可以參照同一個路徑比對器。 - gcloud compute url-maps add-path-matcher URL_MAP_NAME \ --path-matcher-name=PATH_MATCHER \ --default-service=BACKEND_SERVICE_NAME \ --new-hosts=HOSTNAMES- 更改下列內容: - PATH_MATCHER:路徑比對器的名稱。
- BACKEND_SERVICE_NAME:後端服務的名稱。
- HOSTNAMES:要將要求傳送至後端服務的一或多個主機名稱,例如- pubsub.example.com。您可以用逗號分隔的清單輸入多個主機名稱。
 
- 如要建立目標 HTTPS Proxy,請使用 - gcloud compute target-https-proxies create指令。- gcloud compute target-https-proxies create PROXY_NAME \ --url-map=URL_MAP_NAME \ --certificate-manager-certificates=CERTIFICATE_NAME- 更改下列內容: - PROXY_NAME:目標 HTTPS Proxy 的名稱。
- URL_MAP_NAME:網址對應表名稱。
- CERTIFICATE_NAME:憑證資源的名稱。
 
- 如要為負載平衡器建立通用轉送規則,請使用 - gcloud compute forwarding-rules create指令。- gcloud compute forwarding-rules create RULE_NAME \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=NETWORK \ --address=IP_ADDRESS \ --ports=443 \ --target-https-proxy=PROXY_NAME \ --subnet=SUBNET \ --subnet-region=SUBNET_REGION \ --global- 更改下列內容: - RULE_NAME:轉送規則的名稱。
- NETWORK:轉送規則的虛擬私有雲網路。這個網路必須在您建立負載平衡器的區域中,包含僅限 Proxy 的子網路。
- IP_ADDRESS:轉送規則的內部 IP 位址,必須位於轉送規則子網路的 IP 位址範圍內。如要使用特定臨時 IP 位址,請輸入該 IP 位址,例如- 10.0.0.5。如要使用靜態內部 IP 位址,請輸入 IP 位址名稱。如要讓 Google Cloud選取臨時 IP 位址,請省略這個旗標。
- SUBNET:轉送規則的子網路。
- SUBNET_REGION:轉送規則子網路的區域。
 
API
- 針對要存取的每個全域 Google API,請執行下列操作: - 如要建立全域後端服務,請對 - backendServices.insert方法發出- POST要求。- POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices { "loadBalancingScheme": "INTERNAL_MANAGED", "name": "BACKEND_SERVICE_NAME", "protocol": "HTTPS" }- 更改下列內容: - PROJECT_ID:專案的專案 ID。
- BACKEND_SERVICE_NAME:後端服務的名稱。
 
- 如要將 NEG 新增至對應的後端服務,請向 - backendServices.patch方法發出- PATCH要求。- PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME { "backends": [ { "group": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG_NAME" } ] }- 更改下列內容: - REGION:NEG 的區域。
- NEG_NAME:要新增的網路端點群組名稱。
 
 
- 如要為負載平衡器建立全域 URL 對應,請對 - urlMaps.insert方法發出- POST要求。- 網址對應必須參照預設後端服務。如果負載平衡器只設定一個後端服務,請將該後端服務設為預設值。如果將負載平衡器設定為使用多個後端服務,請選擇其中一個後端服務做為網址對應的預設值。 - POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps { "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/DEFAULT_BACKEND_SERVICE_NAME", "name": "URL_MAP_NAME" }- 更改下列內容: - DEFAULT_BACKEND_SERVICE_NAME:負載平衡器預設的名稱。如果沒有任何主機規則與要求的主機名稱相符,系統就會使用預設規則。
- URL_MAP_NAME:網址對應表名稱。
 
- 如果您要將負載平衡器設定為使用多個後端服務,請完成這個步驟。如果網址對應只參照一個後端服務,請略過這個步驟。 - 如要將其他後端服務新增至網址對應,請對 - urlMaps.patch方法提出- PATCH要求。- 為每個後端服務新增路徑比對器和一或多個主機規則。您必須為每個後端服務建立一個路徑比對器。每個主機規則只能參照一個路徑比對器,但兩個以上的主機規則可以參照同一個路徑比對器。 - 您可以透過單一 API 要求新增多個路徑比對器和主機規則。 - PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME { "pathMatchers": [ { "name": "PATH_MATCHER_NAME_1", "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_1" }, { "name": "PATH_MATCHER_NAME_2", "defaultService": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/BACKEND_SERVICE_NAME_2" } ], "hostRules": [ { "hosts": ["HOSTNAME_1"], "pathMatcher": "PATH_MATCHER_NAME_1" }, { "hosts": ["HOSTNAME_2"], "pathMatcher": "PATH_MATCHER_NAME_2" } ] }- 更改下列內容: - PATH_MATCHER_NAME_1:第一個路徑比對器的名稱。
- BACKEND_SERVICE_NAME_1:第一個後端服務的名稱。
- PATH_MATCHER_NAME_2:第二個路徑比對器的名稱。
- BACKEND_SERVICE_NAME_2:第二個後端服務的名稱。
- HOSTNAME_1:要傳送第一個服務要求的 hostname,例如- pubsub.example.com。
- HOSTNAME_2:要將要求傳送至第二項服務的主機名稱。
 
- 如要建立目標 HTTPS Proxy,請對 - targetHttpsProxies.insert方法發出- POST要求。- POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies { "name": "PROXY_NAME", "sslCertificates": [ "https://certificatemanager.googleapis.com/v1/projects/PROJECT_ID/locations/global/certificates/CERTIFICATE_NAME" ], "urlMap": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/URL_MAP_NAME" }- 更改下列內容: - PROJECT_ID:專案 ID。
- PROXY_NAME:目標 HTTPS Proxy 的名稱。
- CERTIFICATE_NAME:憑證資源的名稱。
- URL_MAP_NAME:網址對應表名稱。
 
- 如要為負載平衡器建立全域轉送規則,請對 - globalForwardingRules.insert方法發出- POST要求。轉送規則的網路必須在轉送規則所在區域的子網路中,包含 Proxy 專用子網路。- POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/forwardingRules { "IPAddress": "IP_ADDRESS", "loadBalancingScheme": "INTERNAL_MANAGED", "name": "FORWARDING_RULE_NAME", "network": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/NETWORK_NAME", "portRange": "443", "subnetwork": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/SUBNET_REGION/subnetworks/SUBNET_NAME", "target": "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/targetHttpsProxies/PROXY_NAME" }- 更改下列內容: - IP_ADDRESS:轉送規則的內部 IP 位址,必須位於轉送規則子網路的 IP 位址範圍內。如要使用特定臨時 IP 位址,請提供該 IP 位址,例如- 10.0.0.5。如要使用靜態內部 IP 位址,請提供 IP 位址名稱。如要讓Google Cloud 選取臨時 IP 位址,請省略這個欄位。
- FORWARDING_RULE_NAME:轉送規則的名稱。
- NETWORK_NAME:轉送規則的 VPC 網路名稱。這個網路必須在您建立負載平衡器的區域中,包含僅限 Proxy 的子網路。
- SUBNET_REGION:轉送規則子網路的區域。
- SUBNET_NAME:轉送規則子網路的名稱。
 
驗證設定
如要測試後端與全球 Google API 的連線,請按照下列步驟操作:
- 如果沒有,請在您設定後端的虛擬私有雲網路中,建立虛擬機器 (VM) 執行個體。
- 確認您未建立會覆寫默示 IPv4 允許輸出規則的防火牆規則或防火牆政策。
- 連線至 VM。
- 在 VM 中,使用 - curl驗證是否可以查詢每個 API。這項指令會設定- Host標頭,並指定使用者定義的 IP 位址,藉此略過 DNS 解析。- 您可以使用 - -k標記略過憑證驗證。如果您使用自行簽署的憑證設定目標 HTTPS Proxy,或 VM 沒有簽署憑證的憑證授權單位憑證,可能需要略過驗證。- curl -iv --resolve HOSTNAME:443:IP_ADDRESS \ 'https://HOSTNAME/RESOURCE_URI' - 更改下列內容: - HOSTNAME:您在網址對應中設定的主機名稱,例如- pubsub.example.com。
- IP_ADDRESS:負載平衡器轉送規則的 IP 位址。
- RESOURCE_URI:您要用於驗證的資源 URI 的其餘部分。舉例來說,如果負載平衡器將要求轉送至 Pub/Sub 的區域端點,您可以使用- $discovery/rest?version=v1。
 
設定 DNS 記錄
為您新增至網址對應的每個主機設定 DNS 記錄,指向轉送規則的 IP 位址。如果使用 Cloud DNS 管理 DNS,請參閱「新增、修改及刪除記錄」。否則,請在 DNS 伺服器上設定 DNS 記錄。
舉例來說,假設您已建立下列設定:
- 使用目標服務的 Private Service Connect NEG - pubsub.googleapis.com。
- 使用該 Private Service Connect NEG 做為後端的跨區域內部應用程式負載平衡器。 
- 定義 - pubsub.example.com主機規則的網址對應。
如要讓這項設定正常運作,請務必建立指向轉送規則 IP 位址的 DNS 記錄 pubsub.example.com。
完成這項設定後,傳送至 pubsub.example.com 的任何要求都會傳送至負載平衡器,負載平衡器再將要求轉送至 pubsub.googleapis.com。
設定用戶端,將要求傳送至後端
如要透過後端而非公開服務端點傳送要求,您必須將用戶端設定為將要求傳送至負載平衡器網址對應中定義的主機名稱,例如 pubsub.example.com。如要瞭解如何設定用戶端或用戶端程式庫以使用自訂端點,請參閱相關文件。以下頁面包含一些常見用戶端的設定步驟:
- Python:您可以在用戶端選項中設定 - api_endpoint。
- 前往:您可以在 ClientOptions 中設定 - WithEndpoint。
- .NET:您可以在用戶端的建構工具類別中設定 - Endpoint。
- gcloud:您可以在 gcloud CLI 中設定 - api_endpoint_overrides。