Google Cloud 代管服務中的網路連線
本頁面說明如何設定從 Integration Connectors 到後端服務的私有連線,例如 MySQL 適用的 Cloud SQL、PostgreSQL 適用的 Cloud SQL 和 SQL Server 適用的 Cloud SQL。本頁面假設您熟悉下列概念:
注意事項
建立 PSC 服務附件時,請考量下列要點:
- PSC 服務連結和負載平衡器是在同一虛擬私有雲內的不同子網路中建立。具體來說,服務連結一律是在 NAT 子網路中建立。
- SOCKS5 Proxy 伺服器必須繫結至
0.0.0.0:<port>IP 位址,因為這是負載平衡器和健康狀態檢查探測傳入流量的必要條件。詳情請參閱「健康狀態檢查」。 - 負載平衡器和健康狀態檢查探測器的流量應傳送至相同通訊埠。
- 設定防火牆規則,方便流量流動。
輸入規則
- 來自 PSC 服務連結子網路的流量應會抵達後端服務。
- 在 ILB 的子網路中,ILB 應能將流量傳送至 SOCKS5 Proxy 伺服器。
- 健康狀態檢查探測應可存取 SOCKS5 Proxy 伺服器。Google Cloud 健康狀態檢查探測器具有固定的 IP 範圍 (
35.191.0.0/16, 130.211.0.0/22)。因此,這些 IP 可以傳送流量至 SOCKS Proxy 伺服器。
輸出規則
除非設定了特定的拒絕規則,否則 Google Cloud 雲端專案預設會啟用輸出流量。
- 所有 Google Cloud 元件 (例如 PSC 服務連結和負載平衡器) 都應位於相同區域。
- 請確認 SOCKS5 Proxy 伺服器在下列情況下接受流量:
- 直通負載平衡器 (L4 TCP/UDP ILB): 來自 PSC 服務連結 NAT IP 的要求應可連上 SOCKS5 Proxy 伺服器。因此,您必須允許服務連結的整個 NAT 子網路 IP 範圍。詳情請參閱「Private Service Connect 子網路」。
- 以 Proxy 為基礎的 HTTP(S) 負載平衡器 (L4 Proxy ILB、L7 ILB): 所有新要求都來自負載平衡器。因此,SOCKS5 Proxy 伺服器應接受來自虛擬私有雲網路 Proxy 子網路的要求。詳情請參閱「Envoy 型負載平衡器適用的子網路 (僅限 Proxy)」。
設定私人連線
部分 Google Cloud 代管服務 (例如 CloudSQL MySQL) 會公開 PSC 服務連結,供私人連線使用。在這種情況下,您可以略過建立 PSC 服務連結的步驟,並使用代管服務提供的 PSC 服務連結,建立 Integration Connectors 端點連結。
在下列情況中,您必須建立新的 PSC 服務附件:
- Google Cloud 代管服務不會公開服務連結,但會透過私人服務存取權公開 IP 位址。
- Google Cloud 代管服務會公開服務連結,但無法將 Integration Connectors 專案加入允許清單,以使用服務連結。
如要瞭解如何在這兩種情況下建立服務連結,請參閱下列各節的詳細說明。建立服務連結後,您必須建立端點連結並設定連線,才能使用端點連結。
為限制存取權的代管服務建立服務連結
代管服務可能不允許將 Integration Connectors 專案加入許可清單,以使用其公開的服務附件。在這種情況下,您必須建立會耗用服務連結的負載平衡器,並在專案中建立另一個服務連結,將負載平衡器公開給 Integration Connectors。
下圖顯示公開服務連結的代管服務:
如需公開服務連結的代管服務範例,請參閱「MongoDB Atlas 叢集的私有連線」。
建立以 PSC NEG 為後端的負載平衡器
- 建立 NEG,連線至已發布的服務。
- 在區域性內部 Proxy 網路負載平衡器中新增後端。
詳情請參閱「建立 Private Service Connect NEG」一文。
建立服務連結
- 建立 PSC NAT 的子網路。
- 建立防火牆規則,允許從 PSC NAT 傳送要求至負載平衡器
- 建立服務連結。
詳情請參閱「建立 PSC 服務連結」
允許來自 Integration Connectors 專案的 Private Service Connect 連線
如要瞭解如何將 Integration Connectors 專案的 Private Service Connect 連線加入允許清單,請參閱「將 Integration Connectors 加入允許清單」。
為公開 IP 位址的代管服務建立服務連結
如果代管服務未公開服務附件,來自 Integration Connectors 的流量就必須透過您的專案進行 Proxy 處理。
下圖顯示未公開服務連結的代管服務:
如要設定私人連線,請按照下列步驟操作:
- 建立 PSC 服務連結。
- 建立 Compute Engine VM 執行個體,用於執行 SOCKS5 Proxy 伺服器。
- 建立 Proxy 執行個體 1。
gcloud compute instances create PROXY_INSTANCE_1 \ --project=PROJECT_ID \ --network-interface=network-tier=PREMIUM,subnet=SUBNET_NAME_2,no-address
您可以視需求建立任意數量的 VM 執行個體。
- 建立 Proxy 執行個體 1。
- 建立防火牆規則,允許透過 SSH 連線至 VM 執行個體。
gcloud compute firewall-rules create FIREWALL_RULE_NAME_SSH \ --direction=INGRESS --priority=1000 --network=VPC_NETWORK --allow=tcp:22 - 透過 SSH 連線至 VM 執行個體。
gcloud compute ssh \ --tunnel-through-iap \ PROXY_INSTANCE_1 - 安裝 Dante SOCKS5 Proxy 伺服器。
sudo apt update sudo apt install dante-server - 檢查伺服器介面。
sudo ip a
- 建立 Dante 設定的備份。
sudo mv /etc/danted.conf /etc/danted.conf.bak
- 建立新的 Dante 設定檔。
sudo nano /etc/danted.conf
- 將下列設定複製到設定檔:
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 }
- 重新啟動 Dante 伺服器並檢查狀態。
sudo systemctl restart danted sudo systemctl status danted - 退出 VM 執行個體。
exit
- 建立後端為 VM 執行個體的負載平衡器。
- 建立非代管執行個體群組。
gcloud compute instance-groups unmanaged create INSTANCE_GROUP_NAME
- 將步驟 3 中建立的 VM 執行個體新增至群組。
gcloud compute instance-groups unmanaged add-instances INSTANCE_GROUP_NAME \ --instances=PROXY_INSTANCE_1 - 建立健康狀態檢查探測要求,並允許來自探測要求的流量。
- 建立健康狀態檢查探針。
gcloud compute health-checks create tcp HEALTH_CHECK_NAME \ --port BACKEND_SERVER_PORT --region=REGION
在這項指令中,請將 BACKEND_SERVER_PORT 設為 1080,這是 SOCKS5 Proxy 伺服器執行的預設通訊埠。
- 建立防火牆規則,允許探測器傳送流量。
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
- 建立健康狀態檢查探針。
- 建立 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 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 連線測試可用於找出網路設定中的任何缺口。詳情請參閱「建立及執行連線測試」。
- 建立非代管執行個體群組。
VM 執行個體會用於將流量從 Integration Connectors 代理至代管服務。在 VM 執行個體中安裝 SOCKS5 Proxy。Cloud SQL 驗證 Proxy 支援透過 SOCKS5 Proxy 鏈結,讓您將加密流量從 Cloud SQL 驗證 Proxy 轉送至目的地 Cloud SQL 執行個體。
本文不提供安裝及設定 SOCKS5 Proxy 伺服器的詳細步驟,您可以安裝任何 SOCKS5 Proxy。下列步驟說明如何安裝及設定 Dante SOCKS5 Proxy 伺服器。
- 建立 Compute Engine VM 執行個體,用於執行 SOCKS5 Proxy 伺服器。