Google Cloud 代管服務中的網路連線

本頁說明如何設定整合連接器與後端服務 (例如 MySQL 適用的 Cloud SQLPostgreSQL 適用的 Cloud SQLSQL Server 適用的 Cloud SQL) 之間的私人連線。本頁假設您熟悉下列概念:

注意事項

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

  • PSC 服務連結和負載平衡器是在同一個 VPC 中的不同子網路中建立。具體來說,服務附件一律會在 NAT 子網路中建立。
  • SOCKS5 代理伺服器必須繫結至 0.0.0.0:<port> IP 位址,因為負載平衡器和健康狀態檢查探針的流量都需要這個位址。詳情請參閱「健康狀態檢查」。
  • 負載平衡器和健康狀態檢查探針的流量應傳送至相同的通訊埠。
  • 設定防火牆規則,以利流量流動。

    Ingress 規則

    • PSC 服務附件的子網路應可將流量傳送至後端服務。
    • 在 ILB 的子網路中,ILB 應可將流量傳送至 SOCKS5 Proxy 伺服器。
    • 健康狀態檢查探針應可存取 SOCKS5 代理伺服器。Google Cloud 健康狀態檢查探針具有固定的 IP 範圍 (35.191.0.0/16, 130.211.0.0/22)。因此,這些 IP 可以傳送流量至 SOCKS 代理伺服器。

    輸出規則

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

  • 所有 Google Cloud 元件 (例如 PSC 服務附件和負載平衡器) 都必須位於同一個地區。
  • 請確認您的 SOCKS5 代理伺服器會在下列情況下接受流量:
    • 直通負載平衡器 (L4 TCP/UDP ILB): PSC 服務連結的 NAT IP 的請求應可連上 SOCKS5 代理伺服器。因此,您必須允許服務附件的整個 NAT 子網路 IP 範圍。詳情請參閱「Private Service Connect 子網路」。
    • Proxy 型/HTTP(s) 負載平衡器 (第 4 層 Proxy ILB、第 7 層 ILB): 所有新要求都來自負載平衡器。因此,SOCKS5 代理伺服器應接受來自虛擬私有雲網路代理子網路的要求。詳情請參閱以 Envoy 為基礎的負載平衡器適用的僅限 Proxy 子網路

設定私人連線

部分 Google Cloud 代管服務 (例如 CloudSQL MySQL) 會公開 PSC 服務連結,以便建立私人連線。在這種情況下,您可以略過建立 PSC 服務連結的步驟,而由代管服務提供的 PSC 服務連結,可用於建立整合連接器端點連結。

在下列情況下,您必須建立新的 PSC 服務附件:

  • Google Cloud 代管服務不會公開服務連結,而是使用私人服務存取權公開 IP 位址。
  • Google Cloud 代管服務會公開服務附件,但不支援將 Integration Connectors 專案加入許可清單,以便使用服務附件。

下列各節將詳細說明為這兩種情況建立服務附件的步驟。建立服務附件後,您必須建立端點附件,並設定連線,才能使用端點附件。

為限制存取權的受管理服務建立服務附件

代管服務可能不會允許 Integration Connectors 專案列入許可清單,以便使用其公開的服務附件。在這種情況下,您必須建立負載平衡器,讓負載平衡器使用服務連結,並在專案中建立其他服務連結,將負載平衡器公開給整合連接器。

下圖顯示公開服務附件的受管理服務:

如需代管服務公開服務附件的範例,請參閱「MongoDB Atlas 叢集的私人連線」。

建立以 PSC NEG 為後端的負載平衡器

  1. 建立 NEG 以連線至已發布服務。
  2. 為區域性內部 Proxy 網路負載平衡器新增後端。

詳情請參閱「建立 Private Service Connect NEG」。

建立服務附件

  1. 建立 PSC NAT 的子網路。
  2. 建立防火牆規則,允許從 PSC NAT 傳送至負載平衡器的要求
  3. 建立服務附件。

詳情請參閱「建立 PSC 服務連結

允許整合連接器專案中的 Private Service Connect 連線

如要瞭解如何將 Integration Connectors 專案中的 Private Service Connect 連線加入白名單,請參閱「將 Integration Connectors 加入白名單」。

為公開 IP 位址的代管服務建立服務附件

如果管理服務未公開服務附件,則必須透過專案代理整合連接器的流量。

