本页面介绍了如何设置专用池,以便通过静态外部 IP 地址访问外部资源。
如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示:
准备工作
- 
  
  
    
      Enable the Cloud Build, Compute Engine, and Service Networking APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 如需获得设置专用连接所需的权限,请让您的管理员为您授予 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 控制台中,打开工作器池页面: 
- 选择要在其中创建专用池的项目。 
- 在工作器池页面中,点击创建。 - 您将看到创建专用池面板。 
- 在创建专用池侧边栏中,输入以下信息: - 输入专用池的名称。 
- 从下拉菜单中选择区域。 
- 在网络下方,输入以下信息: 
 - 项目:输入您的项目 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 中的资源。