去年末腾讯云轻量服务器推出了内网互联功能,但是好像有很多小伙伴不太清楚用法。因此写本文给大家一些使用思路。
本文基于官方文档 https://cloud.tencent.com/document/product/1207/56847 。
注意事项
- 轻量内网互联功能、云联网及 VPC 等功能本身不收费,但若本地互联带宽超过 5Gbps 或需要跨地域互联,则需要收取相关带宽费用。因此本文仅做同地域互联展示
- 由于轻量的内网 IP 无法自定义,所以建议先购买好需要的轻量服务,再规划内网其他服务(如 SCF、MySQL 等)的网段,以避免内网 IP 冲突
- 若轻量云 VPC 的 CIDR 与云函数 VPC 的 CIDR 有重合,可能带来一些奇怪的访问不通的问题,建议在网段规划时直接避开重合段
- 云联网只是打通网络,实际端口访问还是受到防火墙限制。若出现访问不通,请检查轻量服务器的防火墙设置:https://cloud.tencent.com/document/product/1207/44577
- 已有云函数可以通过编辑函数配置加入 VPC,无需新建
- 该方法打通网络后,不仅可以做到云函数访问轻量云资源,同样反向访问也是可以的。如允许轻量云服务器访问 VPC 内的其他 CVM 或 MySQL、Kafka、Redis 等资源,但是要注意对应资源的安全组设置,需要放通轻量云服务器的相关网段
操作流程
轻量云内网互联
在对应区域购买轻量云服务,本文以北京区为例
购买完成后进入 内网互联 页面,可以看到对应区域的关联选项:

点击关联云联网,弹出关联选择页面:

选择需要的云联网。若还未创建云联网,则点击新建。

新建云联网时,由于我们只用本地带宽,因此服务质量直接选择白金即可。若有跨地域互联需求,则按照预算选择对应的服务质量。
下方的关联 VPC 实例可以先不填。直接点击右边的小叉删除即可。
新建完成后,回到关联云联网页面,选择对应的云联网并确认

看到这里说明关联申请已成功提交。接下来需要进入云联网控制台同意关联申请。点击页面中的跳转链接即可快速跳转到对应的云联网控制台

这里要注意,由于轻量服务器是处在腾讯云内部独立账号下,因此这里的所属账号可能与自己的账号不同,这是正常的。如果这里出现了多条记录,我们找对应时间为我们申请关联的时间,备注为 Lighthouse VPC 的申请记录,并点击同意。
接受申请后,状态变为绿色的已连接。
此时回到轻量云的控制台,刷新后会发现已关联成功

到这里,轻量云和云联网的关联已全部完成。此处的内网 CIDR 需要记下,在后续的 VPC 创建中要用。
云函数 SCF 内网互联
接下来我们处理 SCF 与内网资源的互通。
首先我们需要一个 VPC 给 SCF 使用。如果已有规划好的 VPC,则可跳过新建 VPC 步骤。
打开 VPC 控制台,切换到对应的区域。这里使用北京区域。

新建 VPC 时,有两个 CIDR 需要配置。一个是整个大 VPC 的 CIDR 范围,一个是单个子网的 CIDR 范围。还记得之前轻量的 CIDR 么?此处的大 VPC CIDR 可以包含轻量的 CIDR,但是子网的 CIDR 范围最好不要跟轻量的 CIDR 有重叠,否则需要对路由表进行细致的调整,还可能出现 IP 冲突,比较麻烦。
由于我们之前拿到的轻量的 CIDR 是 10.0.24.0/22,因此这里我们给子网分配 10.0.0.0/24,避免冲突。

接下来我们需要将这个 VPC 关联到刚才的云联网中。
回到云联网的控制台,在关联实例页面,选择新增实例

依次选择私有网络-对应地域-对应 VPC,并确认。

确认后即可看到我们刚刚新建的 VPC 和轻量的 VPC 均为已连接状态。
为了确保没有 CIDR 冲突,我们需要确认一下路由表状态。点击上方的路由表页面进行确认

看到两条路由表均为有效且启用的状态,说明互联已完成。
若此处出现路由冲突,请参考官方文档解决。
云函数使用 VPC 网络
现在一切准备就绪,我们可以使用 SCF 访问轻量服务器了。
为了测试方便,我在轻量服务器上启动了一个 nginx 服务,并开启了对应的防火墙。这里的操作与互联无关,因此不再赘述。
现在来到云函数的控制台,在对应地域新建云函数。这里选择北京,使用 python 语言。
函数代码使用 python 写了一个简单的获取网页内容并输出:
# -*- coding: utf8 -*-
import json
import urllib.request
def main_handler(event, context):
resp = urllib.request.urlopen("http://10.0.24.x") # 这里是轻量服务器的内网 IP
print(resp.read())
在填写完函数内容后,展开下方的高级设置:

我们需要关注的是这里的私有网络,其他设置按需调整即可,与互联无关。
我们勾选启用私有网络:

待加载完成后,选择我们之前创建好并关联了云联网的私有网络,然后点击页面最下方的完成即可。
待函数部署成功后,查看函数配置,看到对应的 VPC 配置,即为配置成功。

接下来测试一下函数是否可以跑通,进入函数代码页面,点击编辑器下方的测试:

测试完成后,会在下方输出测试结果:

可以看到,云函数成功通过内网拉到了位于轻量云服务器上的 nginx 服务的数据。