Google Cloud 虛擬私有雲中的網路連線
本頁面說明如何設定 Integration Connectors 與後端服務的私人連線,例如在 Google Cloud VPC 中代管的 MySQL、Postgres 和 SQL Server。
本頁假設您熟悉下列概念:
與 Google Cloud VPC 的私人連線可歸類為下列任一類別:
- 後端服務和 PSC 服務附件都位於相同的 Google Cloud 專案或 VPC 中。
- 後端服務和 PSC 服務附件皆位於不同的 Google Cloud 專案或 VPC。
注意事項
建立 PSC 服務附件時,請考量下列重點:
- PSC 服務連結和負載平衡器是在同一個 VPC 中的不同子網路中建立。具體來說,服務附件一律會在 NAT 子網路中建立。
- 負載平衡器和健康狀態檢查探針的流量應傳送至相同的通訊埠。
- 設定防火牆規則,以利流量流動。
Ingress 規則
PSC 服務附件的子網路應可將流量傳送至後端服務。
輸出規則
除非設定特定拒絕規則,否則 Google Cloud 專案會預設啟用外送流量。
- 所有 Google Cloud 元件 (例如 PSC 服務附件和負載平衡器) 都必須位於同一個地區。
與 Google Cloud VPC 中後端服務的私人連線
本節說明如何在後端服務和 PSC 服務連結皆位於同一 Google Cloud 專案中時,建立私人連線。
下圖顯示從整合連接器到 Google Cloud 虛擬私有雲中代管服務的私人網路連線設定:
如要設定 Google Cloud VPC 中後端服務的私人連線,請完成下列步驟:
建立 PSC 服務連結
為了透過 Integration Connectors 建立私人連線,您的服務必須使用 PSC 服務連結公開給 Integration Connectors。服務附件一律會使用負載平衡器。因此,如果您的服務並未在負載平衡器後方,就需要設定負載平衡器。
- 建立健康狀態檢查探測器,並允許來自探測器的流量。
- 建立健康狀態檢查探針。
gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION
在這項指令中,請將 BACKEND_SERVER_PORT 設為 3306,這是 MySQL 伺服器執行的預設通訊埠。
- 建立防火牆規則,允許從探針傳入的流量。
gcloud compute firewall-rules create VPC_NETWORK-allow-health-check --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT --source-ranges=35.191.0.0/16,130.211.0.0/22
- 建立健康狀態檢查探針。
- 建立 L4 內部負載平衡器,並允許負載平衡器的流量。
- 建立後端服務。
gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION
- 將執行個體群組新增至後端服務。
gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
- 建立轉送規則。
gcloud compute forwarding-rules create FORWARDING_RULE_NAME --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE --backend-service-region=REGION
-
建立防火牆規則,允許從負載平衡器傳入執行個體群組的內部流量。
gcloud compute firewall-rules create VPC_NETWORK-allow-internal --direction=INGRESS --priority=1000 --network=VPC_NETWORK --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
- 建立後端服務。
- 建立服務附件
- 建立 PSC NAT 的子網路。下列指令會建立名稱為
psc-nat-subnet1
的子網路,用途為PRIVATE_SERVICE_CONNECT
。gcloud compute networks subnets create psc-nat-subnet1 \ --network=VPC_NETWORK --range=SUBNET_RANGE_1 \ --purpose=PRIVATE_SERVICE_CONNECT
- 建立防火牆規則,允許從 PSC NAT 傳入負載平衡器的流量。
gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \ --direction=INGRESS --network=VPC_NETWORK \ --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
- 使用明確核准建立服務連結。
gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1
在這條指令中,LIMIT 是專案的連線限制。連線限制是指可連線至此服務的消費者 PSC 端點數量。如要取得 SERVICE_DIRECTORY_PROJECT_ID,請執行下列步驟:
-
您可以建立 PSC 服務附件,讓 PSC 只接受指定 Google Cloud 專案的要求。不過,您必須提供與 Google Cloud 專案相關聯的服務目錄專案 ID,才能執行這項操作。如要取得服務目錄的專案 ID,您可以使用 List Connections API,如以下範例所示。
語法
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"
請依指示取代下列內容:
- CONNECTORS_PROJECT_ID:您建立連線的 Google Cloud 專案 ID。
範例
這個範例會取得
connectors-test
Google Cloud 專案的服務目錄專案 ID。curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"
在終端機上執行這個指令後,會顯示類似以下的輸出內容:
..... { "connections": [ { "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa", "createTime": "2022-10-07T09:02:31.905048520Z", "updateTime": "2022-10-07T09:22:39.993778690Z", "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1", "status": { "state": "ACTIVE" }, "configVariables": [ { "key": "project_id", "stringValue": "connectors-test" }, { "key": "dataset_id", "stringValue": "testDataset" } ], "authConfig": {}, "serviceAccount": "564332356444-compute@developer.gserviceaccount.com", "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime", "nodeConfig": { "minNodeCount": 2, "maxNodeCount": 50 } }, ....
在輸出範例中,
connectors-test
Google Cloud 專案的服務目錄專案 ID 為abcdefghijk-tp
。
-
- 建立 PSC NAT 的子網路。下列指令會建立名稱為
建立 PSC 服務連結後,請建立端點連結來使用 PSC 服務連結。詳情請參閱「建立端點附件」。
不同 Google Cloud 專案的私人連線
本節說明在後端服務和 PSC 服務附件位於不同 Google Cloud 專案或 VPC 時,如何建立私人連線。
下圖顯示私人網路連線設定,其中 PSC 服務附件和後端服務位於不同的 Google Cloud 專案中:
如要為不同的 Google Cloud 專案設定私人連線,請完成下列步驟:
設定私人連線
如要設定私人連線,請按照下列步驟操作:
- 建立負載平衡器。如果您已使用負載平衡器,請略過這個步驟。
- 建立可用區 NEG。詳情請參閱「建立區域性 NEG」。
- 將區域性 NEG 新增為後端,並建立下列規則:
- 建立轉送規則。
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --load-balancing-scheme=internal --network=VPC_NETWORK --subnet=SUBNET_NAME_2 \ --ip-protocol=TCP --ports=BACKEND_SERVER_PORT --backend-service=BACKEND_SERVICE \ --backend-service-region=REGION
-
建立防火牆規則,允許從負載平衡器傳入執行個體群組的內部流量。
gcloud compute firewall-rules create FIREWALL_RULE_NAME_INTERNAL \ --direction=INGRESS --priority=1000 --network=VPC_NETWORK \ --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2
- 建立轉送規則。
- 建立服務附件
- 建立 PSC NAT 的子網路。下列指令會建立名稱為
psc-nat-subnet1
的子網路,用途為PRIVATE_SERVICE_CONNECT
。gcloud compute networks subnets create psc-nat-subnet1 \ --network=VPC_NETWORK --range=SUBNET_RANGE_1 \ --purpose=PRIVATE_SERVICE_CONNECT
- 建立防火牆規則,允許從 PSC NAT 傳入負載平衡器的流量。
gcloud compute network-firewall-policies rules create PRIORITY --firewall-policy FIREWALL_POLICY_NAME_SA \ --direction=INGRESS --network=VPC_NETWORK \ --action=allow --allow=tcp:BACKEND_SERVER_PORT --src-ip-ranges=SUBNET_RANGE_1
- 使用明確核准建立服務連結。
gcloud compute service-attachments create SERVICE_ATTACHMENT_NAME --producer-forwarding-rule=FORWARDING_RULE_NAME --connection-preference=ACCEPT_MANUAL --consumer-accept-list=SERVICE_DIRECTORY_PROJECT_ID=LIMIT --nat-subnets=psc-nat-subnet1
在這條指令中,LIMIT 是專案的連線限制。連線限制是指可連線至此服務的消費者 PSC 端點數量。如要取得 SERVICE_DIRECTORY_PROJECT_ID,請執行下列步驟:
-
您可以建立 PSC 服務附件,讓 PSC 只接受指定 Google Cloud 專案的要求。不過,您必須提供與 Google Cloud 專案相關聯的服務目錄專案 ID,才能執行這項操作。如要取得服務目錄的專案 ID,您可以使用 List Connections API,如以下範例所示。
語法
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"
請依指示取代下列內容:
- CONNECTORS_PROJECT_ID:您建立連線的 Google Cloud 專案 ID。
範例
這個範例會取得
connectors-test
Google Cloud 專案的服務目錄專案 ID。curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"
在終端機上執行這個指令後,會顯示類似以下的輸出內容:
..... { "connections": [ { "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa", "createTime": "2022-10-07T09:02:31.905048520Z", "updateTime": "2022-10-07T09:22:39.993778690Z", "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1", "status": { "state": "ACTIVE" }, "configVariables": [ { "key": "project_id", "stringValue": "connectors-test" }, { "key": "dataset_id", "stringValue": "testDataset" } ], "authConfig": {}, "serviceAccount": "564332356444-compute@developer.gserviceaccount.com", "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime", "nodeConfig": { "minNodeCount": 2, "maxNodeCount": 50 } }, ....
在輸出範例中,
connectors-test
Google Cloud 專案的服務目錄專案 ID 為abcdefghijk-tp
。
-
- 建立 PSC NAT 的子網路。下列指令會建立名稱為
將服務附件中的 Integration Connectors 專案加入許可清單
您可以建立 PSC 服務附件,讓 PSC 只接受指定 Google Cloud 專案的要求。不過,您必須提供與 Google Cloud 專案相關聯的服務目錄專案 ID,才能執行這項操作。如要取得服務目錄的專案 ID,您可以使用 List Connections API,如以下範例所示。
語法
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/CONNECTORS_PROJECT_ID/locations/-/connections"
請依指示取代下列內容:
- CONNECTORS_PROJECT_ID:您建立連線的 Google Cloud 專案 ID。
範例
這個範例會取得 connectors-test
Google Cloud 專案的服務目錄專案 ID。
curl -X GET \ -H "authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ "https://connectors.googleapis.com/v1/projects/connectors-test/locations/-/connections"
在終端機上執行這個指令後,會顯示類似以下的輸出內容:
..... { "connections": [ { "name": "projects/connectors-test/locations/asia-northeast1/connections/big-query-iam-invalid-sa", "createTime": "2022-10-07T09:02:31.905048520Z", "updateTime": "2022-10-07T09:22:39.993778690Z", "connectorVersion": "projects/connectors-test/locations/global/providers/gcp/connectors/bigquery/versions/1", "status": { "state": "ACTIVE" }, "configVariables": [ { "key": "project_id", "stringValue": "connectors-test" }, { "key": "dataset_id", "stringValue": "testDataset" } ], "authConfig": {}, "serviceAccount": "564332356444-compute@developer.gserviceaccount.com", "serviceDirectory": "projects/abcdefghijk-tp/locations/asia-northeast1/namespaces/connectors/services/runtime", "nodeConfig": { "minNodeCount": 2, "maxNodeCount": 50 } }, ....
在輸出範例中,connectors-test
Google Cloud 專案的服務目錄專案 ID 為 abcdefghijk-tp
。
在 PSC 服務連結中將 Integration Connectors 專案加入許可清單後,請建立端點連結,以便使用 PSC 服務連結。詳情請參閱「建立端點附件」一文。
建立端點連結
端點連結為 IP 位址如需建立端點附件做為 IP 位址的操作說明,請參閱「建立端點附件做為 IP 位址」。
端點連結做為主機名稱在某些情況下 (例如啟用 TLS 的後端),目的地會要求您使用主機名稱,而非私人 IP 來執行 TLS 驗證。如果您使用私人 DNS 而非 IP 位址做為主機目的地,除了建立端點附件做為 IP 位址之外,您還必須設定受管理的可用區。如需建立端點附件做為主機名稱的操作說明,請參閱「建立端點附件做為主機名稱」。
日後,當您設定連線以使用端點附件時,即可選取這個端點附件。
設定使用端點連結的連線
建立端點連結後,請在連線中使用端點連結。建立新連線或更新現有連線時,請在「目的地」部分中,將「端點連結」選為「目的地類型」,然後從「端點連結」清單中選取您建立的端點連結。
如果您建立了代管區域,請選取「主機位址」做為「目的地類型」,並使用建立代管區域時建立的 A 記錄。
疑難排解提示
如果您遇到私人連線問題,請按照本節所列的規範操作,避免發生常見問題。
- 如要確認端點連結正確設定,並建立 PSC 連線,請檢查連線狀態。詳情請參閱「驗證端點附件連線」。
- 請確認防火牆規則的設定如下:
- 必須允許來自 PSC 服務附件子網路的流量到達後端服務。
- 負載平衡器必須能夠將流量傳送至後端服務。
- 直接傳輸負載平衡器 (L4 TCP/UDP ILB)
PSC 服務附件 NAT IP 的要求必須能夠連至後端。這些 NAT IP 會從 PSC NAT 子網路範圍自動分配,因此您必須允許服務附件的整個 NAT 子網路 IP 範圍。如要找出 PSC NAT 子網路,請使用下列指令:
gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=PRIVATE_SERVICE_CONNECT"
- Proxy 負載平衡器 (L4 Proxy ILB、L7 ILB)
Proxy 負載平衡器的來源要求來自該區域的 Proxy 專用子網路。因此,您需要設定防火牆規則,允許來自僅限 Proxy 子網路範圍的請求傳送至後端。如要找出僅有 Proxy 的子網路,請使用下列指令:
gcloud compute networks subnets list --project=PROJECT_ID --region=REGION --filter="purpose=REGIONAL_MANAGED_PROXY"
- 健康狀態檢查探針必須能夠存取後端系統。Google Cloud 健康狀態檢查探測器的 IP 範圍固定為 35.191.0.0/16 和 130.211.0.0/22。因此,您必須允許這些 IP 位址將流量傳送至後端伺服器。
如要瞭解如何排解負載平衡器問題,請參閱「排解內部應用程式負載平衡器的問題」。
- 直接傳輸負載平衡器 (L4 TCP/UDP ILB)
PSC 服務附件 NAT IP 的要求必須能夠連至後端。這些 NAT IP 會從 PSC NAT 子網路範圍自動分配,因此您必須允許服務附件的整個 NAT 子網路 IP 範圍。如要找出 PSC NAT 子網路,請使用下列指令:
- 您可以使用 Google Cloud 連線測試找出網路設定中的任何缺口。詳情請參閱「建立並執行連線測試」。