設定虛擬私有雲對等互連

在 Datastream 中,虛擬私有雲網路對接可讓您使用內部 IP 位址,在虛擬私有雲網路和 Datastream 之間建立專屬連線。建立私人連線設定前,請先查看支援的網路拓撲,並完成虛擬私有雲和Shared VPC必要條件。如要連線至 Cloud SQL 執行個體,您也可以在虛擬私有雲網路中設定 NAT VM。

關於 Datastream 中的虛擬私有雲網路對接

使用私人連線會在 Datastream 網路中建立專屬連線,其他客戶都無法共用。

虛擬私有雲網路與 Datastream 虛擬私有雲網路之間的虛擬私有雲網路對接連線,可讓 Datastream 連線至:

虛擬私有雲網路與 Datastream 虛擬私有雲網路之間的虛擬私有雲網路對接連線,不允許 Datastream 連線至:

  • 位於虛擬私有雲網路中的 Private Service Connect 端點。
  • 資源位於與您的虛擬私有雲網路對接,但「未」與 Datastream 虛擬私有雲網路對接的其他虛擬私有雲網路,因為虛擬私有雲網路對接不提供遞移路由。

如要在 Datastream 和只能從虛擬私有雲網路存取的資源 (例如 Cloud SQL 執行個體) 之間建立連線,您可以在虛擬私有雲網路中使用網路位址轉譯 (NAT) VM。下圖顯示 NAT VM 設定範例,可讓 Datastream 私下連線至 Cloud SQL 執行個體:

Datastream 使用者流程圖

虛擬私有雲對接必要條件

您必須先執行下列步驟,讓 Datastream 建立與專案的虛擬私有雲對接連線,才能建立私人連線設定:

  • 具備可與 Datastream 私人網路對接的虛擬私有雲網路,且該網路符合「虛擬私有雲網路對等互連」頁面所述的要求。如要進一步瞭解如何建立這個網路,請參閱「使用虛擬私有雲網路對等互連」。
  • 找出虛擬私有雲網路中的可用 IP 範圍 (CIDR 區塊為 /29),這個 IP 範圍不得與現有子網路、私人服務存取權預先分配的 IP 範圍,或任何包含該 IP 範圍的路徑 (預設 0.0.0.0 路徑除外) 重疊。IP 範圍也不得與 Datastream 預留的內部 IP 範圍 (10.1.0.0/16 和 10.2.2.0/24) 重疊。Datastream 會使用這個 IP 範圍建立子網路,以便與來源資料庫通訊。下表說明有效的 IP 範圍。
範圍 說明
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
私人 IP 位址 RFC 1918
100.64.0.0/10 共用位址空間 RFC 6598
192.0.0.0/24 IETF 通訊協定指派 RFC 6890
192.0.2.0/24 (TEST-NET-1)
198.51.100.0/24 (TEST-NET-2)
203.0.113.0/24 (TEST-NET-3)
說明文件 RFC 5737
192.88.99.0/24 IPv6 到 IPv4 轉送 (已淘汰) RFC 7526
198.18.0.0/15 基準測試 RFC 2544
  • 請確認虛擬私有雲網路中與 Datastream 通訊的所有資源 (例如 NAT VM、內部負載平衡器,或來源和目的地資料庫),均未使用 10.1.0.0/16 或 10.2.2.0/24 範圍內的 IP 位址。這些範圍是 Datastream 內部基礎架構的保留範圍,如果用於資源,可能會導致轉送衝突和無法預測的連線失敗。

  • 確認 Google Cloud 和地端部署防火牆允許來自所選 IP 範圍的流量。如果沒有,請建立輸入防火牆規則,允許來源資料庫通訊埠上的流量,並確認防火牆規則中的 IPv4 位址範圍與建立私人連線資源時分配的 IP 位址範圍相同:

    gcloud compute firewall-rules create FIREWALL-RULE-NAME \
      --direction=INGRESS \
      --priority=PRIORITY \
      --network=PRIVATE_CONNECTIVITY_VPC \
      --project=VPC_PROJECT \
      --action=ALLOW \
      --rules=FIREWALL_RULES \
      --source-ranges=IP-RANGE
      

    更改下列內容:

    • FIREWALL-RULE-NAME:要建立的防火牆規則名稱。
    • PRIORITY:規則的優先順序,以 0 到 65535 之間的整數表示 (含首尾)。這個值必須小於封鎖流量規則設定的值 (如有)。優先順序值越小,代表優先順序越高。
    • PRIVATE_CONNECTIVITY_VPC:可與 Datastream 私人網路對接,且符合虛擬私有雲網路對接頁面所述規定的虛擬私有雲網路。這是您在建立私人連線設定時指定的虛擬私有雲。
    • VPC_PROJECT:虛擬私有雲網路的專案。
    • FIREWALL_RULES:防火牆規則適用的通訊協定和通訊埠清單,例如 tcp:80。規則必須允許 TCP 流量傳送至來源資料庫或 Proxy 的 IP 位址和通訊埠。由於私人連線可支援多個資料庫,因此規則必須考量設定的實際用量。
    • IP-RANGE:Datastream 用來與來源資料庫通訊的 IP 位址範圍。這個範圍與您在建立私人連線設定時,於「Allocate an IP range」(分配 IP 範圍) 欄位中指定的範圍相同。

      您可能也需要建立相同的輸出防火牆規則,允許流量傳回 Datastream。

  • 獲派具備 compute.networks.list 權限的角色。這項權限可讓您取得必要的 IAM 權限,列出專案中的虛擬私有雲網路。如要瞭解哪些角色包含這項權限,請參閱 IAM 權限參考資料。

