创建端口映射服务

本页面介绍服务提供方如何发布使用 Private Service Connect 端口映射的服务。

借助 Private Service Connect 端口映射,使用方虚拟机 (VM) 实例可以通过单个 Private Service Connect 端点与特定提供方虚拟机上的特定服务端口进行私密通信。

准备工作

所需的角色

如需获得为使用 Private Service Connect 端口映射发布服务做好准备所需的权限,请让管理员为您授予提供方项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

您也可以通过自定义角色或其他预定义角色来获取所需的权限。

创建和发布端口映射服务

端口映射服务具有与内部直通式网络负载均衡器类似的配置,但流量不会进行负载均衡。如需创建和发布端口映射服务,请执行以下操作:

  • 创建端口映射 NEG
  • 将网络端点添加到端口映射 NEG
  • 创建端口映射服务
  • 发布端口映射服务

创建端口映射 NEG

端口映射网络 NEG 是网络端点类型为 GCE_VM_IP_PORTMAP 的区域级 NEG。端口映射 NEG 的类型一经创建便无法更改。

创建端口映射 NEG 时,您需要选择子网。与端口映射 NEG 关联的网络端点必须具有处于此子网中的主要网络接口。

  1. 在 Google Cloud 控制台中,转到网络端点组页面。

    转到“网络端点组”

  2. 点击创建网络端点组

  3. 输入名称

  4. 点击网络端点组类型,然后选择端口映射 NEG(区域级)

  5. 选择区域

  6. 选择网络

  7. 选择子网

  8. 点击创建

使用 network-endpoints-groups create 命令

gcloud beta compute network-endpoint-groups create NEG \
    --region=REGION \
    --network=NETWORK \
    --subnet=SUBNET \
    --network-endpoint-type=GCE_VM_IP_PORTMAP

替换以下内容:

  • NEG:端口映射 NEG 的名称
  • REGION:端口映射 NEG 的区域
  • NETWORK:端口映射 NEG 的 VPC 网络
  • SUBNET:端口映射 NEG 的子网

regionNetworkEndpointGroups.insert 方法发送 POST 请求。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/networkEndpointGroups
{
  "name": "NEG",
  "networkEndpointType": "GCE_VM_IP_PORTMAP",
  "network": "projects/PROJECT_ID/global/networks/NETWORK",
  "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET"
}

替换以下内容:

  • PROJECT_ID:端口映射 NEG 的项目 ID
  • REGION:端口映射 NEG 的区域
  • NEG:端口映射 NEG 的名称
  • NETWORK:端口映射 NEG 的 VPC 网络
  • SUBNET:端口映射 NEG 的子网

将网络端点添加到端口映射 NEG

创建一个或多个具有端口映射的网络端点,并将其连接到端口映射 NEG。

端口映射 NEG 的网络端点是可用区级的,并且必须满足以下要求:

  • 每个网络端点都引用一个 Compute Engine 虚拟机,其主要网络接口与端口映射 NEG 位于同一子网中。
  • 每个网络端点都引用一个唯一的客户端目标端口。
  • 每个网络端点都必须引用服务端口和虚拟机的唯一组合。

  1. 在 Google Cloud 控制台中,转到网络端点组页面。

    转到“网络端点组”

  2. 点击您要更新的端口映射 NEG 的名称。

  3. 点击添加网络端点

  4. 点击虚拟机实例,然后选择虚拟机。

  5. 点击 VM port 1(虚拟机端口 1),然后输入服务端口。

  6. 点击 Client port 1(客户端端口 1),然后输入客户端目标端口。

  7. 对于要添加的每个其他网络端点,请点击添加网络端点,然后输入网络端点详细信息。

  8. 点击创建

使用 network-endpoint-groups update 命令。 为您要连接的每个网络端点添加 --add-endpoint 标志。

gcloud beta compute network-endpoint-groups update NEG \
    --region=REGION \
    --add-endpoint=client-destination-port=CLIENT_DESTINATION_PORT_1,instance=projects/PROJECT_ID/zones/ZONE_1/instances/VM_1_NAME,port=VM_1_PORT \
    --add-endpoint=client-destination-port=CLIENT_DESTINATION_PORT_2,instance=projects/PROJECT_ID/zones/ZONE_2/instances/VM_2_NAME,port=VM_2_PORT

替换以下内容:

  • NEG:端口映射 NEG 的名称
  • REGION:端口映射 NEG 的区域
  • CLIENT_DESTINATION_PORT_1:第一个网络端点的客户端目标端口
  • PROJECT_ID:提供方项目的项目 ID
  • ZONE_1:第一个网络端点的可用区
  • VM_1_NAME:第一个网络端点的目标虚拟机的名称
  • VM_1_PORT:第一个网络端点的服务端口
  • CLIENT_DESTINATION_PORT_2:第二个网络端点的客户端目标端口
  • ZONE_2:第二个网络端点的可用区
  • VM_2_NAME:第二个网络端点的目标虚拟机的名称
  • VM_2_PORT:第二个网络端点的服务端口

regionNetworkEndpointGroups.attachNetworkEndpoints 方法发送 POST 请求。

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG/attachNetworkEndpoints
{
  "networkEndpoints": [
    {
      "clientDestinationPort":CLIENT_DESTINATION_PORT_1,
      "instance": "projects/PROJECT_ID/zones/ZONE_1/instances/VM_1_NAME",
      "port": SERVICE_PORT_1
    },
    {
      "clientDestinationPort": CLIENT_DESTINATION_PORT_2,
      "instance": "projects/PROJECT_ID/zones/ZONE_2/instances/VM_2_NAME",
      "port": SERVICE_PORT_2
    }
  ]
}

