網址擷取、Sockets 和 Mail API 等傳出服務會運用大型的 IP 位址集區。這個集區中的 IP 位址範圍可能會進行例行性的變動。事實上,連續兩個來自相同應用程式的 API 呼叫看起來可能像是從不同 IP 位址發出。
如果您需要瞭解服務的出站流量相關 IP 位址,可以找出服務目前的 IP 位址範圍,或是為服務設定靜態 IP 位址。
App Engine 服務的 IP 位址
您可以根據 Google 發布的 IP 範圍資訊,查看 App Engine 服務目前的 IP 位址範圍:
Google 在 goog.json 中公布了一份 IP 範圍完整清單,並提供給網際網路使用者。
另外,Google 也以 cloud.json 的格式發布了另一份清單,當中列出了客戶的 Google Cloud 資源可用的全球和地區性外部 IP 位址範圍。
Google API 和服務使用的 IP 位址,會在從 goog.json
中移除 cloud.json
的所有範圍後,計算出的範圍清單中找到。這些清單會經常更新。
您可以使用以下 Python 指令碼,建立 IP 位址範圍清單,其中包含 Google API 和服務使用的 IP 位址範圍。
如要瞭解如何執行這個指令碼,請參閱「如何執行」。
設定靜態外寄 IP 位址
如要為 App Engine 標準環境服務設定靜態 IP 位址,請搭配使用 無伺服器虛擬私人雲端存取、Cloud Router 和 Cloud NAT。使用無伺服器虛擬私人雲端存取功能,您就能將出站流量傳送至虛擬私人雲端 (VPC) 網路。在 VPC 上使用網路位址轉譯 (NAT) 閘道,即可透過專用 IP 位址轉送 App Engine 流量。
透過 Cloud NAT 路由流量不會在網路堆疊中造成額外跳躍,因為 Cloud NAT 閘道和 Cloud Router 只提供控制層,且封包不會經過 Cloud NAT 閘道或 Cloud Router。
對於使用 URL Fetch 服務傳送的流量,無法設定靜態傳出 IP 位址。使用網址擷取服務傳送的流量將繼續使用公開 IP 位址集區。如果您希望所有傳出流量都使用靜態 IP 位址,請停用網址擷取預設值,並停止使用 urlfetch
程式庫的任何明確用途。
下列步驟說明如何為 App Engine 標準環境服務設定靜態外連 IP 位址。
請確認您具備 roles/compute.networkAdmin 角色,或是具備相同權限的自訂角色。
在 VPC 網路中為 App Engine 流量建立子網路。這麼做可確保虛擬私有雲網路中的其他資源無法使用靜態 IP 位址。
gcloud compute networks subnets create SUBNET_NAME \ --range=RANGE \ --network=NETWORK_NAME \ --region=REGION
在上述指令中,請這樣取代:
SUBNET_NAME
改成您要為子網路指定的名稱。RANGE
,其中包含要指派給此子網路的 CIDR 格式IP 範圍 (例如10.124.0.0/28
)- 將
NETWORK_NAME
替換為虛擬私人雲端網路的名稱。 REGION
改成 App Engine 服務的地區。
將 App Engine 服務連結至子網路。
請按照連線至虛擬私有雲網路指南操作,並指定您在前一個步驟中為連結器子網路建立的子網路名稱。
建立新的 Cloud Router。Cloud Router 是 Cloud NAT 的必要控制層元件。
gcloud compute routers create ROUTER_NAME \ --network=NETWORK_NAME \ --region=REGION
在上述指令中,請這樣取代:
ROUTER_NAME
中提供要建立的 Cloud Router 資源名稱。- 將
NETWORK_NAME
替換為虛擬私人雲端網路的名稱。 REGION
改為您要在其中建立 NAT 閘道的地區。
保留靜態 IP 位址。
這是服務用來傳送傳出流量的地址。當與之相關聯的資源遭到刪除及重新建立時,預留的 IP 位址資源會保留基礎 IP 位址。這個 IP 位址會計入 Google Cloud 專案中的靜態 IP 位址配額。
gcloud compute addresses create ORIGIN_IP_NAME \ --region=REGION
在上述指令中,請這樣取代:
ORIGIN_IP_NAME
改成您要指派給 IP 位址資源的名稱。REGION
與將執行 Cloud NAT 路由器的地區。建議您選擇與 App Engine 服務相同的地區,以盡量降低延遲時間和網路費用。
使用
compute addresses describe
指令查看結果:gcloud compute addresses describe ORIGIN_IP_NAME
建立 Cloud NAT 閘道並指定 IP 位址。
來自子網路的流量會經過這個閘道,並使用您在先前步驟中保留的靜態 IP 位址。
gcloud compute routers nats create NAT_NAME \ --router=ROUTER_NAME \ --region=REGION \ --nat-custom-subnet-ip-ranges=SUBNET_NAME \ --nat-external-ip-pool=ORIGIN_IP_NAME
在上述指令中,請這樣取代:
NAT_NAME
與您要建立的 Cloud NAT 閘道資源名稱。ROUTER_NAME
替換為 Cloud Router 的名稱。REGION
改為您要在其中建立 NAT 閘道的地區。ORIGIN_IP_NAME
與您在上一個步驟中建立的保留 IP 位址資源名稱。
將無伺服器虛擬私有雲存取egress 設定設為
all-traffic
。根據預設,使用無伺服器虛擬私有雲存取的 App Engine 服務只會將內部流量傳送至虛擬私有雲網路。如要將具有外部目的地的流量傳送至 VPC 網路,讓網路擁有您指定的靜態 IP 位址,您必須變更輸出設定。
請在服務的
app.yaml
檔案中指定出口設定:vpc_access_connector: name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME egress_setting: all-traffic
取代:
- 將
PROJECT_ID
改成您的 Google Cloud 專案 ID。 REGION
與連接器所在的地區。CONNECTOR_NAME
替換為連接器名稱。
部署服務:
gcloud app deploy
- 將