Shared VPC 必要條件

如果您使用Shared VPC,除了虛擬私有雲必要條件一節所述的步驟外,還必須完成下列操作:

  1. 在服務專案中:

    1. 啟用 Datastream API。
    2. 取得 Datastream 服務帳戶使用的電子郵件地址。執行下列任一操作時,系統會建立 Datastream 服務帳戶:

      • 建立 Datastream 資源,例如連線設定檔或串流。
      • 您建立私人連線設定,選取 Shared VPC,然後按一下「建立 Datastream 服務帳戶」。服務帳戶會在主專案中建立。

      如要取得 Datastream 服務帳戶使用的電子郵件地址,請在 Google Cloud 控制台首頁中找出「Project number」(專案編號)。服務帳戶的電子郵件地址為 service-[project_number]@gcp-sa-datastream.iam.gserviceaccount.com。

  2. 在主專案中:

    1. 將 compute.networkAdmin Identity and Access Management (IAM) 角色權限授予 Datastream 服務帳戶。只有在建立虛擬私有雲對接時,才需要這個角色。建立對等互連後,就不再需要這個角色。

      如果貴組織不允許授予權限,請建立自訂角色,並授予下列最低權限,以便建立及刪除私人連線資源:

    如要進一步瞭解自訂角色,請參閱「建立及管理自訂角色」。

