Google Cloud 虛擬私有雲中的網路連線

本頁說明如何設定從 Integration Connectors 到後端服務的私人連線,例如在 Google Cloud VPC 中代管的 MySQL、Postgres 和 SQL Server。

本頁面假設您熟悉下列概念:

Google Cloud 虛擬私有雲的私人連線可分為下列幾類:

  • 後端服務和 PSC 服務附件位於相同的 Google Cloud 專案或虛擬私有雲。
  • 後端服務和 PSC 服務連結位於不同的 Google Cloud 專案或虛擬私有雲。

注意事項

建立 PSC 服務附件時,請考量下列要點:

  • PSC 服務連結和負載平衡器是在同一個虛擬私有雲內的不同子網路中建立。具體來說,服務連結一律會在 NAT 子網路中建立。
  • 負載平衡器和健康狀態檢查探測器傳送的流量應導向相同通訊埠。
  • 設定防火牆規則,方便流量流動。

    輸入規則

    來自 PSC 服務連結子網路的流量應會抵達後端服務。

    輸出規則

    除非設定了特定拒絕規則,否則 Google Cloud 專案預設會啟用輸出流量。

  • 所有 Google Cloud 元件 (例如 PSC 服務連結和負載平衡器) 都應位於相同區域。

Google Cloud 虛擬私有雲中後端服務的私人連線

本節說明後端服務和 PSC 服務連結位於相同 Google Cloud 專案時,如何建立私人連線。

下圖顯示從 Integration Connectors 到 Google Cloud 虛擬私有雲端代管服務的私有網路連線設定:

如要設定 Google Cloud 虛擬私有雲中後端服務的私人連線,請完成下列步驟:

建立 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 服務連結,只接受來自指定 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 專案或虛擬私有雲時,如何建立私人連線。

下圖顯示私人網路連線設定,其中 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 服務連結,只接受來自指定 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 服務連結,只接受來自指定 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 為基礎的 HTTP(S) 負載平衡器 (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 連線測試可用於找出網路設定中的任何缺口。詳情請參閱「建立及執行連線測試」。