VPC NAT网关联动私网连接(PrivateLink)可以实现云服务的反向访问。本文为您介绍同账号的云服务反向访问及其实现方式。
背景信息
随着业务的发展,越来越多的云服务,例如数据传输服务DTS(Data Transmission Service)或函数计算,需要从云服务所在专有网络VPC(Virtual
Private Cloud)访问用户VPC中的资源,这种访问方式称为云服务的反向访问。为了满足云服务反向访问的需求,VPC NAT网关推出了FULLNAT规则,您可以联动PrivateLink功能共同实现云服务的反向访问。
云服务反向访问有两种常见的使用场景。
说明 PrivateLink支持同账号和跨账号之间的私网访问服务,本文为您介绍同账号云服务的反向访问。如果需要实现跨账号云服务反向访问,您需要在创建终端节点服务后,将需要作为反向终端节点的其他阿里云账号ID添加到终端节点服务白名单中,具体操作,请参见
添加和管理服务白名单。
场景示例
本文以场景一以及实现方式为例进行介绍。
某公司在德国(法兰克福)地域创建了生产VPC_1,并在VPC_1中创建了一台交换机VSW1及其下的ECS1实例。在德国(法兰克福)地域创建了用户VPC_2,并在VPC_2中创建了一台交换机VSW2及其下的ECS2实例。
由于业务发展,现在生产VPC_1中的ECS1实例需要访问用户VPC_2中的特定资源ECS2实例。
PrivateLink支持VPC NAT网关作为终端节点服务的服务资源,将终端节点服务和反向终端节点连接。结合VPC NAT网关的FULLNAT规则普通模式将VPC_1中ECS1实例的源IP地址转换为反向终端节点的接口IP地址,将VPC_2中ECS2实例的IP地址和端口映射为VPC
NAT网关的NAT IP和端口,从而实现VPC_1访问VPC_2中的特定资源。
前提条件
- 您已经在德国(法兰克福)地域创建了两个VPC,名称分别为VPC_1和VPC_2。
- 您已经在VPC_1和VPC_2中分别创建了一台交换机,对应的名称为VSW1和VSW2。请确保VSW1和VSW2在同一个可用区。
- 您已经在VPC_1中创建了一台用于创建VPC NAT网关的交换机,名称为VSW3。
- 您已经在VSW1和VSW2中分别创建了一台ECS实例,对应的名称为ECS1和ECS2,均安装CentOS 8.3 64位系统。
配置流程
步骤一:创建VPC NAT网关并开启Privatelink能力
VPC NAT网关开启了Privatelink能力之后,才可以作为终端节点服务的服务资源与反向终端节点连通,并配置FULLNAT规则实现反向访问VPC中的资源。
本文以使用Python SDK创建VPC NAT网关为例进行介绍。在创建VPC NAT网关前,请确保满足以下条件。
- 您需要获取当前账号的AccessKey ID和AccessKey Secret。 请在阿里云控制台中的AccessKey管理页面查看您的AccessKey。
- 您已经安装了Python环境,阿里云Python SDK支持 Python 2.6.x, 2.7.x 和 3.x及以上环境。
- 安装阿里云Python SDK。更多信息,请参见开始使用原版Python SDK。
支持pip和GitHub两种安装方式。
- 使用pip安装(推荐方式)
执行以下命令,安装Python SDK。
pip install aliyun-python-sdk-core # 安装阿里云SDK核心库
- 下载GitHub源码
执行以下命令,通过GitHub安装Python SDK。
git clone https://github.com/aliyun/aliyun-openapi-python-sdk.git
# 安装阿里云 SDK 核心库
cd aliyun-python-sdk-core
python setup.py install
- 执行以下SDK,创建VPC NAT网关并开启Privatelink能力。
import json
import time
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
region_id = '<region_id>' #请替换为需要创建VPC NAT网关的地域ID,本文为eu-central-1。
ak = '<ak>' #请替换为您的AccessKey ID。
secret = '<sk>' #请替换为您的AccessKey Secret。
vpc_id = "<vpc_id>" #请替换为需要创建VPC NAT网关的VPC ID,本文为VPC_1的ID。
vswitch_id = "<vswitch_id>" #请替换为VPC下的交换机ID,本文为VSW3的ID。
sdkClient = AcsClient(ak, secret, region_id)
params = {'RegionId': region_id, 'VpcId': vpc_id, 'VSwitchId': vswitch_id, 'NatType': "Enhanced", 'NetworkType':
"intranet", 'PrivateLinkEnabled': "true", 'PrivateLinkMode': "Fullnat"}
request = CommonRequest(domain='vpc.aliyuncs.com', version='2016-04-28',
action_name="CreateNatGateway", product="Vpc")
for tmpPKey in params.keys():
request.add_query_param(tmpPKey, params[tmpPKey])
data = sdkClient.do_action_with_exception(acs_request=request)
print(json.loads(data))
natgw_id = json.loads(data)['NatGatewayId']
while(True):
check = CommonRequest(domain='vpc.aliyuncs.com', version='2016-04-28',
action_name="DescribeNatGateways", product="Vpc")
check.add_query_param('NatGatewayId', natgw_id)
rsp = sdkClient.do_action_with_exception(check)
nat = json.loads(rsp)['NatGateways']['NatGateway'][0]
if nat['NatGatewayId'] != natgw_id:
print('expect %s, found %s' % (natgw_id, nat['NatGatewayId']))
exit(1)
if nat['Status'] != 'Available':
print("natgw %s status:%s......" % (natgw_id, nat['Status']))
time.sleep(5)
else:
print("natgw %s status:%s!" % (natgw_id, nat['Status']))
break
系统回显结果如下,表明VPC NAT网关已经创建成功且已开启Privatelink能力。
{'RequestId': '07E40395-F64A-3021-ACCE-96EE2DFA4168',
'SnatTableIds': {
'SnatTableId': [
'stb-gw8fp6omuclw****'
]
},
'ForwardTableIds': {
'ForwardTableId': [
'ftb-gw83v983b5a9jdpyp****'
]
},
'FullNatTableIds': {
'FullNatTableId': [
'fulltb-gw8b8xhwqyp26pm0k****'
]
},
'NatGatewayId': 'ngw-gw8tcfj68ts04qpi9****'}
natgw ngw-gw8tcfj68ts04qpi9**** status:Creating......
natgw ngw-gw8tcfj68ts04qpi9**** status:Creating......
natgw ngw-gw8tcfj68ts04qpi9**** status:Creating......
natgw ngw-gw8tcfj68ts04qpi9**** status:Creating......
natgw ngw-gw8tcfj68ts04qpi9**** status:Available!
- 登录NAT网关管理控制台。
- 在左侧导航栏,选择。
- 在VPC NAT网关页面,查看已经创建的VPC NAT网关。
步骤二:创建终端节点服务
创建VPC NAT网关作为服务资源的终端节点服务。
- 登录终端节点服务控制台。
- 在顶部菜单栏处,选择需要创建终端节点服务的地域。
本文选择德国(法兰克福)地域。
- 在终端节点服务页面,单击创建终端节点服务。
- 在创建终端节点服务页面,根据以下信息配置终端节点服务,然后单击确定创建。
配置 |
说明 |
服务资源类型 |
选择终端节点服务的资源类型,支持负载均衡CLB和VPC NAT网关作为终端节点服务。
本文选择VPC NAT网关。
|
选择服务资源 |
选择要承载流量的可用区,然后选择与终端节点服务关联的VPC NAT网关实例。
本文选择法兰克福 可用区A,然后选择已经创建的VPC NAT网关。
|
自动接受终端节点连接 |
选择是否自动接受终端节点的连接请求:
- 是:终端节点服务将自动接受终端节点的连接请求,通过终端节点能够访问服务。
- 否:终端节点服务连接将处于已断开状态,可以手动发起连接请求。
- 如果接受该终端节点对应的终端节点服务连接,通过终端节点将能够访问服务。
- 如果拒绝该终端节点对应的终端节点服务连接,通过终端节点无法访问服务。
|
描述 |
输入终端节点服务的描述信息。
描述长度为2~256个字符,开头不能为http:// 和https:// 。
|
- 返回终端节点服务页面,查看已创建的终端节点服务。
步骤三:创建反向终端节点
在用户VPC_2中创建反向终端节点。
- 登录终端节点控制台。
- 在顶部菜单栏处,选择需要创建反向终端节点的地域。
本文选择德国(法兰克福)地域。
- 在终端节点页面,单击反向终端节点页签。
- 在反向终端节点页签,单击创建终端节点,根据以下信息配置终端节点,然后单击确定创建。
配置 |
说明 |
节点名称 |
输入反向终端节点的名称。
名称长度在2~128个字符之间,以英文字母或中文开头,可包含数字、短划线(-)和下划线(_)。
|
终端节点服务 |
您可以通过以下两种方式设置终端节点服务:
- 单击通过服务名称添加,然后输入终端节点服务的名称。
- 单击选择可用服务,然后选择目标终端节点服务ID。
说明 一个反向终端节点仅支持关联一个终端节点服务。
|
专有网络 |
选择需要创建反向终端节点的VPC。本文选择已经创建的VPC_2。 |
安全组 |
选择要与反向终端节点网卡关联的安全组,安全组可以管控VPC到反向终端节点网卡的数据通信。 |
可用区与交换机 |
选择终端节点服务节点对应的可用区,然后选择该可用区内的交换机,系统会自动在该交换机下创建一个终端节点网卡。
本文选择法兰克福 可用区A,然后选择已经创建的VSW2。
|
描述 |
输入反向终端节点的描述信息。
描述长度为2~256个字符,开头不能为http:// 和https:// 。
|
- 返回终端节点页面,单击反向终端节点页签,查看已创建的反向终端节点。
- 单击反向终端节点的ID,在详情页面的可用区与网卡页签,在弹性网卡列查看反向终端节点网卡的ID并记录该ID。
步骤四:建立反向终端节点与终端节点服务的连接
创建反向终端节点时,每个反向终端节点关联一个终端节点服务。终端节点服务接受了反向终端节点的连接请求后,反向终端节点才能与终端节点服务建立连接。
- 登录终端节点服务控制台。
- 在顶部菜单栏处,选择终端节点服务的地域。
本文选择德国(法兰克福)地域。
- 在终端节点服务页面,找到步骤二创建的终端节点服务,然后单击终端节点服务的ID。
- 在终端节点服务详情页面,单击终端节点连接页签。
- 在终端节点列表中找到步骤三创建的反向终端节点,然后在操作列单击允许。
- 在弹出的对话框,单击确定。
终端节点的状态由
已断开转变为
已连接,表示反向终端节点与终端节点服务已成功建立连接。
步骤五:配置FULLNAT规则
为VPC NAT网关配置普通模式FULLNAT条目。
- 登录NAT网关管理控制台。
- 在左侧导航栏,选择。
- 在顶部菜单栏处,选择VPC NAT网关的地域。
本文选择德国(法兰克福)地域。
- 在VPC NAT网关页面,找到步骤一创建的VPC NAT网关,然后单击VPC NAT网关ID。
- 在基本信息页签私网连接服务区域,然后在私网连接服务转化模式右侧单击编辑。
- 在私网连接服务转化模式对话框,选择普通模式。
- 单击FULLNAT规则管理页签,然后单击创建FULLNAT条目。
- 在创建FULLNAT条目页面,根据以下信息配置FULLNAT条目,然后单击确定创建。
配置 |
说明 |
选择NAT IP地址 |
选择提供FULLNAT地址转换功能的NAT IP地址。
本文选择默认NAT IP地址。
|
转换后目的IP地址 |
输入需要通过FULLNAT地址转换的后端IP地址。本文输入ECS2实例的IP地址。 |
端口设置 |
配置FULLNAT端口映射的参数信息。
- 前端端口:输入需要通过FULLNAT端口映射的前端端口。本文输入80。
- 后端端口:输入需要通过FULLNAT端口映射的后端端口。本文输入80。
- 协议类型:转发端口的协议类型,支持TCP和UDP两种类型。本文选择TCP。
|
弹性网卡 |
选择反向终端节点网卡。本文选择查看并记录终端节点网卡时记录的弹性网卡。
|
条目名称 |
设置FULLNAT条目的名称。
名称长度在2~128个字符之间,以英文字母或中文开头,可包含数字、短划线(-)和下划线(_)。
|
- 在FULLNAT规则管理页签,查看创建的FULLNAT条目。
步骤六:测试验证
本文以安装CentOS 8.3 64位系统的ECS实例为例进行介绍。
- 登录VSW2下的ECS2实例。具体操作,请参见ECS连接方式概述。
- 执行以下命令安装Apache服务。
- 执行以下命令启动Apache服务。
- 登录VSW1下的ECS1实例。
- 执行以下命令,查看ECS1实例是否能够访问ECS2例的Apache服务。
curl <http://NAT IP地址:前端端口>
本文执行
curl http://192.168.3.17:80
。
经测试,ECS1实例可以访问ECS2实例的Apache服务,即生产VPC_1的ECS1实例反向访问用户VPC_2的ECS2实例成功。