跳至主要內容
GCP 核心服務 — 第 5/10 篇

多個 GCP 專案的網路怎麼接?Shared VPC、Peering 與 Cloud NAT

內文字級

多個 GCP 專案的網路怎麼接?Shared VPC、Peering 與 Cloud NAT
更新:2026-10-07

前言

在 GCP-104 建過 VPC、子網路和防火牆之後,接下來常遇到的是跨專案問題:幾個團隊要共用網路嗎?兩個 VPC 要互通嗎?沒有外部 IP 的 VM 又該怎麼連出去?

這篇會用具體情境比較 Shared VPC、VPC Peering、Cloud NAT 和 Private Google Access,讓每個服務的用途與限制更容易分清楚。

💡 動手前先確認

這課接在 GCP-104 後面,預設你已經知道什麼是子網路(subnet)、以及防火牆規則有方向之分——INGRESS(入站)管別人連進來、EGRESS(出站)管自己連出去。如果這兩個還有點模糊,建議先回頭把 GCP-104 翻一翻,不然底下講 Cloud NAT、防火牆優先順序時會卡住。

三種進階 VPC 模式:Shared VPC 由 Host project 集中管理網路,Service project 的 VM 網路介面附掛共享 Subnet;VPC Peering 只直接連接 A 與 B,不能經 B 傳遞到 C;沒有外部 IP 的 VM 可經 Cloud NAT 發起出站網際網路連線,或啟用 Private Google Access 存取 Google APIs

三個工具不要用名稱猜用途:Shared VPC 解決多專案共用與集中治理;Peering 解決兩個 VPC 的直接私網互通,但不提供傳遞路由;Cloud NAT 讓私有 VM 發起對外連線,不接受未經請求的入站連線;Private Google Access 則讓沒有外部 IP 的工作負載使用 Google API。圖中的 Cloud Router 管理 NAT 設定,資料封包不會實際穿過一台路由器 VM。


場景一:多專案共用網路 — Shared VPC

假設你公司有三個 GCP 專案:dev-project、staging-project、prod-project,每個各自帶一個 VPC。現在 VM 之間要互通,你得拉幾條 VPC Peering?三條——A↔B、B↔C、A↔C。三個專案還好,等哪天變成十個專案,連線數會爆炸成幾十條,光是管這些對接就夠你頭痛了。

這時候你需要的不是「把每個網路接起來」,而是「大家根本共用同一個網路」。

解法:Shared VPC

Shared VPC 讓你把一個 VPC 共享給多個專案用,這樣只要管一個網路就好。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  ORG["GCP Organization"] --> HOST["Host Project<br/>擁有 Shared VPC"]
  ORG --> SERVICES["Service Projects<br/>dev/staging/prod"]
  HOST --> NETWORK["shared-vpc<br/>集中管理路由與防火牆"]
  NETWORK --> SUBNETS["依環境分配共享 Subnet<br/>subnet-dev/staging/prod"]
  SERVICES --> COMPUTE["VM/GKE/其他運算資源<br/>仍由各 Service Project 擁有"]
  SUBNETS -. "授予 compute.networkUser<br/>後附掛網路介面" .-> COMPUTE
  XPN["Organization Admin<br/>compute.xpnAdmin"] -. "啟用 Shared VPC<br/>並掛接 Service Projects" .-> HOST
  NETADMIN["Network Admin<br/>compute.networkAdmin"] -. "管理 VPC、Subnet、<br/>路由與防火牆" .-> NETWORK
  SA["Service Project SA<br/>compute.networkUser"] -. "只使用被授權的 Subnet" .-> COMPUTE

Host Project 擁有並治理 VPC、子網路與防火牆;Service Project 仍擁有自己的運算資源,只取得指定共享子網路的使用權。把資源擁有權與網路使用權分開,是理解 Shared VPC 的關鍵。

角色與權限

