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。服務附件一律會使用負載平衡器。因此,如果您的服務並未在負載平衡器後方,就需要設定負載平衡器。

  1. 建立健康狀態檢查探測器,並允許來自探測器的流量。
    1. 建立健康狀態檢查探針。
      gcloud compute health-checks create tcp HEALTH_CHECK_NAME --port BACKEND_SERVER_PORT --region=REGION

      在這項指令中,請將 BACKEND_SERVER_PORT 設為 3306,這是 MySQL 伺服器執行的預設通訊埠。

    2. 建立防火牆規則,允許從探針傳入的流量。
      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
  2. 建立 L4 內部負載平衡器,並允許負載平衡器的流量。
    1. 建立後端服務
      gcloud compute backend-services create BACKEND_SERVICE --load-balancing-scheme=internal --protocol=tcp --health-checks=HEALTH_CHECK_NAME --health-checks-region=REGION 
    2. 將執行個體群組新增至後端服務。
      gcloud compute backend-services add-backend BACKEND_SERVICE --instance-group=INSTANCE_GROUP_NAME --instance-group-zone=ZONE
    3. 建立轉送規則
      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
    4. 建立防火牆規則,允許從負載平衡器傳入執行個體群組的內部流量。
      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
  3. 建立服務附件
    1. 建立 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
    2. 建立防火牆規則,允許從 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
    3. 使用明確核准建立服務連結。
      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 服務連結後,請建立端點連結來使用 PSC 服務連結。詳情請參閱「建立端點附件」。

不同 Google Cloud 專案的私人連線

本節說明在後端服務和 PSC 服務附件位於不同 Google Cloud 專案或 VPC 時,如何建立私人連線。

下圖顯示私人網路連線設定,其中 PSC 服務附件和後端服務位於不同的 Google Cloud 專案中:

如要為不同的 Google Cloud 專案設定私人連線,請完成下列步驟:

設定私人連線

如要設定私人連線,請按照下列步驟操作:

  1. 建立負載平衡器。如果您已使用負載平衡器,請略過這個步驟。
    1. 建立可用區 NEG。詳情請參閱「建立區域性 NEG」。
    2. 將區域性 NEG 新增為後端,並建立下列規則:
      1. 建立轉送規則
        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
      2. 建立防火牆規則,允許從負載平衡器傳入執行個體群組的內部流量。
        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
  2. 建立服務附件
    1. 建立 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
    2. 建立防火牆規則,允許從 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
    3. 使用明確核准建立服務連結。
      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

將服務附件中的 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 位址將流量傳送至後端伺服器。
    • 您可以使用 Google Cloud 連線測試找出網路設定中的任何缺口。詳情請參閱「建立並執行連線測試」。