本页介绍了如何设置专用池,以便通过静态外部 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 网络页面。
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 是您为其分配的范围的名称 创建 Deployment 清单
- 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 控制台中打开工作器池页面:
选择要在其中创建专用池的项目。
在工作器池页面中,点击创建。
您将看到创建专用池面板。
在创建专用池侧边栏中,输入以下信息:
输入专用池的名称。
从下拉菜单中选择区域。
在 Network 下,输入以下信息:
- 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 地址不是静态地址,也无法进行配置。这些 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 中的资源。