角色誰需要說明
roles/compute.xpnAdmin組織管理員啟用/管理 Shared VPC(xpn = Cross-Project Networking,Shared VPC 的舊內部代號,看到這串別被嚇到,就是它)
roles/compute.networkAdmin主機專案網路管理員管理 VPC 與子網路
roles/compute.networkUser服務專案 Service Account使用共享子網路建立 VM

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

設定步驟

# 1. 啟用 Shared VPC(需要組織管理員)
gcloud compute shared-vpc enable HOST_PROJECT_ID

# 2. 將服務專案連接到主機專案
gcloud compute shared-vpc associated-projects add SERVICE_PROJECT_ID \
  --host-project=HOST_PROJECT_ID

# 3. 授予服務專案的 Service Account 網路使用權限
gcloud projects add-iam-policy-binding HOST_PROJECT_ID \
  --member="serviceAccount:app-sa@SERVICE_PROJECT_ID.iam.gserviceaccount.com" \
  --role="roles/compute.networkUser"

# 4. 在主機專案建立子網路(供服務專案使用)
gcloud compute networks subnets create subnet-dev \
  --network=shared-vpc \
  --region=asia-east1 \
  --range=10.10.0.0/24 \
  --project=HOST_PROJECT_ID

重要限制

  • 一個專案只能是 主機專案 OR 服務專案,不能兩者兼具
  • 一個服務專案只能附屬於一個主機專案
  • 必須在同一個組織(Organization)內

場景二:VPC 間直連 — VPC Peering

什麼是 VPC Peering?

VPC Peering 讓兩個 VPC 直接走 Google 私有骨幹網路互通,不用公開 IP,延遲低、頻寬也高。

⚠️ 關鍵限制:不支援傳遞路由(Non-Transitive)

這裡要注意的是,VPC Peering 不會把路由一路轉送到第三個 VPC:

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  subgraph EXISTING["目前建立的直接連線"]
    direction LR
    A["VPC-A"] <-->|"Peering A↔B"| B["VPC-B"]
    B <-->|"Peering B↔C"| C["VPC-C"]
  end
  A -. "不能借道 B" .-> BLOCK["✕ 沒有 A→B→C<br/>傳遞路由"]
  BLOCK -.-> C
  NEED{"A 與 C 也需要互通?"} -->|"少量固定網路"| DIRECT["另外建立 A↔C<br/>直接 Peering"]
  NEED -->|"網路數量持續增加"| SCALE["改評估 Shared VPC 或<br/>Network Connectivity Center"]
  A --> NEED
  DIRECT --> CHECK["確認 CIDR 不重疊、<br/>雙邊設定與各自防火牆"]
  SCALE --> CHECK

A↔B 與 B↔C 只代表兩組直接鄰居,B 不會成為 A 到 C 的轉送節點。網路數量增加時,逐條建立完整網狀 Peering 會快速膨脹,應改評估集中式拓撲。

A 要連到 C 的話,就得另外再拉一條 A↔C 的 peering。

💡 重點:Peering 不會替第三個 VPC 轉送

A↔B 和 B↔C 已建立 Peering,不代表 A 能透過 B 連到 C。若三個 VPC 都要直接互通,還需要 A↔C;網路越多,完整網狀 Peering 的連線數會很快增加。這時可比較 Shared VPC、Network Connectivity Center 等拓撲,但要先確認各網路的管理邊界和連線需求。(參考:VPC Network Peering 文件)

其他限制

限制說明
子網路不能重疊兩個 VPC 的 IP 範圍(CIDR,標記 IP 區段的寫法,例如 10.0.0.0/24 代表一段 256 個位址)不能重疊;重疊了 GCP 會搞不清楚某個 IP 該送去哪一邊
雙向設定兩個 VPC 都需要各自建立 peering(不是單邊設定)
防火牆獨立各 VPC 的防火牆規則不會互相繼承
跨區域收費跨 region peering 流量有小額費用

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

設定步驟

# VPC-A 專案建立 peering 到 VPC-B(舊教學常見的 --auto-create-routes 已棄用,不用加)
gcloud compute networks peerings create a-to-b \
  --network=vpc-a \
  --peer-project=PROJECT_B \
  --peer-network=vpc-b