下圖顯示未公開服務附件的受管理服務:

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

  1. 建立 PSC 服務連結。
    1. 建立Compute Engine VM 執行個體,用於執行 SOCKS5 Proxy 伺服器。
      1. 建立 Proxy 執行個體 1。
        gcloud compute instances create PROXY_INSTANCE_1 \
                    --project=PROJECT_ID \
                    --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
                  

      您可以視需求建立任意數量的 VM 執行個體。

    2. 建立防火牆規則,允許 SSH 存取 VM 執行個體。
      gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \
                  --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22
                  
    3. VM 執行個體會用來將 Integration Connectors 的流量轉送至代管服務。在 VM 執行個體中安裝 SOCKS5 Proxy。Cloud SQL 驗證 Proxy 支援透過 SOCKS5 Proxy 建立鏈結,讓您能將加密的流量從 Cloud SQL 驗證 Proxy 轉送至目的地 Cloud SQL 執行個體。因此,您需要使用 SOCKS5 代理伺服器才能連線至私人 Cloud SQL 執行個體。

      安裝及設定 SOCKS5 伺服器的詳細步驟不在本文的討論範圍,您可以自行安裝任何 SOCKS5 伺服器。下列步驟說明如何安裝及設定 Dante SOCK5 代理伺服器。

      1. 透過 SSH 連線至 VM 執行個體。
        gcloud compute ssh \
                    --tunnel-through-iap \
                    PROXY_INSTANCE_1
                
      2. 安裝 Dante SOCKS5 Proxy 伺服器。
        sudo apt update
                sudo apt install dante-server
      3. 檢查伺服器介面。
        sudo ip a
      4. 建立 Dante 設定的備份。
        sudo mv /etc/danted.conf /etc/danted.conf.bak
      5. 建立新的 Dante 設定檔。
        sudo nano /etc/danted.conf
      6. 將下列設定複製到設定檔:
        logoutput: /var/log/socks.log
                # Bind the server to the 0.0.0.0 IP address to allow traffic
                # traffic from the load balancer and the health check probes.
                internal: 0.0.0.0 port = 1080
                external: ens4
                clientmethod: none
                socksmethod: none
                user.privileged: root
                user.notprivileged: nobody
                client pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                client block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
                socks pass {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: error connect disconnect
                }
                socks block {
                        from: 0.0.0.0/0 to: 0.0.0.0/0
                        log: connect error
                }
      7. 重新啟動 Dante 伺服器並檢查狀態。
        sudo systemctl restart danted
                sudo systemctl status danted
      8. 退出 VM 執行個體。
        exit
    4. 建立負載平衡器,並將 VM 執行個體設為後端。
      1. 建立非代管執行個體群組
        gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
      2. 將在步驟 3 中建立的 VM 執行個體新增至群組。
        gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \
                    --instances=PROXY_INSTANCE_1
      3. 建立健康狀態檢查探測器,並允許來自探測器的流量。
        1. 建立健康狀態檢查探針。
          gcloud compute health-checks create tcp HEALTH_CHECK_NAME \
                      --port BACKEND_SERVER_PORT --region=REGION

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

        2. 建立防火牆規則,允許從探針傳入的流量。
          gcloud compute firewall-rules create FIREWALL_RULE_NAME_HEALTHCHECK \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:BACKEND_SERVER_PORT \
                      --source-ranges=35.191.0.0/16,130.211.0.0/22
      4. 建立 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 FIREWALL_RULE_NAME_INTERNAL \
                      --direction=INGRESS --priority=1000 --network=VPC_NETWORK \
                      --action=ALLOW --rules=all --source-ranges=SUBNET_RANGE_2

      建立端點連結

      為受管理服務建立服務連結後,您必須建立端點連結,然後在連線中使用該連結。

      端點連結為 IP 位址

      如需建立端點附件做為 IP 位址的操作說明,請參閱「建立端點附件做為 IP 位址」。

      端點連結做為主機名稱

      在某些情況下 (例如啟用 TLS 的後端),目的地會要求您使用主機名稱,而非私人 IP 來執行 TLS 驗證。如果您使用私人 DNS 而非 IP 位址做為主機目的地,除了建立端點附件做為 IP 位址之外,您還必須設定受管理的可用區。如要瞭解如何建立端點附件做為主機名稱,請參閱「建立端點附件做為主機名稱」。

      日後,當您設定連線以使用端點附件時,即可選取這個端點附件。

      設定要使用端點連結的連線

      建立端點連結後,請在連線中使用端點連結。建立新連線或更新現有連線時,請在「目的地」部分中,將「端點連結」選為「目的地類型」,然後從「端點連結」清單中選取您建立的端點連結。

      如果您建立了代管區域,請選取「主機位址」做為「目的地類型」,並使用建立代管區域時建立的 A 記錄。

      疑難排解提示

      如果您遇到私人連線問題,請按照本節列出的規範避免常見問題。

      • 請確認連接器的租用戶專案已列入服務附件中的許可清單。
      • 請確認防火牆規則的設定如下:
        • 必須允許來自 PSC 服務附件子網路的流量到達後端服務。
        • 健康狀態檢查探針必須能夠存取後端系統。Google Cloud 健康狀態檢查探測器的 IP 範圍固定為 35.191.0.0/16 和 130.211.0.0/22。因此,您必須允許這些 IP 位址將流量傳送至後端伺服器。
      • 您可以使用 Google Cloud 連線測試找出網路設定中的任何缺口。詳情請參閱「建立及執行連線測試」。