创建端口映射服务
本页面介绍服务提供方如何发布使用 Private Service Connect 端口映射的服务。
借助 Private Service Connect 端口映射,使用方虚拟机 (VM) 实例可以通过单个 Private Service Connect 端点与特定提供方虚拟机上的特定服务端口进行私密通信。
准备工作
- 您必须在项目中启用 Compute Engine API。
- 您必须为要连接到端口映射 NEG 的每个网络端点创建虚拟机。所有虚拟机都必须位于同一区域。
- 请参阅已发布服务简介。
- 请参阅 Private Service Connect 端口映射简介。
所需的角色
如需获得为使用 Private Service Connect 端口映射发布服务做好准备所需的权限,请让管理员为您授予提供方项目的以下 IAM 角色:
-
Compute Load Balancer Admin (
roles/compute.loadBalancerAdmin
) -
Compute Network Admin (
roles/compute.networkAdmin
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
创建和发布端口映射服务
端口映射服务具有与内部直通式网络负载均衡器类似的配置,但流量不会进行负载均衡。如需创建和发布端口映射服务,请执行以下操作:
- 创建端口映射 NEG
- 将网络端点添加到端口映射 NEG
- 创建端口映射服务
- 发布端口映射服务
创建端口映射 NEG
端口映射网络 NEG 是网络端点类型为 GCE_VM_IP_PORTMAP
的区域级 NEG。端口映射 NEG 的类型一经创建便无法更改。
创建端口映射 NEG 时,您需要选择子网。与端口映射 NEG 关联的网络端点必须具有处于此子网中的主要网络接口。
控制台
在 Google Cloud 控制台中,转到网络端点组页面。
点击创建网络端点组。
输入名称。
点击网络端点组类型,然后选择端口映射 NEG(区域级)。
选择区域。
选择网络。
选择子网。
点击创建。
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 的项目 IDREGION
:端口映射 NEG 的区域NEG
:端口映射 NEG 的名称NETWORK
:端口映射 NEG 的 VPC 网络SUBNET
:端口映射 NEG 的子网
将网络端点添加到端口映射 NEG
创建一个或多个具有端口映射的网络端点,并将其连接到端口映射 NEG。
端口映射 NEG 的网络端点是可用区级的,并且必须满足以下要求:
- 每个网络端点都引用一个 Compute Engine 虚拟机,其主要网络接口与端口映射 NEG 位于同一子网中。
- 每个网络端点都引用一个唯一的客户端目标端口。
每个网络端点都必须引用服务端口和虚拟机的唯一组合。
控制台
在 Google Cloud 控制台中,转到网络端点组页面。
点击您要更新的端口映射 NEG 的名称。
点击添加网络端点。
点击虚拟机实例,然后选择虚拟机。
点击 VM port 1(虚拟机端口 1),然后输入服务端口。
点击 Client port 1(客户端端口 1),然后输入客户端目标端口。
对于要添加的每个其他网络端点,请点击添加网络端点,然后输入网络端点详细信息。
点击创建。
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
:提供方项目的项目 IDZONE_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
:提供方项目的项目 IDREGION
:端口映射 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 的网络端点。
转发规则一经创建便无法更新其连接。如果您需要连接到其他后端服务,请删除转发规则,然后创建新转发规则。
控制台
开始配置
在 Google Cloud 控制台中,转到负载均衡页面。
- 点击创建负载均衡器。
- 对于负载均衡器的类型,选择网络负载均衡器 (TCP/UDP/SSL),然后点击下一步。
- 对于代理或直通,选择直通式负载均衡器,然后点击下一步。
- 在公共或内部字段中,选择内部,然后点击下一步。
- 点击配置。
基本配置
- 输入负载均衡器名称。
- 选择区域。
- 选择网络。
后端配置
- 对于后端类型,请选择端口映射网络端点组。
- 选择一个端口映射网络端点组。
前端配置
- 点击前端配置。
- 可选:输入名称。
- (可选)输入说明。
- 选择一个协议。
- 选择子网。
- 点击完成。
- 点击创建。
gcloud
如需创建后端服务,请使用
backend-services create
命令。gcloud beta compute backend-services create SERVICE \ --load-balancing-scheme=internal \ --region=REGION \ --network=NETWORK
替换以下内容:
SERVICE
:后端服务的名称REGION
:后端服务的区域NETWORK
:后端服务的提供方 VPC 网络
如需将端口映射 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 的名称。如需为端口映射服务创建转发规则,请使用
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
:转发规则的协议,可以是TCP
或UDP
SUBNET
:提供方子网,必须是与端口映射 NEG 关联的相同子网IP_ADDRESS
:转发规则的 IP 地址,必须来自提供方子网的 IP 地址范围
API
如需创建后端服务,请向
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
:后端服务项目的 IDREGION
:后端服务的区域SERVICE
:后端服务的名称NETWORK
:提供方 VPC 网络
如需将端口映射 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 的名称。如需为端口映射服务创建转发规则,请向
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
:转发规则的协议,可以是TCP
或UDP
SUBNET
:提供方子网,必须是与端口映射 NEG 关联的相同子网IP_ADDRESS
:转发规则的 IP 地址,必须来自提供方子网的 IP 地址范围
发布端口映射服务
如需将端口映射服务提供给使用方,请通过创建服务连接来发布服务。创建服务连接时,请指定与您的端口映射服务关联的转发规则。