# VPC-B 專案也要建立對應 peering(雙向設定)
gcloud compute networks peerings create b-to-a \
  --network=vpc-b \
  --peer-project=PROJECT_A \
  --peer-network=vpc-a

# 確認狀態(兩邊都是 ACTIVE 才算成功)
gcloud compute networks peerings list --network=vpc-a
GCP Console 建立對等互連連線(VPC Peering)表單,資訊列說明會以完整網狀拓撲連結並自動建立子網路路徑;對接連線名稱 vpc-a-to-vpc-b,「您的虛擬私有雲網路」待選,對接虛擬私有雲網路選「在其他專案中」,專案 ID 填 peer-project-vpc-b、虛擬私有雲網路名稱填 vpc-b,通訊協定為 IPv4(單一堆疊),下方為交換 IPv4 自訂路徑(匯入/匯出自訂路由)選項

這是 VPC Peering 的建立表單,畫面上填的是「A 這一側」——指定要對接的對方專案( peer-project-vpc-b)跟網路名稱(vpc-b)。記得內文說的雙向設定:對方那個專案也得反過來建一條指回 A 的 peering,兩邊都設好、狀態都 ACTIVE 才算通。至於「非傳遞」,表單不會幫你擋——A↔B、B↔C 各建一條,A 到 C 就是不通,得另外再拉一條 A↔C。

Shared VPC vs VPC Peering 選擇

需求選擇
同組織多專案,需要集中管理單一網路Shared VPC
多個專案想共用同一套子網路與防火牆規則Shared VPC
連接不同組織或外部合作夥伴 VPCVPC Peering
各專案需要獨立的 CIDR 規劃VPC Peering
簡化防火牆管理Shared VPC

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。


場景三:私有 VM 連出網路 — Cloud NAT

為了安全,你很可能會把 VM 的外部 IP 拿掉——沒有公開 IP,外面就攻不進來。但問題立刻來了:這台 VM 想跑 apt-get update、想 pip install 拉套件、想呼叫某個第三方 API,全都連不出去了。沒有對外的門,VM 等於被關在房間裡。

那要怎麼讓它「只能出去、不能被進來」?這就是 Cloud NAT 要解決的事。

解法:Cloud NAT

Cloud NAT 是全托管的出站 NAT 服務,讓沒有外部 IP 的 VM 也能連上網際網路(只出不進)。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

sequenceDiagram
  autonumber
  participant VM as 私有 VM<br/>10.0.0.5
  participant NAT as Cloud NAT<br/>掛在 Cloud Router 設定
  participant WEB as Internet<br/>第三方端點
  VM->>NAT: 主動建立出站連線
  Note over NAT: 建立來源 IP/port 對應<br/>換成 NAT 外部 IP
  NAT->>WEB: 以 NAT IP 送出請求
  WEB-->>NAT: 回應既有連線
  NAT-->>VM: 依對應表還原並送回 10.0.0.5
  WEB-xNAT: 未經請求的入站連線
  Note over NAT,VM: 沒有既有對應,不會轉送到 VM

Cloud Router 提供 NAT 的控制面設定,不是一台實際承載封包的代理 VM。Cloud NAT 只為內部端點主動建立的連線保存轉換狀態,因此回應能返回,陌生的入站連線則沒有對應可走。

⚠️ 重要:Cloud NAT 只支援出站連線

方向是單向的:VM 可以主動發起連線出去,但外面沒辦法主動連進來(不支援 inbound)。如果你的服務需要被外部連入,那 Cloud NAT 幫不上忙——這時候 VM 得有公開 IP,或是擺在 Load Balancer 後面。

建立 Cloud NAT

Cloud NAT 自己不能單獨存在,得搭配一個 Cloud Router(雲端路由器,GCP 裡負責動態管理路由的元件)。你可以把 Cloud Router 想成 NAT 的「掛載點」:它本身管路由,Cloud NAT 則像外掛一樣裝在它上面,借它來處理那些位址轉換。所以順序一定是先建 Router、再建 NAT:

