管理目的地重疊

本頁面說明供應商網路管理員如何管理虛擬私有雲 (VPC) 網路中目的地重疊的問題,該網路使用 Private Service Connect 介面。

Google Cloud 可確保指派給同一虛擬機器 (VM) 執行個體網路介面的子網路 IP 位址範圍不會重疊。不過,消費者和生產者虛擬私有雲網路中的子網路可以重疊,如圖 1 所示。使用 Private Service Connect 介面時,如果目的地 IP 位址範圍重疊,則必須進行額外設定,確保流量能抵達預期網路中的正確目的地。

本頁面說明的指令會顯示如何暫時更新使用 Debian 作業系統的 VM 路由。如要永久更新 VM,或設定作業系統不同的 VM,請參閱作業系統的公開說明文件。

生產者虛擬私有雲網路中的 Subnet-a 與消費者虛擬私有雲網路中的 subnet-c 重疊,因為兩個子網路使用相同的 IP 位址範圍。生產端 VM 必須能夠在兩個網路中連線至 10.0.1.5

您可以透過下列方式管理重疊的目的地 IP 位址範圍,詳情請參閱本頁:

您也可以使用下列方法管理目的地重疊,但本頁不會說明這些方法:

  • 使用通訊端程式庫和 bind() 控制轉送。
  • 為生產者網路使用完全不重疊的 IP 位址空間。
  • 如果生產者端的重疊 IP 位址僅適用於第一方 API 端點,您可以為內部部署主機設定私人 Google 存取權
  • 使用虛擬路由和轉送 (VRF),隔離重疊的 IP 位址空間。為每個 Private Service Connect 介面指派 VRF 執行個體。為每個 VRF 執行個體設定預設路徑,確保流量能抵達預期目的地。
  • 使用 eBPF 根據 IP 位址以外的條件,自訂進階轉送規則。如果無法使用上述選項,建議採用這種做法。

使用網路命名空間管理目的地地址重疊問題

您可以使用網路命名空間管理目的地地址重疊問題。如果生產端 VM 上的某些應用程式只需要存取消費端工作負載,而生產端 VM 上的其他應用程式只需要存取生產端工作負載,這個方法就非常適用。

如要使用網路命名空間管理目的地地址重疊問題,請執行下列步驟:

  1. 連線至具有 Private Service Connect 介面的 VM。

  2. 找出 Private Service Connect 介面的客體 OS 名稱

  3. 如要為傳送至消費者的流量建立網路命名空間,請使用下列指令:

    sudo ip netns add consumer-ns
    
  4. 將 Private Service Connect 介面移至消費者網路命名空間。個別執行下列指令:

    sudo ip link set OS_INTERFACE_NAME netns consumer-ns
    
    sudo ip netns exec consumer-ns ip link set OS_INTERFACE_NAME up
    

    OS_INTERFACE_NAME 替換為您在上一個步驟中找到的 Private Service Connect 介面客層 OS 名稱。

  5. 還原 Private Service Connect 介面的 IP 位址:

    sudo ip netns exec consumer-ns ip addr add INTERFACE_IP/32 dev OS_INTERFACE_NAME
    

    INTERFACE_IP 替換為 Private Service Connect 介面的 IP 位址。

  6. 驗證對 Private Service Connect 介面所做的變更:

    sudo ip netns exec consumer-ns ip a
    

    確認私人服務連線介面的客體 OS 名稱是否列在指令的輸出內容中。確認介面是否具有正確的 IP 位址。

  7. 新增閘道 IP 位址的路徑:

    sudo ip netns exec consumer-ns ip route add GATEWAY_IP dev OS_INTERFACE_NAME scope link
    

    GATEWAY_IP 替換為私人服務連線介面子網路的預設閘道 IP 位址

  8. 為 Private Service Connect 介面新增預設路徑:

    sudo ip netns exec consumer-ns ip route add default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  9. 驗證 consumer-ns 命名空間的路由表:

    sudo ip netns exec consumer-ns ip route
    

    確認路由表單包含下列形式的項目:

    default via GATEWAY_IP dev OS_INTERFACE_NAME
    
  10. 如要確認介面可以連線至重疊 IP 位址範圍各部分的 VM,請按照下列步驟操作:

    1. 請確認防火牆規則已設定為允許傳送至目標 VM 的輸入 ICMP 流量

    2. 從介面的 VM 傳送 ICMP ping 給位於重疊 IP 位址範圍內的消費者 VM。使用消費者命名空間:

      sudo ip netns exec consumer-ns ping CONSUMER_IP_ADDRESS
      

      CONSUMER_IP_ADDRESS 替換為來自重疊 IP 位址範圍的消費者 VM IP 位址。

    3. 從介面的 VM 傳送 ICMP ping 至重疊 IP 位址範圍內的生產者 VM。使用預設命名空間:

      ping PRODUCER_IP_ADDRESS
      

      PRODUCER_IP_ADDRESS 替換為來自重疊 IP 位址範圍的 Producer VM IP 位址。

