创建端口映射服务

本页面介绍服务提供方如何发布使用 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. 点击创建

gcloud

使用 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 的子网

API

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. 点击创建

gcloud

使用 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:第二个网络端点的服务端口

API

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. 点击创建

gcloud

  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 地址范围

API

  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 地址范围

发布端口映射服务

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

后续步骤