GCP Console 建立 Cloud NAT 閘道表單上半,閘道名稱 my-nat-gateway,網路位址轉譯(NAT)類型選「公開」(另有「私人」),「選取 Cloud Router」區塊有網路、區域、Cloud Router 三個待選下拉選單

建 Cloud NAT 的第一步。注意「選取 Cloud Router」這整塊——如同上面說的,NAT 不能單獨存在,一定要掛在一個 Cloud Router 上;所以這裡得先選網路、區域,再指定(或順手新建)一個 Router。NAT 類型選「公開」,就是讓沒有外部 IP 的私有 VM 透過公網位址連出去。

# 1. 建立 Cloud Router
gcloud compute routers create my-router \
  --network=my-vpc \
  --region=asia-east1

# 2. 建立 Cloud NAT(自動分配 NAT 外部 IP)
gcloud compute routers nats create my-nat \
  --router=my-router \
  --region=asia-east1 \
  --nat-all-subnet-ip-ranges \
  --auto-allocate-nat-external-ips

# 3. 若需要靜態外部 IP(方便 IP 白名單)
gcloud compute addresses create nat-ip-1 --region=asia-east1

gcloud compute routers nats create my-nat \
  --router=my-router \
  --region=asia-east1 \
  --nat-all-subnet-ip-ranges \
  --nat-external-ip-pool=nat-ip-1
GCP Console 建立 Cloud NAT 閘道表單下半「Cloud NAT 對應」,來源端點類型選「VM 執行個體、GKE 節點、無伺服器端點」(另有代管 Proxy 負載平衡器),下方為來源 IP 版本、IPv4 子網路範圍(來源子網路),以及 Cloud NAT IP 位址設為「自動(建議選項)」

再往下就是 NAT 要服務誰、用哪個 IP 出去。來源端點類型那排正好對上下面的支援表——VM、GKE 節點、無伺服器端點都能走這套 NAT。最下面的 Cloud NAT IP 位址「自動」就是讓 Google 幫你配外部 IP(對應 --auto-allocate-nat-external-ips);要固定 IP 方便做白名單,才改成手動指定 IP 集區。

各服務的 Cloud NAT 支援

服務支援 Cloud NAT備注
Compute Engine✅原生支援
GKE✅Node 和 Pod 均可
Cloud Run✅(透過 Serverless VPC Access 連接器或 Direct VPC Egress)將出向流量導入 VPC 後即可用 Cloud NAT;Direct VPC Egress 為較新的推薦做法
App Engine Standard✅(透過 Serverless VPC Access 連接器)把 connector 的 egress 設成 all-traffic,就和 Cloud Run 走同一套 serverless→VPC→NAT 機制,可取得固定外部 IP

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。


場景四:私有 VM 存取 Google API — Private Google Access

問題

私有 VM 想呼叫 storage.googleapis.com(Cloud Storage API)或 bigquery.googleapis.com,但又不想讓流量走公網。

解法:Private Google Access

在子網路上啟用 Private Google Access,私有 VM 就能走 Google 私有骨幹網路存取 Google API,流量完全不出 Google 網路。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  START["沒有外部 IP 的私有 VM<br/>需要連到哪裡?"] --> DEST{"目的地或連線方向"}
  DEST -->|"Google APIs<br/>Storage、BigQuery、Logging"| PGA["在子網路啟用<br/>Private Google Access"]
  PGA --> GOOGLE["沿 Google 網路到<br/>受支援的 googleapis.com"]
  DEST -->|"公開網站或第三方 API<br/>GitHub、套件庫"| NAT["設定 Cloud Router + Cloud NAT<br/>提供出站網際網路"]
  NAT --> INTERNET["Internet<br/>只能回應既有連線"]
  DEST -->|"兩種目的地都需要"| BOTH["同時啟用 PGA 與 Cloud NAT<br/>兩者不是互斥選項"]
  BOTH --> GOOGLE
  BOTH --> INTERNET
  DEST -->|"網際網路要主動連入服務"| INBOUND["使用外部 Application Load Balancer<br/>或明確配置外部 IP"]
  INBOUND --> FIREWALL["再以防火牆與應用認證<br/>限制允許的入站流量"]

