本頁說明如何設定私人集區,透過靜態外部 IP 存取外部資源。
如要直接在 Google Cloud 控制台按照逐步指南操作,請按一下「Guide me」(逐步引導):
事前準備
-
Enable the Cloud Build, Compute Engine, and Service Networking APIs.
如要取得設定私人連線所需的權限,請要求管理員在虛擬私有雲網路所在的 Cloud 專案中,授予您 Compute Engine 網路管理員 (
roles/compute.networkAdmin
) 身分與存取權管理角色。如要進一步瞭解如何授予角色,請參閱「管理存取權」。如要在本頁面使用
gcloud
指令,請安裝 Google Cloud CLI。
建立虛擬私人雲端網路
主控台
如要使用 Google Cloud 控制台建立虛擬私有雲網路,請完成下列步驟:
在 Google Cloud 控制台中開啟「VPC networks」(虛擬私有雲網路) 頁面。
按一下「建立虛擬私有雲網路」,建立新網路。
您會看到「建立虛擬私有雲網路」頁面。
輸入網路的名稱。
在「子網路建立模式」底下選取「自動」。
如要進一步自訂其他欄位,請參閱「建立及管理虛擬私有雲網路」。否則,請保留所有欄位。
按一下「建立」,建立虛擬私有雲網路。
gcloud
如要使用 gcloud
指令列工具建立 VPC 網路,請在終端機中輸入下列指令,其中的 NETWORK_NAME 是 VPC 網路的名稱:
gcloud compute networks create NETWORK_NAME \
--subnet-mode=auto
如要進一步瞭解如何建立及管理虛擬私有雲網路,請參閱「建立及管理虛擬私有雲網路」。
建立私人連線
主控台
如要在虛擬私有雲網路與服務供應商網路之間建立私人連線,請完成下列步驟:
在 Google Cloud 控制台中開啟「VPC networks」(虛擬私有雲網路) 頁面。
按一下網路名稱。
畫面會顯示「虛擬私有雲網路詳細資料」頁面。
按一下「Private Service Connection」(私人服務連線) 分頁標籤。
選取「Allocated IP ranges for services」(已分配的服務 IP 範圍) 分頁標籤。
按一下「Allocate IP range」(分配 IP 範圍)。
畫面上會顯示「Allocate an internal IP range」(分配內部 IP 範圍) 彈出式方塊。
輸入 IP 範圍的名稱。
在「IP 範圍」下方,選取「自動」。
在「Prefix length」(前置字元長度) 欄位中,輸入網路的前置字元長度。
按一下「分配」分配 IP 範圍。
選取「Private Connections to Services」(私人服務連線) 分頁標籤。
按一下「建立連線」。
畫面上會顯示「建立私人連線」彈出式視窗。
在「Assigned allocation」(已指派的分配範圍) 下方,選取您的 IP 範圍。
按一下「連線」。
現在您會在「Private Connections to Services」(私人服務連線) 分頁下方的表格中,看到連線。
按一下「Enable」(啟用) (匯出自訂路徑),確保虛擬私有雲的路徑會套用至執行私人集區執行個體的網路。
網路設定完成。
gcloud
如要在虛擬私有雲網路與服務供應商網路之間建立私人連線,請完成下列步驟:
在終端機中輸入下列指令,為服務分配 IP 範圍:
gcloud compute addresses create RESERVED_RANGE_NAME \ --global \ --prefix-length=PREFIX_LENGTH \ --network=VPC_NETWORK \ --project=PROJECT_ID
其中:
- RESERVED_RANGE_NAME 是分配範圍的名稱。例如:
my-allocated-range
。 - PREFIX_LENGTH 是網路的前置字元長度。前置字串長度必須小於或等於
/24
,例如/22
、/21
等。 - VPC_NETWORK 是您的 VPC 網路名稱,例如
my-vpc-network
。 - PROJECT_ID 是含有虛擬私有雲網路的專案 ID。
- RESERVED_RANGE_NAME 是分配範圍的名稱。例如:
在終端機中輸入下列指令,建立私人連線:
gcloud services vpc-peerings connect \ --service=servicenetworking.googleapis.com \ --ranges=RESERVED_RANGE_NAME \ --network=VPC_NETWORK \ --project=PROJECT_ID
其中:
- RESERVED_RANGE_NAME 是您在上一個步驟中建立的分配範圍名稱。
- VPC_NETWORK 是您的 VPC 網路名稱,例如
my-vpc-network
。 - PROJECT_ID 是含有虛擬私有雲網路的專案 ID。
在終端機中輸入下列指令,確保 VPC 的路徑會套用至執行私人集區執行個體的網路:
gcloud compute networks peerings update servicenetworking-googleapis-com \ --export-custom-routes \ --network=VPC_NETWORK \ --project=PROJECT_ID
其中:
- VPC_NETWORK 是您的 VPC 網路名稱,例如
my-vpc-network
。 - PROJECT_ID 是含有虛擬私有雲網路的專案 ID。
- VPC_NETWORK 是您的 VPC 網路名稱,例如
網路設定完成。
如要進一步瞭解如何設定網路,請參閱在虛擬私有雲網路與服務供應商網路之間設定私人連線。
建立私人集區
主控台
如要使用 Google Cloud 控制台建立私人集區,請完成下列步驟:
在 Google Cloud 控制台中開啟「Worker Pool」(工作站集區) 頁面:
選取要建立私人集區的專案。
在「Worker pool」(工作站集區) 頁面中,按一下「Create」(建立)。
畫面會顯示「Create private pool」(建立私人集區) 面板。
在「Create private pool」(建立私人集區) 側邊面板中,輸入下列資訊:
輸入私人集區的名稱。
從下拉式選單中選取「區域」。
在「Network」(網路) 下方,輸入下列資訊:
- 專案:輸入專案 ID 或編號。
- 「Network」(網路):輸入虛擬私有雲網路的名稱。
- (選用) 如要採用限制最嚴格的網路設定,請取消勾選「指派外部 IP」方塊。
您現在已建立私人集區。
gcloud
如要使用 gcloud
指令列工具建立私人集區,請在終端機中輸入下列指令:
gcloud builds worker-pools create PRIVATEPOOL_ID \
--project=PRIVATEPOOL_PROJECT_ID \
--region=REGION \
--peered-network=PEERED_NETWORK \
--no-public-egress
其中:
- PRIVATEPOOL_ID 是私有集區的專屬 ID。
- PRIVATEPOOL_PROJECT_ID 是您要建立私人集區的 Google Cloud 專案 ID。
- REGION 是支援的區域之一。
- PEERED_NETWORK 是網路資源網址
--no-public-egress
:如果設定這個旗標,系統會建立沒有外部 IP 位址的私人集區。
您現在已建立私人集區。
如要進一步瞭解如何建立及管理私人集區,請參閱「建立及管理私人集區」。
存取私人網路中的外部資源
根據預設,與 Cloud Build 私有集區相關聯的外部 IP 位址不是靜態,也無法設定。這些 ID 由Google Cloud指派。如要設定私人集區,透過靜態外部 IP 從私人網路存取外部資源,您必須在專案中設定虛擬機器 (VM),做為自我管理的 NAT 閘道,將要求 Proxy 至公開網際網路。接著,您必須設定自訂路徑,將這些要求轉送至 VM,確保路徑會與服務網路專案交換。
本節說明如何設定私人集區,透過靜態外部 IP 存取外部資源,請完成下列步驟:
建立開機指令碼,將 VM 設定為 Proxy 傳送至 VM 的任何流量,並將該流量偽裝成來自其 IP 位址:
#! /bin/bash set -e sysctl -w net.ipv4.ip_forward=1 IFACE=$(ip -brief link | tail -1 | awk {'print $1'}) iptables -t nat -A POSTROUTING -o "$IFACE" -j MASQUERADE
在與私人集區相同的虛擬私有雲中設定虛擬機器,並新增規則,允許透過虛擬私有雲轉送要求:
gcloud compute instances create VM_NAME \ --image-project=ubuntu-os-cloud --image-family=ubuntu-2204-lts \ --network=NETWORK_NAME \ --private-network-ip=INTERNAL_IP --can-ip-forward \ --zone=ZONE \ --subnet=SUBNETWORK \ --tags=NAT_TAG \ --metadata-from-file=startup-script=STARTUP_SCRIPT
其中:
- VM_NAME 是您要為 VM 提供的名稱。
- NETWORK_NAME 是您在前一節建立的網路名稱。
- INTERNAL_IP 是 VM 區域子網路範圍內的任何有效內部 IP 位址。例如:
10.128.0.2
。 - ZONE 是與網路相關聯的區域,例如
us-central1-a
。 - (選用) SUBNETWORK 是子網路的名稱。子網路名稱可在子網路的對等 REST 中找到,格式如下:
projects/project-id/regions/region/subnetworks/subnetwork-name
。如果您在建立虛擬私有雲網路時,於「子網路連線模式」下方選取「自動」,則不需要指定這個欄位。 - NAT_TAG 是 NAT 閘道標記的名稱,可讓您根據要求是否具有來自這個 VM 的標記,有條件地轉送要求。您可以為代碼指定任何名稱。
- STARTUP_SCRIPT 是您在前一個步驟中建立的啟動指令碼名稱。例如:
startup-script-example.sh
。在本範例中,--metadata-from-file
旗標用於將您指定的啟動指令碼內容傳遞至名為startup-script
的鍵。
執行這項指令後,您會看到包含外部 IP 值的輸出內容。請記下外部 IP 值。從私人集區到外部資源的所有流量,都會透過這個位址傳輸。您可以選擇使用這個位址進行進一步設定,例如在外部網路中設定防火牆規則。
設定路徑,將所有前往外部資源的要求導向在上一個步驟中建立的執行個體,以便將要求轉送至私人集區執行個體:
gcloud compute routes create PRIVATE_POOL_ROUTE_NAME \ --destination-range=DESTINATION_RANGE \ --next-hop-address=INTERNAL_IP \ --network=NETWORK_NAME \ --priority=POOL_ROUTE_PRIORITY
其中:
- PRIVATE_POOL_ROUTE_NAME 是您要為路徑指定的名稱。
- DESTINATION_RANGE 是有效的 CIDR 位址範圍,其中包含您要路由傳送的目的地。例如 GitHub Enterprise Edition 執行個體。例如:
8.8.8.0/24
。 - INTERNAL_IP 是從上一個步驟取得的內部 IP 值。例如:
10.128.0.2
。 - NETWORK_NAME 是您在前一節建立的網路名稱。
- POOL_ROUTE_PRIORITY 是您要為路徑指定的優先順序號碼。
這項指令可確保私人集區執行個體中的任何建構作業流量,都會轉送至您建立的 Proxy VM,而非直接轉送至公開網際網路。
設定路徑,將 Proxy 的要求從已加上標記的執行個體轉送至外部目的地 IP 範圍。下列指令會建立路徑,將要求轉送至與私人集區執行個體相關聯的公用網際網路。
gcloud compute routes create NAT_EGRESS_ROUTE_NAME \ --destination-range=DESTINATION_RANGE \ --next-hop-gateway=default-internet-gateway \ --network=NETWORK_NAME \ --priority=NAT_ROUTE_PRIORITY \ --tags=NAT_TAG
其中:
- NAT_EGRESS_ROUTE_NAME 是您要為 NAT 閘道路線指定的名稱。
- DESTINATION_RANGE 是您要前往的目的地地址。例如 GitHub Enterprise Edition 執行個體。例如:
8.8.8.0/24
。 - NETWORK_NAME 是您在前一節建立的網路名稱。
- NAT_TAG 是 NAT 閘道標記的名稱,可讓您根據要求是否具有來自這個 VM 的標記,有條件地轉送要求。您可以為代碼指定任何名稱。
NAT_ROUTE_PRIORITY 是您要為路徑指定的優先順序編號。
這個指令可確保 Proxy VM 的任何流量都能導向公開網際網路。
新增防火牆規則,允許流量從私人集區傳送至 NAT 閘道 VM:
gcloud compute firewall-rules create RULE_NAME \ --direction=INGRESS --priority=FIREWALL_PRIORITY --action=ALLOW --rules=all \ --network=NETWORK_NAME \ --source-ranges=RESERVED_RANGE \ --target-tags=NAT_TAG
其中:
現在,您可以透過虛擬私有雲中自行管理的 NAT 閘道靜態 IP 位址,存取外部資源。
後續步驟
- 進一步瞭解私人集區。
- 瞭解如何設定環境來建立私人集區。
- 瞭解如何透過私人集區存取私人 JFrog Artifactory 中的資源。