iT邦幫忙

2026 iThome 鐵人賽

DAY 9
0
自我挑戰組

和AI學習gcp - 建立對話代理系列 第 9

Day9 Cloud NAT 與 Cloud Router

  • 分享至 

  • xImage
  •  

NAT: provide "network address translation" for outbound traffic to the internet, Virtual Private Cloud (VPC) networks, on-premises networks, and other cloud provider networks.

我們會把cloud run的爬蟲掛在私有子網, 當他去向公開網路爬資料時, 簡略地說也是請求html的檔案, 但因為爬蟲沒有公開的ip, 網頁也不知道回應的對象(ip)在哪, NAT就是在解決這件事

Cloud NAT 就像是一個「社區代收處」。

  1. Cloud Run 把請求發給 NAT。
  2. NAT 用「自己的公網 IP」幫你去問 OWASP。
  3. OWASP 把資料給 NAT。
  4. NAT 再把資料帶回給躲在裡面的 Cloud Run。

有些網站會擋爬蟲, 有固定ip也可以請對方開白名單

而Cloud NAT需要跑在Cloud Router(雲端路由器)上

本日實作

A. 外部靜態 IP (Static IP Address)

我們要先向 Google 申請一個「固定電話號碼」,確保你的爬蟲每次出去都是同一個 IP。

B. Cloud Router (雲端路由器)

NAT 必須跑在路由器上。它不負責傳輸資料,它負責「交換路徑訊息」。

C. Cloud NAT 設定

這是主角。我們要設定它「在哪個子網」生效。

我們在 network.tf 新增以下這段

# 1. 申請一個靜態外部 IP (給 NAT 用)
resource "google_compute_address" "nat_ip" {
  name   = "bank-ai-nat-ip"
  region = "asia-east1"
}

# 2. 建立 Cloud Router
resource "google_compute_router" "router" {
  name    = "bank-ai-router"
  region  = "asia-east1"
  network = google_compute_network.main_vpc.id
}

# 3. 建立 Cloud NAT
resource "google_compute_router_nat" "nat_config" {
  name                               = "bank-ai-nat"
  router                             = google_compute_router.router.name
  region                             = "asia-east1"
  nat_ip_allocate_option             = "MANUAL_ONLY" # 我們要用手動指定的 IP
  nat_ips                            = [google_compute_address.nat_ip.self_link]

  # 指定在哪個子網生效 (我們只讓私有子網能上網)
  source_subnetwork_ip_ranges_to_nat = "LIST_OF_SUBNETWORKS"
  subnetwork {
    name                    = google_compute_subnetwork.bff_subnet.id #讓bff連公開網路
    source_ip_ranges_to_nat = ["ALL_IP_RANGES"] # subnet中的所有網段都可以連
  }
}

照舊跑過 terraform plan 檢查後 terraform apply 執行

可以看到 vpc network > ip addresses 出現對外的 bank-ai-nat-ip

https://ithelp.ithome.com.tw/upload/images/20260809/20154359Y5S03c5oAl.png

接著檢查 NAT, 這就要從上方搜尋nat 來找到cloud nat, 側欄沒有常駐的選項

可以看到我們的nat有掛到router上了

https://ithelp.ithome.com.tw/upload/images/20260809/201543594N5gABKUZS.png

https://ithelp.ithome.com.tw/upload/images/20260809/20154359Q0IIPiW4BT.png

點擊進NAT後應該可以看到ip是我們讓google分派的, 以及subnet是bff_subnet

今天的實作就到此 之後我們部署cloudrun到 bff subnet後應該可以用 curl命令
https://ifconfig.me

來驗證我們的ip是申請的靜態ip

Cloud NAT 費用:NAT 本身每小時約 NT$ 1.4


上一篇
Day 8 Cloud SQL 與 GCS
下一篇
Day10 從網際網路到雲端存儲 — 實作「隱身」爬蟲 Job
系列文
和AI學習gcp - 建立對話代理14
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言