Private Google Access 解決 Google API 路徑,Cloud NAT 解決一般公網出站;若工作負載同時需要兩者,就同時設定。任何需要陌生公網用戶主動連入的服務,都不能靠 Cloud NAT 完成。

支援的服務

  • Cloud Storage、BigQuery、Pub/Sub、Cloud SQL Admin API(Auth Proxy 取憑證用;資料庫連線本身要走 Private IP 或 Private Service Connect)
  • Cloud Logging、Cloud Monitoring
  • 絕大多數 *.googleapis.com 端點(少數區域型的 rep.googleapis.com 端點除外)
  • 不包含:公網網站(GitHub、npm registry 等)→ 需要 Cloud NAT

啟用方式

# 建立子網路時啟用
gcloud compute networks subnets create private-subnet \
  --network=my-vpc \
  --region=asia-east1 \
  --range=10.0.1.0/24 \
  --enable-private-ip-google-access

# 在現有子網路上啟用
gcloud compute networks subnets update private-subnet \
  --region=asia-east1 \
  --enable-private-ip-google-access

Private Google Access vs VPC Service Controls

功能Private Google AccessVPC Service Controls
目的讓私有 VM 存取 Google API防止資料外洩(加安全邊界)
方向私有 VM → Google API雙向存取控制
設定層級子網路組織/專案層級
適合場景基本私有網路需求高度合規、資料外洩防護

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

💡 重點提點:Cloud NAT 跟 Private Google Access 最容易搞混

兩者解決的是不同連線需求:沒有外部 IP 的 VM 若要連 GitHub、npm 等外部服務,可以透過 Cloud NAT 出站;若要私下存取 Cloud Storage、BigQuery 等 Google API,則要檢查 Private Google Access 的設定。像「VM 要執行 apt-get,也要讀 Cloud Storage」這種情境,應分別確認兩條路徑,不要把它們當成同一個開關。


防火牆規則深度解析

優先順序(Priority)

防火牆規則優先順序:數字越小,優先級越高(0 = 最高,65535 = 最低)。

建議分配:

範圍用途
0–999緊急封鎖(例:阻擋已知攻擊 IP)
1000–9999標準應用規則
10000–64999低優先規則
65000–65534自訂 catch-all 拒絕規則(在隱含規則之前生效)

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

⚠️ 自訂規則的合法 priority 是 0–65535(含),你其實可以建 priority=65535 的規則。重點在於:VPC 的隱含規則(允許出站、拒絕入站)是評估的最後一步,只有在沒有任何規則匹配時才會套用。所以自訂的 catch-all 拒絕規則(例如 priority 65000)會在隱含的 allow-egress / deny-ingress 之前先生效。

隱含規則(Implied Rules)

每個 VPC 都有兩條隱含的最低優先規則:

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart LR
  subgraph SELECT["找出匹配規則"]
    direction TB
    PACKET["封包到達 VM 網路介面"] --> DIRECTION{"方向是 INGRESS<br/>還是 EGRESS?"}
    DIRECTION --> CANDIDATES["比對來源/目的、協定、<br/>target tag 或 Service Account"]
    CANDIDATES --> MATCH{"有自訂規則匹配?"}
  end
  subgraph CUSTOM["有自訂規則"]
    direction TB
    PRIORITY["選數字最小的 Priority<br/>0 最高、65535 最低"] --> TIE{"同一 Priority 同時有<br/>allow 與 deny?"}
    TIE -->|"是"| DENY["deny 生效"]
    TIE -->|"否"| ACTION["執行規則的<br/>allow 或 deny"]
  end
  subgraph DEFAULT["沒有自訂規則"]
    direction TB
    IMPLIED{"封包方向"}
    IMPLIED -->|"EGRESS"| ALLOW_OUT["隱含 allow egress<br/>允許出站"]
    IMPLIED -->|"INGRESS"| DENY_IN["隱含 deny ingress<br/>拒絕入站"]
  end
  MATCH -->|"有"| PRIORITY
  MATCH -->|"沒有"| IMPLIED