替换以下内容:

  • PROJECT_ID:提供方项目的项目 ID
  • REGION:端口映射 NEG 的区域
  • NEG:端口映射 NEG 的名称
  • CLIENT_DESTINATION_PORT_1:第一个网络端点的客户端目标端口
  • ZONE_1:第一个网络端点的可用区
  • VM_1_NAME:第一个网络端点的目标虚拟机的名称
  • SERVICE_PORT_1:第一个网络端点的服务端口
  • CLIENT_DESTINATION_PORT_2:第二个网络端点的客户端目标端口
  • ZONE_2:第二个网络端点的可用区
  • VM_2_NAME:第二个网络端点的目标虚拟机的名称
  • SERVICE_PORT_2:第二个网络端点的服务端口

创建端口映射服务

如需创建端口映射服务,请完成以下步骤。

添加与后端服务关联的端口映射 NEG 后,您便无法更改该 NEG。但是,您可以更新端口映射 NEG 的网络端点

转发规则一经创建便无法更新其连接。如果您需要连接到其他后端服务,请删除转发规则,然后创建新转发规则。

开始配置

  1. 在 Google Cloud 控制台中,转到负载均衡页面。

    转到“负载均衡”

  2. 点击创建负载均衡器
  3. 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步
  4. 对于代理或直通,选择直通式负载均衡器,然后点击下一步
  5. 公共或内部字段中,选择内部,然后点击下一步
  6. 点击配置

基本配置

  1. 输入负载均衡器名称
  2. 选择区域
  3. 选择网络

后端配置

  1. 对于后端类型,请选择端口映射网络端点组
  2. 选择一个端口映射网络端点组

前端配置

  1. 点击前端配置
  2. 可选:输入名称
  3. (可选)输入说明
  4. 选择一个协议
  5. 选择子网
  6. 点击完成
  7. 点击创建
  1. 如需创建后端服务,请使用 backend-services create 命令

    gcloud beta compute backend-services create SERVICE \
        --load-balancing-scheme=internal \
        --region=REGION \
        --network=NETWORK
    

    替换以下内容:

    • SERVICE:后端服务的名称
    • REGION:后端服务的区域
    • NETWORK:后端服务的提供方 VPC 网络
  2. 如需将端口映射 NEG 添加到后端服务,请使用 backend-services add-backend 命令

    您无法将多个端口映射 NEG 添加到单个后端服务。

    gcloud beta compute backend-services add-backend SERVICE \
        --network-endpoint-group=NEG \
        --network-endpoint-group-region=REGION
    

    NEG 替换为端口映射 NEG 的名称。

  3. 如需为端口映射服务创建转发规则,请使用 forwarding-rules create 命令

    转发规则必须配置为转发所有客户端目标端口的流量。

    gcloud beta compute forwarding-rules create RULE \
        --load-balancing-scheme=INTERNAL \
        --ip-protocol=PROTOCOL \
        --network=NETWORK \
        --subnet=SUBNET \
        --address=IP_ADDRESS \
        --ports=ALL \
        --region=REGION \
        --backend-service=SERVICE
    

    替换以下内容:

    • RULE:转发规则的名称
    • PROTOCOL:转发规则的协议,可以是 TCPUDP
    • SUBNET:提供方子网,必须是与端口映射 NEG 关联的相同子网
    • IP_ADDRESS:转发规则的 IP 地址,必须来自提供方子网的 IP 地址范围
  1. 如需创建后端服务,请向 regionBackendServices.insert 方法发送 POST 请求。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/backendServices
    {
      "name": "SERVICE",
      "loadBalancingScheme": "INTERNAL",
      "network": "projects/PROJECT_ID/global/networks/NETWORK"
    }
    

    替换以下内容:

    • PROJECT_ID:后端服务项目的 ID
    • REGION:后端服务的区域
    • SERVICE:后端服务的名称
    • NETWORK:提供方 VPC 网络
  2. 如需将端口映射 NEG 添加到后端服务,请向 regionBackendServices.patch 方法发送 PATCH 请求。

    您无法将多个端口映射 NEG 添加到单个后端服务。

    PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/backendServices/SERVICE
    {
      "backends": [
        {
          "group": "https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/networkEndpointGroups/NEG"
        }
      ]
    }
    

    NEG 替换为端口映射 NEG 的名称。

  3. 如需为端口映射服务创建转发规则,请向 forwardingRules.insert 方法发送 POST 请求。

    转发规则必须配置为转发所有客户端目标端口的流量。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID>/regions/REGION/forwardingRules
    {
      "name": "RULE",
      "loadBalancingScheme": "INTERNAL",
      "IPProtocol": "PROTOCOL",
      "network": "projects/PROJECT_ID/global/networks/NETWORK",
      "subnetwork": "projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET",
      "IPAddress": "IP_ADDRESS",
      "allPorts": true,
      "backendService": "projects/PROJECT_ID/regions/REGION/backendServices/SERVICE"
    }
    

    替换以下内容:

    • RULE:转发规则的名称
    • PROTOCOL:转发规则的协议,可以是 TCPUDP
    • SUBNET:提供方子网,必须是与端口映射 NEG 关联的相同子网
    • IP_ADDRESS:转发规则的 IP 地址,必须来自提供方子网的 IP 地址范围

发布端口映射服务

如需将端口映射服务提供给使用方,请通过创建服务连接来发布服务。创建服务连接时,请指定与您的端口映射服务关联的转发规则。

后续步骤