管理目的地地址與策略路由的重疊問題

您可以在介面 VM 的作業系統上設定以政策為準的路由,藉此管理目的地地址重疊問題。如果同一應用程式需要存取消費者和生產者虛擬私有雲網路中的工作負載,這個方法就非常實用,但您必須針對重疊 IP 範圍中要連線的每個不同通訊埠,重複執行程序。

設定以政策為準的路由,管理目的地重疊時,請選擇要用於消費者應用程式的目標連接埠。預定要流向其中一個連接埠的流量會透過 Private Service Connect 介面流向用戶端子網路,其他流量則會透過預設介面流向供應商子網路。

  1. 連線至 Private Service Connect 介面的 VM。

  2. 如果 iproute2 指令無法使用,請安裝該指令。

  3. 確認您可以寫入下列檔案: /etc/iproute2/rt_tables

  4. 建立路由表。為 Private Service Connect 介面新增預設路徑:

    echo "200 pscnet" >> /etc/iproute2/rt_tables \
    sudo ip route add default dev OS_INTERFACE_NAME table pscnet
    

    OS_INTERFACE_NAME 替換為 Private Service Connect 介面的客體 OS 名稱,例如 ens5

  5. 透過預設閘道,將路徑新增至重疊的消費者子網路範圍:

    sudo ip route add CONSUMER_SUBNET_RANGE via GATEWAY_IP dev OS_INTERFACE_NAME table pscnet
    

    更改下列內容:

    • CONSUMER_SUBNET_RANGE:消費者子網路的 IP 位址範圍。
    • GATEWAY_IP:Private Service Connect 介面子網路的預設閘道 IP 位址
  6. 更新路由表,讓這個 VM 的輸出封包使用介面的 IP 位址做為來源 IP 位址:

    sudo ip route add GATEWAY_IP src INTERFACE_IP dev OS_INTERFACE_NAME table pscnet
    

    INTERFACE_IP 替換為 Private Service Connect 介面的 IP 位址。

  7. 新增 IP 規則,套用至所有傳送至消費者應用程式目標通訊埠的流量:

    sudo ip rule add dport CONSUMER_PORT table pscnet
    

    CONSUMER_PORT 替換為您為傳輸至消費者 VM 的流量設定的通訊埠。

  8. 如要根據封包的目的地連接埠,確認封包是否已轉送至正確的 VM,請按照下列步驟操作:

    1. 在供應商和消費者網路中建立測試 VM,兩者都使用重疊範圍內的相同 IP 位址。
    2. 在每個測試 VM 上設定 HTTP 伺服器。將消費者測試 VM 設定為監聽您為消費者應用程式設定的通訊埠。將生產者測試 VM 設定為監聽與消費者應用程式不同的通訊埠。
    3. 確認防火牆規則已設定為允許 HTTP 流量傳送至測試 VM。
    4. 使用為消費者應用程式設定的連接埠,向測試 IP 位址發出 GET 要求,然後確認您已連上正確的執行個體:

      curl TEST_IP_ADDRESS:CONSUMER_PORT
      

      更改下列內容:

      • TEST_IP_ADDRESS:測試 VM 的 IP 位址。
      • CONSUMER_PORT:消費者應用程式的通訊埠。
    5. 使用您為實際運作測試 VM 設定的連接埠,向測試 IP 位址發出 GET 要求,然後確認您已連上正確的執行個體:

      curl IP_ADDRESS:PRODUCER_PORT
      

      更改下列內容:

      • IP_ADDRESS:測試 VM 的 IP 位址。
      • PRODUCER_PORT:您為正式版測試 VM 設定的通訊埠。