防火牆不是依建立時間評估,而是先找出真正匹配的規則,再由較小的 Priority 數字勝出;沒有任何自訂規則匹配時,才落到允許出站、拒絕入站的隱含規則。

這也是為什麼你不設防火牆時,VM 連得出去(出站預設允許),但外面連不進來(入站預設拒絕)。

防火牆規則範例

# 允許特定 IP 範圍 SSH
gcloud compute firewall-rules create allow-ssh-from-office \
  --network=my-vpc \
  --direction=INGRESS \
  --allow=tcp:22 \
  --source-ranges=203.0.113.0/24 \
  --priority=1000

# 允許 HTTP/HTTPS 公開存取
gcloud compute firewall-rules create allow-http-https \
  --network=my-vpc \
  --direction=INGRESS \
  --allow=tcp:80,tcp:443 \
  --source-ranges=0.0.0.0/0 \
  --target-tags=web-server \
  --priority=1000

# 使用 Service Account 作為目標(更安全)
gcloud compute firewall-rules create allow-db-from-app \
  --network=my-vpc \
  --direction=INGRESS \
  --allow=tcp:5432 \
  --source-service-accounts=app-sa@my-project.iam.gserviceaccount.com \
  --target-service-accounts=db-vm-sa@my-project.iam.gserviceaccount.com \
  --priority=1000

Network Tags vs Service Accounts

特性Network TagsService Accounts
安全性較低(任何人都能加 tag)較高(綁定 IAM)
審計紀錄有限完整的 IAM 審計日誌
建議用途開發/測試環境生產環境(推薦)

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

Cloud NGFW 防火牆政策(Firewall Policies)

傳統防火牆規則是綁在單一 VPC 上的(per-VPC)。Cloud NGFW 的防火牆政策(firewall policies) 則可以階層式套用到組織、資料夾或 VPC 網路:

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  ORG["Organization Firewall Policy<br/>全公司安全基線"] --> FOLDER_A["Folder Policy<br/>事業群 A 例外與限制"]
  ORG --> FOLDER_B["Folder Policy<br/>事業群 B 例外與限制"]
  FOLDER_A --> PROJECT_A["Project/VPC Rules<br/>應用 A 的連接埠與來源"]
  FOLDER_A --> PROJECT_B["Project/VPC Rules<br/>應用 B 的連接埠與來源"]
  FOLDER_B --> PROJECT_C["Project/VPC Rules<br/>應用 C 的連接埠與來源"]
  SECURITY["中央 Security Team"] -. "維護不可缺少的基線" .-> ORG
  PLATFORM["Platform/BU Team"] -. "管理事業群需求" .-> FOLDER_A
  APP["Application Team"] -. "維護最小必要流量" .-> PROJECT_A

階層式 Policy 適合把公司基線與事業群需求放在較高層,應用團隊只維護專案或 VPC 的最小必要規則。這種分工比在每個 VPC 手動複製同一批規則更容易稽核。

組織層級的規則可以強制套用到所有 VPC,合規性比較好顧。


把四個場景串起來看

先區分要解決的是「多專案網路治理」還是「單一私有工作負載的連線路徑」,再走對應的選型圖;兩組工具可以在同一架構中並存。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  START["多專案/多 VPC<br/>需要互通或集中治理"] --> MODEL{"最主要的治理需求?"}
  MODEL -->|"同一組織共用 Subnet、<br/>路由與防火牆"| SHARED["Shared VPC<br/>共享 Subnet 與集中治理"]
  MODEL -->|"少量獨立 VPC<br/>一對一直接互通"| PEERING["VPC Peering<br/>CIDR 不重疊、路由非傳遞"]
  MODEL -->|"許多獨立網路<br/>需要樞紐式互通"| NCC["NCC<br/>樞紐式拓撲"]

