【GCP教學】如何解決 Cloud NAT 連接埠不足問題並優化 GCP 網路設定

情境

我們在 Google Cloud (舊稱:GCP) 上的服務有使用 Cloud NAT,最近會遇到時好時壞的狀況,看起來是 NAT 有封包被 drop 掉。目前解法是增加 GCP 對外 NAT 的 IP 數量,但我們不能隨意新增 NAT IP 數量,因為被呼叫端有鎖我們過去的 IP 為白名單,請問我們該如何處理?

操作

常見的情況有兩種

第一種情況 Out of Resources,您可以減少您 port 的使用,例如:

  1. 關閉 Endpoint-Independent Mapping.
  2. 開啟 dynamic port allocation
  3. 確認 port 最少的使用量。

第二種情況 Endpoint-Independent Conflict

您可以關閉 Endpoint-Independent Mapping 或是增加每台 VM 最低的 port 數量。

每個 VM 執行個體的最低通訊埠數量 30000 代表 NAT 後端的 VM 每台都會至少開啟這個數量的通訊埠。而這個數量也會影響到 1 個 NAT IP 所能支援的 VM 數量。

以官方文件的例子,計算方式大致如下 (最後數量只取整數):

⌊(1 個 NAT IP) × (每個 IP 64,512 個通訊埠) / (每台 VM 64 個通訊埠)⌋ = 1,008 VMs

⌊(2 個 NAT IP) × (每個 IP 64,512 個通訊埠) / (每台 VM 64 個通訊埠)⌋ = 2,016 VMs

⌊(1 個 NAT IP) × (每個 IP 64,512 個通訊埠) / (每台 VM 4096 個通訊埠)⌋ = 15 VMs

而調大調小的影響: 若是使用靜態分配,調大對於流量不會有實際影響。調小會造成原有的 NAT 連線中斷,用戶端則必須重新建立 TCP 連線。

若是使用動態分配,配置有更改時 (不論調大或調小),所有分配到 VM 的 port 數量會短暫被重新調整至最低數量,這則會造成部份流量影響,或是您也可以選擇減少 port 的使用。

參考文件

[1] https://cloud.google.com/nat/docs/troubleshooting#insufficient-ports

[2] https://cloud.google.com/nat/docs/troubleshooting#endpoint-independent-conflict

[3] https://cloud.google.com/nat/docs/ports-and-addresses#port-reservation-examples

[4] https://cloud.google.com/nat/docs/ports-and-addresses#specs-increasing

[5] https://cloud.google.com/nat/docs/ports-and-addresses#specs-reducing

[6] https://cloud.google.com/nat/docs/troubleshooting#reduce-ports

訂閱 CloudMile 電子報

所有 CloudMile 最新消息、產品動態、活動資訊和特別優惠,立即掌握。