設定 NAT VM

  1. 找出 Datastream 需要連線的 Cloud SQL 執行個體 IP 位址。

  2. 找出虛擬私有雲網路。這個虛擬私有雲網路會透過虛擬私有雲網路對等互連,連線至 Datastream 虛擬私有雲網路。

  3. 如果您尚未在 Datastream 中建立私人連線設定,請先完成這項操作。這項操作會建立虛擬私有雲網路對接連線,連結您的虛擬私有雲網路和 Datastream 虛擬私有雲網路。請記下 Datastream 私人連線設定使用的 IP 位址範圍。

  4. 選擇要用於 NAT VM 的機型,並在下一個步驟中建立。Google Cloud 會根據 VM 執行個體的機型,針對由虛擬私有雲網路中下一個躍點轉送的封包,強制執行每個執行個體的輸出頻寬上限。詳情請參閱「輸出至可在虛擬私有雲網路中轉送的目的地」和「每個執行個體的輸出頻寬上限」。

  5. 在虛擬私有雲網路中建立 NAT VM。建立 VM 時,必須啟用 IP 轉送功能。詳情請參閱「為執行個體啟用 IP 轉送功能」。

    如果虛擬私有雲網路是 Shared VPC 網路,您可以在主專案或任何服務專案中建立 NAT VM,前提是 NAT VM 的網路介面位於 Shared VPC 網路中。

    • 為盡可能縮短網路封包往返時間,請在 Datastream 所在區域建立 NAT VM。
    • 這個範例假設 NAT VM 只有一個網路介面。
    • 在 Linux 發行版 (例如 Debian 12) 中執行指令碼。
    • 使用下列開機指令碼。每次 VM 啟動時,root 都會執行開機指令碼。這個指令碼包含註解,說明每行指令碼的作用。在指令碼中,將 CLOUD_SQL_INSTANCE_IP 替換為 Cloud SQL 執行個體的 IP 位址,並將 DATABASE_PORT 替換為資料庫軟體使用的目的地通訊埠。
    #! /bin/bash
    
    export DB_ADDR=CLOUD_SQL_INSTANCE_IP
    export DB_PORT=DATABASE_PORT
    export SYSCTL_CONF_FILE="/etc/sysctl.d/99-sysctl.conf"
    
    # Ensure the VM can receive packets whose destinations do
    # not match any running process local to the VM
    if [ "$(sysctl net.ipv4.ip_forward)" != "net.ipv4.ip_forward = 1" ]; then
        echo "Enabling IP forwarding..."
        if [ ! -f "${SYSCTL_CONF_FILE}" ]; then
           # Create the kernel parameter config file if it doesn't exist.
           touch "${SYSCTL_CONF_FILE}"
        fi
        # Remove any lines with net.ipv4.ip_forward:
        sed -i '/net.ipv4.ip_forward/d' "${SYSCTL_CONF_FILE}"
        # Append net.ipv4.ip_forward=1:
        echo "net.ipv4.ip_forward=1" >> "${SYSCTL_CONF_FILE}"
        # Reload kernel parameters:
        sysctl --system
    fi
    
    # Ask the Metadata server for the IP address of the VM nic0
    # network interface:
    md_url_prefix="http://169.254.169.254/computeMetadata/v1/instance"
    vm_nic_ip="$(curl -H "Metadata-Flavor: Google" ${md_url_prefix}/network-interfaces/0/ip)"
    
    # Clear any existing iptables NAT table entries (all chains):
    iptables -t nat -F
    
    # Create a NAT table entry in the prerouting chain, matching
    # any packets with destination database port, changing the destination
    # IP address of the packet to the SQL instance IP address:
    iptables -t nat -A PREROUTING \
         -p tcp --dport $DB_PORT \
         -j DNAT \
         --to-destination $DB_ADDR
    
    # Create a NAT table entry in the postrouting chain, matching
    # any packets with destination database port, changing the source IP
    # address of the packet to the NAT VM's primary internal IPv4 address:
    iptables -t nat -A POSTROUTING \
         -p tcp --dport $DB_PORT \
         -j SNAT \
         --to-source $vm_nic_ip
    
    # Save iptables configuration:
    iptables-save
  6. 建立允許輸入防火牆規則 (或全域網路防火牆政策、區域網路防火牆政策或階層式防火牆政策中的規則),並具備下列特性:

    • 方向:輸入
    • 動作:允許
    • 目標參數:至少為 NAT VM
    • 來源參數:Datastream 私人連線設定使用的 IP 位址範圍
    • 通訊協定:TCP
    • 通訊埠:至少須包含 DATABASE_PORT
  7. 默示允許輸出防火牆規則允許 NAT VM 將封包傳送至任何目的地。如果虛擬私有雲網路使用輸出拒絕防火牆規則,您可能需要建立輸出允許防火牆規則,允許 NAT VM 將封包傳送至 Cloud SQL 執行個體。如果必須設定輸出允許規則,請使用下列參數:

    • 方向:輸出
    • 動作:允許
    • 目標參數:至少為 NAT VM
    • 目的地參數:Cloud SQL 執行個體 IP 位址
    • 通訊協定:TCP
    • 通訊埠:至少須包含 DATABASE_PORT
  8. 請務必設定 Cloud SQL 執行個體,接受來自 NAT VM 網路介面所用主要內部 IPv4 位址的連線。如需操作說明,請參閱 Cloud SQL 說明文件中的「使用已獲授權的網路進行授權」。

  9. 在 Datastream 中建立連線設定檔。在設定檔的連線詳細資料中,指定您建立的網路位址轉譯 VM 主要內部 IPv4 位址。在連線設定檔的通訊埠欄位中,輸入來源資料庫的通訊埠。

設定一組網路位址轉譯 VM 和內部直通式網路負載平衡器

如要提高 NAT VM 解決方案的可靠性,請考慮採用下列架構,其中使用一對 NAT VM 和內部直通式網路負載平衡器:

  1. 在相同區域的不同可用區中,建立兩個 NAT VM。請按照「設定 NAT VM」的操作說明建立各個 VM,並將每個 VM 放入各自的可用區非代管執行個體群組。

    或者,您也可以建立區域性代管執行個體群組。在代管執行個體群組範本中,加入開機指令碼,例如「設定 NAT VM」操作說明中的範例開機指令碼。

  2. 建立內部直通式網路負載平衡器,其後端服務會使用上一步中的一或多個執行個體群組做為後端。如需內部直通式網路負載平衡器範例,請參閱「設定具備 VM 執行個體群組後端的內部直通式網路負載平衡器」。

    設定負載平衡器健康狀態檢查時,您可以使用 TCP 健康狀態檢查,其目的地 TCP 通訊埠與 DATABASE_PORT 相符。健康狀態檢查封包會根據網路位址轉譯 VM 設定,轉送至 CLOUD_SQL_INSTANCE_IP。或者,您也可以在 NAT VM 上執行本機程序,在自訂通訊埠上回應 TCP 或 HTTP 健康狀態檢查。

  3. 按照「設定 NAT VM」操作說明,建立防火牆規則並設定 Cloud SQL 授權網路。確認 Cloud SQL 授權網路包含兩個 NAT VM 的主要內部 IPv4 位址。

  4. 建立 Datastream 連線設定檔時,請在設定檔的連線詳細資料中,指定內部直通式網路負載平衡器轉送規則的 IP 位址。

後續步驟