本页介绍了如何设置专用池,以便通过静态外部 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
如需使用 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 的路由应用于运行专用池实例的网络。
现在,您已配置好网络。
gcloud
如需在 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
命令行工具创建专用池,请在终端中输入以下命令:
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 中的资源。