LAIN Entry容器时代的堡垒机
LAIN 是宜信大数据创新中心开发的一款私有云平台(PaaS),面向技术栈多样、寻求高效运维方案的高速发展中的组织、DevOps人力缺乏的创业公司以及个人开发者,提供了从编译、部署和扩容到日志、监控和报警的整体解决方案。
Entry 是 LAIN 的 layer2 的一个特殊应用,允许开发者通过 lain enter
命令或者 console 的 web 界面远程登录到具有本人管理权限的容器中。
该效果等同于在 LAIN 的节点上执行 docker exec -it $container_id /bin/bash
。
对于没有权限登录节点的开发者,使用 Entry 远程进入自己的容器调试是不错的选择。
使用前要注意
Entry 由于需要访问集群的特殊资源,必须要由集群管理员部署,Entry的管理员也必须只能是集群管理员。
Entry 使用前要确保集群的 sso 验证机制已经打开,否则客户端可以通过构造 http(s) 的 header 进入其他应用的容器。
整体架构
整体架构如下图所示:
-
LAIN 应用所有者可以通过
lain-cli
或者console
进入除 entry 之外的 LAIN 应用 -
系统管理员可以在 https://entry.${LAIN_DOMAIN}/web 搜索、回放用户会话或者搜索用户命令
审计
Entry
设计了完善的审计框架:
-
Entry
审计所有经自己建立的用户会话 -
系统管理员还可以从 LAIN 节点进入所有的 LAIN 应用(包括 entry),这时由堡垒机负责审计
如下图所示:
数据库
Entry
将用户会话和命令存储于数据库,数据表如下图所示:
请根据 server/sql/bootstrap.sql 创建表
请根据 server/sql/create_db_and_user.sql 创建数据库和用户
部署
配置
请参考 example.json 编写配置文件,并上传到 lvault:
lain secret add ${LAIN-Domain} web /lain/app/prod.json -f example.json
smtp.address
需要包含端口,如:${mail-address}:25
smtp.password
可选,为空时不使用 auth
开发
-
server/gen
下除server/gen/restapi/configure_entry.go
外均由 go-swagger 生成,请不要手动修改 -
server/gen/restapi/configure_entry.go
包含初始化逻辑以及后端 API 配置 -
server/handler
包含后端 API 的实际逻辑
由
swagger.yml
生成代码:go get -u github.com/go-swagger/go-swagger/cmd/swagger # 安装 swagger swagger generate server -f ./swagger.yml -t server/gen # 生成代码