边缘服务器管理工具选型
2023-03-06
4分钟阅读时长
这里我们主要的需求是能够穿透内网管理服务器,服务器大部分情况下应当是linux,但是也可能是windows。我们的服务要通过API和这个服务器管理软件进行交互,也就是说要做二次开发,不能直接用。
刚开始调研的是rport,不太成熟,主要有几个问题:
- 不支持高可用部署。这个软件目前只能单机部署,高可用的唯一方式是用冷备的方式,参考这里;
- 不支持docker/k8s部署,至少官方目前不支持。这个和1组合起来就是无解了,只能单实例部署。虽然说这玩意儿的负载一般也不会有多大:能管理的机器节点一般最多也就几千个,但是这种无法水平扩展的设计用起来还是很崩溃;目前单机极限应当不到2000台,discussion里面说月底的0.9.7版本会解决这个问题;我在discussion里面发了一个帖子希望他们重新考虑HA设计;
- 存储用的是sqlite,仅有用户相关的存储可以改为MySQL;水平扩展困难;
- 仅对已有的协议提供反向代理,比如ssh/rdp。密钥、密码管理还是需要线下自己进行的,换句话说你ssh通道有了,但是怎么认证还是走的原生认证:你需要有机器的登陆密码或者私钥;当然这不一定是缺点(因为可以直接用已有的设施进行连接,使用起来比较简单),不过如果你想在线管理这些权限就要二次开发了;
- 不支持CentOS7;
但是也有优点:
- 部署比较简单,提供完整的脚本一键安装,虽然需要翻墙(脚本不能直接用,不过比较容易修改);
- 通道按需创建,平时没有长连接;
- 提供REST接口,功能齐全;
- 所有功能全部免费;
后面我经过调研又重新发现一款更加成熟的产品:Teleport,这个版本号已经到12了,star数也够多。不过读了文档也发现几个问题:
- 高可用部署,如果选用传统部署,那么后端存储仅支持AW3或者GoogleCloud,这个设计也太蛋疼了;
- 好在1是可以解决的:部署在k8s里面,参考这里;
- auth server仅提供了GRPC客户端,而且SDK只支持go语言;当然理论上也可以通过proto文件生成其他语言的服务,不过那就要你自己动手了;
- 和rport相反,由于该平台设计是为了提供无密码服务,所以他用的不是原生的OpenSSH,而是自己重新实现了协议(所以它的github上写的是“wire protocols”);这就导致客户端用起来非常麻烦,如windows桌面的准备工作(而且这个是企业用户专用的功能)。不过看起来也可以代理任意TCP协议,这个方案应该简单一点;
- 需要在客户端进行命令行操作;
- 使用local user的RDP功能是收费的;
总的来说teleport可以满足一般设备/机器管理需求,而且支持水平扩展。缺点是设计的可能有点过于复杂了,内置了很多用不上的功能,而且配置比较麻烦。如果rport支持更好的部署方式的话,其实我还是更倾向于这种简单的设计,可以后续跟进看一下rport的变化。
与Teleport类似的还有pomerium,不过这个API只对企业版开放,所以不予考虑了。
后面在Reddit搜了一下,发现推荐最多的是MeshCentral,仔细看了一遍User Guide,总结如下:
- 设计理念比较老派,和云原生不沾边,可以自己搬到k8s里,就是有点麻烦,尤其是目前集群地址是静态配置的;
- 支持大规模部署,后端用的是MongoDB(默认使用轻量级数据库),没有其他依赖;
- 仅需要开放3个端口,不像其他方案需要开放一堆或者使用三级泛域名;
- 文档非常详尽,但是没有API文档,官方推荐的集成方式是iframe嵌入(实际上也可以满足一般需求)。如果想要写接口通信,可以参考作者的意见,就是写websocket客户端通信;
- 远程桌面支持WebRTC打洞,可以节省服务器流量;
- 前端原生支持中文本地化;
小规模使用感觉用rport就够了,大规模使用如果不嫌麻烦的话可以用teleport(前提是不需要远程桌面)。如果不想开发前端,用SSO(自己实现SAML)登录meshCentral是最好的,该软件没有收费功能,全部免费;能够接受iframe嵌入也可以。
经过仔细对比,最后还是选用meshCentral,主要是易用且稳定,而且集成也挺方便的,iframe足以满足一般需求,前期使用SSO跳转即可。