雙重堆疊子網路可讓 Cloud Run 資源透過直接虛擬私有雲輸出流量,將 IPv4 和 IPv6 流量傳送至虛擬私有雲網路。您可以將現有的「僅限 IPv4」(單一堆疊) 子網路變更為雙重堆疊子網路。
子網路類型
虛擬私有雲網路支援下列 Compute Engine 子網路類型:
僅支援 IPv4 (單一堆疊) 的子網路,僅含 IPv4 子網路範圍
IPv4 和 IPv6 (雙重堆疊) 子網路,同時具有 IPv4 和 IPv6 子網路範圍
雙堆疊限制
變更現有 Cloud Run 資源的堆疊類型前,請先考量以下限制:
只有自訂模式虛擬私有雲網路中的子網路,才支援雙重堆疊。如要讓雙重堆疊子網路使用內部存取權類型,必須啟用虛擬私有雲網路內部 IPv6 範圍。設定虛擬私有雲網路,或將其轉換為自訂模式。
與僅支援 IPv4 的子網路相比,雙重堆疊子網路的冷啟動延遲時間可能會較長,進而限制應用程式的擴充速度。
不支援 NAT64。
事前準備
請確認 Cloud Run 服務代理程式具備Compute Public IP 管理員角色 (roles/compute.publicIpAdmin),才能使用具有外部 IPv6 的子網路。
在資源上新增雙堆疊子網路
雙重堆疊子網路同時具有 IPv4 和 IPv6 位址範圍。
如要在 Cloud Run 資源上新增雙堆疊子網路,請按照下列步驟操作:
控制台
在 Google Cloud 控制台中:
啟用 Compute Engine API:
前往「VPC networks」(VPC 網路) 頁面:
如要建立新的自訂模式網路,請按一下「建立虛擬私有雲網路」。 如果您使用現有的虛擬私有雲網路,請按一下虛擬私有雲網路的名稱,顯示其「VPC network details」(虛擬私有雲網路詳細資料) 頁面。
如果您要建立新網路或轉換現有網路,請輸入名稱,並確認「子網路建立模式」設為「自訂」,然後選取「為這個虛擬私有雲網路設定 ULA 內部 IPv6 範圍」。
在「子網路」分頁中,按一下「新增子網路」。在顯示的面板中:
- 提供「Name」(名稱)。
- 選擇「Region」(區域)。
- 在「IP 堆疊類型」部分,選取「IPv4 和 IPv6 (雙重堆疊)」。
- 輸入「IPv4 range」(IPv4 範圍)。這是子網路的主要 IPv4 範圍。
選取 IPv6 存取權類型。
如果沒有內部選項,但您需要這個選項,請確認網路已指派內部 IPv6 範圍。
按一下「新增」。
在您建立的雙堆疊子網路上部署 Cloud Run 服務、執行工作或部署 worker 集區。輸入所需資源詳細資料時,請按照下列步驟選取新的 IPv6 位址範圍:
- 按一下「容器、磁碟區、網路與安全性」,然後選取「網路」分頁標籤。
- 按一下「連線至虛擬私有雲,以傳出流量」,然後按一下「直接將流量傳送至虛擬私有雲」。
- 選取您在上一個步驟中建立的「網路」。
- 按一下「子網路」欄位,選取新建立的 IPv6 位址範圍。
系統會自動根據子網路的堆疊類型佈建資源。
gcloud
如要建立支援雙重堆疊子網路的自訂模式網路,請執行
gcloud compute networks create指令。如要在這個網路的任何子網路上設定內部 IPv6 範圍,請使用
--enable-ula-internal-ipv6標記。這個選項會從內部 IPv6 子網路範圍使用的fd20::/20範圍內,指派/48ULA 前置字元。 Google Cloudgcloud compute networks create NETWORK \ --subnet-mode=custom \ --enable-ula-internal-ipv6
將
NETWORK替換為要包含新子網路的虛擬私有雲網路名稱。如要轉換為或更新自訂模式網路,使其支援雙重堆疊子網路,請執行下列指令:
gcloud compute networks update NETWORK \ --subnet-mode=custom \ --enable-ula-internal-ipv6
將
NETWORK替換為要包含新子網路的虛擬私有雲網路名稱。如要建立具有 IPv6 範圍的雙堆疊子網路,請使用雙堆疊設定執行
subnets create指令:gcloud compute networks subnets create SUBNET \ --network=NETWORK \ --range=PRIMARY_IPv4_RANGE \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=IPV6_ACCESS_TYPE \ --region=REGION
更改下列內容:
SUBNET:新子網路的名稱。NETWORK:虛擬私有雲網路的名稱,此網路將包含新的子網路。PRIMARY_IPv4_RANGE:新子網路的主要 IPv4 範圍,採用 CIDR 標記法。詳情請參閱「IPv4 子網路範圍」。IPV6_ACCESS_TYPE:新子網路的 IPv6 存取類型,可以是internal或external。REGION:新子網路的建立 Google Cloud 區域。
在您建立的雙堆疊子網路上部署 Cloud Run 服務、執行工作或部署 worker 集區。系統會自動根據子網路的堆疊類型佈建資源。
YAML
如要建立新服務,請略過這個步驟。 如要更新現有服務,請下載其 YAML 設定:
gcloud run services describe SERVICE --format export > service.yaml
更新下列屬性:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE_NAME labels: cloud.googleapis.com/location: REGION spec: template: metadata: annotations: run.googleapis.com/network-interfaces: '[{"network":"NETWORK","subnetwork":"SUBNET","tags":"NETWORK_TAG_NAMES"}]' run.googleapis.com/vpc-access-egress: EGRESS_SETTING spec: containers: - image: IMAGE
取代:
- SERVICE_NAME 改為您的 Cloud Run 服務名稱。服務名稱長度不得超過 49 個字元,且每個區域和專案的服務名稱都必須是唯一的。
- REGION,並將其替換為 Cloud Run 服務的區域,該區域必須與子網路的區域相符。
- 將 NETWORK 替換為您的虛擬私有雲網路名稱。
- 將 SUBNET 替換為子網路名稱。您可以在同一個子網路上部署或執行多項服務、工作或工作站集區。
- 選用:NETWORK_TAG_NAMES,您要與服務建立關聯的網路標記名稱。如果是服務,網路標記是在修訂版本層級指定。每個服務修訂版本可以有不同的網路標記,例如
network-tag-2。 - EGRESS_SETTING,並將輸出設定值設為:
all-traffic:透過虛擬私有雲網路傳送所有輸出流量。private-ranges-only:只透過虛擬私有雲網路將流量傳送至內部位址。
- IMAGE 改為服務容器映像檔的網址。
您也可以指定更多設定,例如環境變數或記憶體上限。
使用下列指令建立或更新服務:
gcloud run services replace service.yaml
Terraform
如要瞭解如何套用或移除 Terraform 設定,請參閱「基本 Terraform 指令」。
請將以下內容新增到您的
main.tf檔案中:
如要允許未經驗證的存取服務,可以公開服務。
將子網路從單一堆疊變更為雙重堆疊
如要在自訂模式虛擬私有雲網路中,將 IPv6 子網路範圍新增至現有的「僅限 IPv4」子網路,請參閱「將子網路的堆疊類型變更為雙重堆疊」。然後部署 Cloud Run 服務、執行工作,或在雙堆疊子網路上部署工作集區。
將子網路從雙重堆疊變更為單一堆疊
如要將資源的雙重堆疊子網路變更為單一堆疊子網路,請參閱「將雙重堆疊子網路變更為僅限 IPv4」。然後部署 Cloud Run 服務、執行工作,或在雙堆疊子網路上部署工作集區。
確認網路和子網路
如要確認資源是否位於虛擬私有雲網路上,請執行下列指令:
gcloud run services describe SERVICE_NAME --region=REGION
將 REGION 替換為建立新子網路的 Google Cloud 區域。
以下範例輸出內容顯示您的網路和子網路:
VPC Access:
Network: example-network
Subnet: example-subnet
Egress: private-ranges-only