创建包含VPC私网反向访问功能的全托管服务,可以实现服务商与用户VPC私网的反向连接,通过服务实例创建的ECS资源反向访问用户侧的资源信息。本文介绍如何创建包含VPC私网反向访问功能的全托管服务并访问用户VPC内的资源。
功能介绍
VPC反向访问指服务商到用户的VPC私网连接,即服务商预先创建FULLNAT类型的VPC NAT网关并创建终端节点服务,当用户通过服务商创建的全托管服务创建服务实例后,通过终端节点服务与用户的VPC建立连接,并实现反向访问用户自己VPC下的资源。

准备工作
服务商在创建包含VPC私网反向访问功能的全托管服务前,需要提前创建VPC实例、vSwitch、安全组、FULLNAT类型的VPC NAT网关和VPC NAT类型的终端节点服务,并模拟用户在自己的VPC下准备两个ECS实例。
步骤一:创建全托管服务
完成准备工作后,创建全托管服务。
- 登录计算巢控制台。
- 在左侧导航栏中,选择创建新服务。 ,然后单击
- 在创建新服务界面,完成如下配置。
- 部署应用、权限设置和OAuth认证配置区域保存默认配置。
- 在虚拟互联网配置区域,配置虚拟互联相关参数。
- 单击保存服务。
步骤二:创建服务实例
以用户视角创建服务实例,配置反向访问参数。
- 在已创建服务的服务详情页面,单击用户部署链接后的链接,进入创建服务实例页面。
- 在创建服务实例页面,填写服务实例所需参数。
- 选择我已阅读并同意《计算巢服务协议》。
- 单击创建。
步骤三:验证反向访问网络的连通性
服务实例创建成功后,您可以验证反向访问网络的连通性进行验证。
模板示例
重要 在编写模板时,模板中的
AccessDomain
、AccessIp
和AccessPort
分别对应服务商请求用户服务使用的域名、用户侧的服务内网IP和用户的侧服务端口,其中AccessDomain
非必填,AccessIp
和AccessPort
为必填参数,且参数名称必须为AccessDomain
、AccessIp
和AccessPort
,否则服务将不能识别配置。
ROSTemplateFormatVersion: '2015-09-01'
Description:
en: the best practice of reverse VPC connection
zh-cn: VPC私网访问最佳实践
Parameters:
VpcReverseParameters:
Type: Json
AssociationProperty: List[Parameters]
Default: []
AssociationPropertyMetadata:
Parameters:
AccessDomain:
Type: String
Label:
zh-cn: 用户服务域名
AccessIp:
Type: String
Label:
zh-cn: 用户服务IP
AccessPort:
Type: String
Label:
zh-cn: 用户服务端口
ZoneId:
Type: String
AssociationPropertyMetadata:
ComputeNestNetworkConfigZone: true
Description:
en: Availability zone ID,<br><b>note: <font color='blue'>Before selecting, please confirm that the Availability Zone supports the specification of creating ECS resources</font></b>
zh-cn: 可用区ID
Label:
en: VSwitch Available Zone
zh-cn: 可用区
DataDiskCategory:
Type: String
AllowedValues:
- cloud_efficiency
- cloud_ssd
- cloud_essd
Default: cloud_efficiency
Label:
en: Disk Type
zh-cn: 数据盘类型
DataDiskSize:
Type: Number
Label:
en: Data Disk Space
zh-cn: 数据盘空间
MinValue: 20
MaxValue: 500
Default: 40
VpcId:
AssociationProperty: ALIYUN::ECS::VPC::VPCId
Type: String
Label:
en: VPC ID
zh-cn: 专有网络VPC实例ID
SecurityGroupId:
AssociationPropertyMetadata:
VpcId: VpcId
Default: sg-2zeip0loevltubwfzrtm
Label:
zh-cn: 安全组ID
en: Security Group ID
AssociationProperty: ALIYUN::ECS::SecurityGroup::SecurityGroupId
Type: String
VSwitchId:
AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
AssociationPropertyMetadata:
VpcId: ${VpcId}
ZoneId: ${ZoneId}
Type: String
Label:
en: VSwitch ID
zh-cn: 交换机实例ID
EcsInstanceType:
Type: String
Label:
en: Instance Type
zh-cn: 实例类型
AssociationProperty: ALIYUN::ECS::Instance::InstanceType
FullNatTableId:
Type: String
AssociationProperty: ALIYUN::VPC::NatGateway::ForwardTableId
NatGatewayId:
Type: String
AssociationProperty: ALIYUN::VPC::NatGateway::NatGatewayId
NatIpCidr:
Type: String
Metadata:
ALIYUN::ROS::Interface:
ParameterGroups:
- Parameters:
- ZoneId
- InstanceType
- DataDiskCategory
- DataDiskSize
- VpcId
- SecurityGroupId
- VSwitchId
Label:
default:
en: instance
zh-cn: 实例规格
- Parameters:
- VpcReverseParameters
Label:
default:
en: Vpc Reverse Connection
zh-cn: 反向访问参数
Mappings: {}
Conditions: {}
Outputs:
NatIp:
Value:
Fn::GetAtt:
- VPCNatIp
- NatIp
Resources:
WaitConditionHandle:
Type: ALIYUN::ROS::WaitConditionHandle
WaitCondition:
Type: ALIYUN::ROS::WaitCondition
Properties:
Count: 1
Handle:
Ref: WaitConditionHandle
Timeout: 1800
EcsInstanceGroup:
Type: ALIYUN::ECS::InstanceGroup
DependsOn:
- VPCNatIp
Properties:
IoOptimized: optimized
ZoneId:
Ref: ZoneId
DiskMappings:
- Category:
Ref: DataDiskCategory
Device: /dev/xvdb
Size:
Ref: DataDiskSize
SystemDiskSize: 40
UserData:
Fn::Sub:
- |
#!/bin/sh
Hosts="${AccessDomains}"
PrivateIps="${NatIp}"
Hosts=(`echo $Hosts | sed 's/\[//g' | sed 's/\]//g' | sed 's/,//g'`)
PrivateIps=(`echo $PrivateIps | sed 's/\[//g' | sed 's/\]//g' | sed 's/,//g'`)
arraylength=${!#Hosts[@]}
for (( i=0; i<$arraylength; i++ ));
do
echo ${!PrivateIps[$i]} ${!Hosts[$i]} >> /etc/hosts
done
${CurlCli} -d "{\"Data\" : \"SUCCESS\", \"Status\" : \"SUCCESS\"}"
- CurlCli:
Fn::GetAtt:
- WaitConditionHandle
- CurlCli
NatIp:
Fn::GetAtt:
- VPCNatIp
- NatIp
AccessDomains:
Fn::SelectMapList:
- AccessDomain
- Ref: VpcReverseParameters
InstanceChargeType: PrePaid
PeriodUnit: Month
Period: 1
SecurityGroupId:
Ref: SecurityGroupId
VSwitchId:
Ref: VSwitchId
MaxAmount: 1
SystemDiskCategory: cloud_efficiency
InstanceName:
Fn::Join:
- '-'
- - reverse-vpc
- Ref: ALIYUN::StackName
VpcId:
Ref: VpcId
ImageId: m-2zefr7ixarlg8coevwzl
InstanceType:
Ref: EcsInstanceType
HostName: reverse-vpc
Password: passw0RD
AllocatePublicIP: false
VPCNatIp:
Type: ALIYUN::VPC::NatIp
Count:
Fn::Length:
Ref: VpcReverseParameters
Properties:
NatIpCidr:
Ref: NatIpCidr
NatIpDescription: test
NatIpName: test
NatGatewayId:
Ref: NatGatewayId