开源K8S跳板机 – 轻松接入现有发布系统

近日给公司的发布系统上跳板机,要求带有审计和操作回放,因此用GO做了一个K8S跳板机。

因为这个需求比较普遍,所以我把代码剥离了公司内部依赖,分享到了github上,大家只需要根据说明实现几个hook就可以对接到自己的发布平台了。

项目地址:https://github.com/owenliang/k8s-jumpserver

架构

关键组件

  • xtermjs+websocket实现web终端效果
  • asciinema存储格式与录像回放

关键原理

  • xtermjs:
    • 上行数据:窗口resize,键盘input。
    • 下行数据:SSH服务端数据流。
  • asciinema:
    • 录像写入:将SSH下行单向流量写入文件(用户输入其实也是SSH服务端回显的)。

接口定义

启动方法

对接到发布系统

根据架构图示意,大家需要自定义几个hook点。

bizes/platform/api.go:

ssh_token由发布系统生成,用户携带ssh token前来登录,需要回调发布系统进行身份校验,关键信息索取。


bizes/k8s/stream.go:

为了可以在发布系统中进行审计和录像回放,应将本次用户的ssh会话详细信息记入数据库,相关信息可以从handler对象中索取。

这里可以选择回调发布平台进入存储,或者直接存入数据库。

生产部署

通过systemd拉起:

通过发布平台的nginx统一接入:

此时URL将变为:

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~