Shared VPC 讓同組織專案共用一套網路;Peering 適合少量直接鄰居;獨立網路數量持續增加時,應評估樞紐式拓撲,不要讓 Peering 數量平方成長。

查看流程與節點文字

箭頭表示流程方向;方括號與引號內是節點名稱,可搭配下方圖解閱讀。

flowchart TB
  START["私有工作負載<br/>沒有外部 IP"] --> PATH{"需要哪種連線路徑?"}
  PATH -->|"存取受支援的<br/>Google API"| PGA["Private Google Access<br/>由子網路啟用"]
  PATH -->|"主動連到一般公網<br/>並接收既有連線回應"| NAT["Cloud NAT<br/>全托管出站 NAT"]
  PATH -->|"讓公網使用者<br/>主動連入服務"| INBOUND["外部 Load Balancer/外部 IP<br/>再限制 ingress"]

Private Google Access 與 Cloud NAT 都由私有工作負載主動發起連線,但目的地不同;需要公網主動入站時,則必須使用 Load Balancer 或外部 IP,而不是 Cloud NAT。


ACE 考試重點整理

必背知識點

  1. Shared VPC:一個專案不能同時是 host 和 service project
  2. VPC Peering 非傳遞:A↔B、B↔C,但 A 無法透過 B 連到 C
  3. Cloud NAT 只支援出站:無法從網際網路主動連入
  4. Private Google Access 只能存取 Google API,不是完整網路
  5. 防火牆優先數字:數字越小優先級越高(0 = 最高)
  6. 隱含規則:出站預設允許、入站預設拒絕
  7. Service Account > Network Tag(防火牆安全性)

常見陷阱題

Q:VPC-A peering VPC-B,VPC-B peering VPC-C,VPC-A 能連 VPC-C 嗎? A:不能。VPC Peering 不支援傳遞路由,要直接建立 A↔C 的 peering 才行。

Q:私有 VM 要能 apt-get 並且存取 Cloud Storage,需要分別設什麼? A:apt-get → Cloud NAT(公網出站);Cloud Storage → Private Google Access(Google API)。兩個都要設。

Q:Cloud NAT 支援從網際網路連入 VM 嗎? A:不支援。Cloud NAT 純出站(egress only)。

Q:防火牆規則 priority=500 和 priority=1500 哪個先被評估? A:priority=500 先被評估(數字小 = 高優先)。


總結

這幾個網路功能常一起出現在架構圖上,但負責的事情不同:

  • Shared VPC:組織內多專案共用一個 VPC,集中管理,需要在同組織內
  • VPC Peering:兩個 VPC 直連,注意非傳遞限制與子網路不重疊
  • Cloud NAT:讓私有 VM 能出站到網際網路,只出不進
  • Private Google Access:讓私有 VM 透過 Google 私有骨幹存取 Google API

下一課 ACE-211:BigQuery 資料倉儲實戰,學習如何用 SQL 分析 PB 級資料。

網路系列

課程主題
GCP-104VPC 基礎、防火牆、Cloud IAP
本課 GCP-110Shared VPC、VPC Peering、Cloud NAT
GCP-114Cloud DNS、DNSSEC、路由策略
ACE-210負載均衡、Cloud CDN、Cloud Armor
ACE-216VPN、Interconnect、混合雲連線

表格超出欄寬時,可左右捲動;鍵盤可聚焦表格後用左右方向鍵查看。

GCP 核心服務 — 第 5 篇/共 10 篇 查看系列全覽 →

讀完後,留一個學習紀錄

試著用自己的話說出一個重點,以及你會如何運用。實作文章請先核對結果與清理資源,再標記為讀完。

文章進度以你確認讀完的標記為準,可隨時取消。舊版造訪紀錄保留,但不計入讀完;這份自評不代表已掌握內容。

留言討論

文章目錄與系列

徽章解鎖!