本页介绍了如何设置专用池以通过静态外部 IP 访问外部资源。
如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示:
准备工作
-
Enable the Cloud Build, Compute Engine, and Service Networking APIs.
如需获得设置专用连接所需的权限,请让您的管理员为您授予 VPC 网络所在的 Cloud 项目的 Compute Engine Network Admin (
roles/compute.networkAdmin
) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限。如需使用此页面上的
gcloud
命令,请安装 Google Cloud CLI。
创建 VPC 网络
如需使用 Google Cloud 控制台创建 VPC 网络,请完成以下步骤:
打开 Google Cloud 控制台中的 VPC 网络页面。
点击创建 VPC 网络以创建新的网络。
您会看到创建 VPC 网络页面。
为您的网络输入名称。
在子网创建模式下,选择自动。
如果您想进一步自定义其他字段,请参阅创建和管理 VPC 网络。否则,请将所有字段保持不变。
点击创建以创建 VPC 网络。
点击创建后,您会在 VPC 网络页面上看到新的 VPC 网络。
如需使用 gcloud
命令行工具创建 VPC 网络,请在终端中输入以下命令,其中 NETWORK_NAME 是 VPC 网络的名称:
gcloud compute networks create NETWORK_NAME \
--subnet-mode=auto
点击创建后,您会在 VPC 网络页面上看到新的 VPC 网络。
如需详细了解如何创建和管理 VPC 网络,请参阅创建和管理 VPC 网络。
创建专用连接
如需在 VPC 网络与服务提供方网络之间创建专用连接,请完成以下步骤:
打开 Google Cloud 控制台中的 VPC 网络页面。
点击您的影音平台名称。
您将看到 VPC 网络详情页面。
点击专用服务连接标签页。
选择为服务分配的 IP 范围标签页。
点击分配 IP 范围。
您将看到分配内部 IP 范围弹出框。
为 IP 范围输入名称。
在 IP 范围下,选择自动。
在前缀长度字段中,输入网络的前缀长度。
点击分配以分配 IP 范围。
选择连到服务的专用连接标签页。
点击 Create Connection。
您会看到创建专用连接弹出式窗口。
在指定的分配范围下,选择您的 IP 范围。
点击连接。
现在,您会在连到服务的专用连接标签页下的表格中看到您的连接。
点击启用(导出自定义路由),确保将 VPC 的路由应用于运行专用池实例的网络。
现在,您已配置好网络。
如需在 VPC 网络与服务提供方网络之间创建专用连接,请完成以下步骤:
在终端中输入以下命令,为您的服务分配 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 是包含您的 VPC 网络的项目的 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 是包含您的 VPC 网络的项目的 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 是包含您的 VPC 网络的项目的 ID。
- VPC_NETWORK 是您的 VPC 网络的名称,例如
现在,您已配置好网络。
如需详细了解如何配置网络,请参阅在 VPC 网络与服务提供方网络之间建立专用连接。
创建专用池
如需使用 Google Cloud 控制台创建私有池,请完成以下步骤:
在 Google Cloud 控制台中,打开工作器池页面:
选择要在其中创建专用池的项目。
在工作器池页面中,点击创建。
您会看到创建专用池面板。
在创建专用池侧边栏中,输入以下信息:
为您的专用池输入名称。
从下拉菜单中选择区域。
在网络下,输入以下信息:
- Project:输入您的项目 ID 或编号。
- 网络:输入您的 VPC 网络的名称。
- (可选)取消选中分配外部 IP复选框,以实现最严格的网络配置。
您现在已创建一个专用池。
如需使用 gcloud
命令行工具创建专用池,请在终端中输入以下命令:
gcloud builds worker-pools create PRIVATEPOOL_ID \
--project=PRIVATEPOOL_PROJECT_ID \
--region=REGION \
--peered-network=PEERED_NETWORK \
--no-public-egress
其中:
- PRIVATEPOOL_ID 是您的私有池的唯一标识符。
- PRIVATEPOOL_PROJECT_ID 是您要在其中创建专用池的 Google Cloud 项目的 ID。
- REGION 是某个受支持的地区。
- PEERED_NETWORK 是网络资源网址
--no-public-egress
:如果设置此标志,则创建没有外部 IP 地址的专用池。
您现在已创建一个专用池。
如需详细了解如何创建和管理专用池,请参阅创建和管理专用池。
访问专用网络中的外部资源
默认情况下,与 Cloud Build 私有池关联的外部 IP 地址不是静态的,也无法配置。它们由Google Cloud分配。如果您希望将专用池设置为使用静态外部 IP 从专用网络访问外部资源,则必须在项目中设置一个虚拟机 (VM) 来充当自管理 NAT 网关,以将请求代理到公共互联网。然后,您必须设置自定义路由,以将这些请求转发到您的虚拟机,以确保与服务网络项目交换路由。
本部分概述了如何通过完成以下步骤设置专用池,以便通过静态外部 IP 访问外部资源:
创建一个启动脚本,将虚拟机配置为代理路由到虚拟机的所有流量,并将该流量伪装成来自其 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
在与您的专用池相同的 VPC 中设置虚拟机,并设置规则以允许通过 VPC 代理请求:
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 是您要为虚拟机提供的名称。
- NETWORK_NAME 是您在上一部分中创建的网络的名称。
- INTERNAL_IP 是虚拟机所在区域的子网范围内的任何有效内部 IP 地址。例如
10.128.0.2
。 - ZONE 是与您的网络关联的区域,例如
us-central1-a
。 - (可选)SUBNETWORK 是您的子网的名称。您可以在子网的等效 REST 中找到子网的名称,格式如下:
projects/project-id/regions/region/subnetworks/subnetwork-name
。如果您在创建 VPC 网络时在子网连接模式下选择了自动,则无需指定此字段。 - NAT_TAG 是 NAT 网关标记的名称,可让您根据请求是否具有此虚拟机的标记,有条件地路由请求。您可以为代码指定任何名称。
- 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 是您要为路由指定的优先级编号。
此命令可确保来自专用池实例中的 build 的所有流量都路由到您创建的代理虚拟机,而不是直接路由到公共互联网。
设置路由,将代理从标记的实例收到的请求转发到外部目标 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 网关标记的名称,可让您根据请求是否具有此虚拟机的标记,有条件地路由请求。您可以为代码指定任何名称。
NAT_ROUTE_PRIORITY 是您要为路线指定的优先级编号。
此命令可确保来自代理虚拟机的所有流量都可以转发到公共互联网。
添加防火墙规则,允许来自专用池的流量进入 NAT 网关虚拟机:
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 其中:
现在,您可以通过 VPC 中自管理 NAT 网关的静态 IP 地址访问外部资源。
后续步骤
- 详细了解专用池。
- 了解如何设置环境以创建专用池。
- 了解如何使用专用池访问私有 JFrog Artifactory 中的资源。