LAIN Entry

容器时代的堡垒机
授权协议 MIT
开发语言 Google Go
所属分类 服务器软件、 终端服务器/远程连接
软件类型 开源软件
地区 国产
投 递 者 岳谦
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

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 将用户会话和命令存储于数据库,数据表如下图所示:

数据表

部署

配置

请参考 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  # 生成代码
  • @Test public void testMap2(){ //创建一个map集合 Map<Integer, String> map=new HashMap<Integer,String>(); //向集合中添加数据 map.put(10, "hanhan"); //找到set键的试图  map.keySet()返回此映射中包含的键的 Set 视图 Set<Integer> set=map.key

  • Linux内核中,获取节点地址的函数list_entry()非常常用,由于其定义有点晦涩,先解析如下: list_entry的宏定义: #define list_entry(ptr, type, member) /  ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))  这个倒是不难理解:从一个结构的成员指针找到其容器的指

  • 我希望要一个ArrayList<Entry>,类似C++中的pair, 但是Map.Entry是个接口,不能实例化,可以像下面这样写 HashMap<Integer, Integer> G = new HashMap<Integer,Integer>(); G.put(1, 9); G.put(4, 6); G.put(2, 8);G.put(3, 7); ArrayList<Map.En

  • # Tkinter教程之Entry篇  # Entry用来输入单行文本  from tkinter import *    root = Tk()  # 创建entry  Entry(root, text='input your text here').pack()  # 上面的代码目的是创建一个Entry对象,并在Entry上显示'input your text here',运行此代码,并没有看

  • //linux内核入口     /*  *  linux/arch/x86_64/entry.S  *  *  Copyright (C) 1991, 1992  Linus Torvalds  *  Copyright (C) 2000, 2001, 2002  Andi Kleen SuSE Labs  *  Copyright (C) 2000  Pavel Machek <pavel@su

  • Map.entrySet() 这个方法返回的是一个Set<Map.Entry<K,V>>,Map.Entry 是Map中的一个接口,他的用途是表示一个映射项(里面有Key和Value),而Set<Map.Entry<K,V>>表示一个映射项的Set。Map.Entry里有相应的getKey和getValue方法,即JavaBean,让我们能够从一个项中取出Key和Value。 下面是遍历Map的四

  • 内核中经常采用链表来管理对象,先看一下内核中对链表的定义 struct list_head { struct list_head *next, *prev; }; 一般将该数据结构嵌入到其他的数据结构中,从而使得内核可以通过链表的方式管理新的数据结构,看一个例子: struct example { member a; struct lis

  • for(Map.Entry<String, String> entry:params.entrySet()) 意思是:把params中的,每一个元素放入map中。

  • Entry组件 一个单行文本输入框。可以用来接受用户的输入,但是只能输入一行。 如果你只是想显示而不是编辑,那么应该使用标签。 1 w = Entry ( master , option = value ... ) 需要注意一点,Entry与 Lable 和 Button 不同,其text 属性是无效 的。那么需要让Entry显示文字改如果操作呢? 1 from tkinter import *

  • Map提供了一些常用方法,如keySet()、entrySet()等方法,keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。 Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。 接口中有getKey(),getValue

  • entry是英文中的一个单词,意思是"入口"、"进入"或"记录"。 具体来说,entry可以用来指物品进入某个地方的通道,也可以用来表示进入某个组织、行业或领域的方法。例如,你可以用entry来描述一扇门、一个洞或一个窗口,这些都是可以通过的通道。 此外,entry还可以用来表示在某个系统、数据库或记录中添加新内容的操作。例如,在账单软件中添加一笔新的收入或支出记录,就可以称作是"创建一条entr

 相关资料
  • 堡垒锁可对服务器上的特定文件进行监控和防护。防护模式可锁定对特定文件的写入,监测模式可在对特定文件写入时发出报警,堡垒锁支持配置防护/监测需要的文件类型,支持对特殊路径和进程的加入白名单,保证控制策略的可用性。 堡垒锁分为防护、监测、关闭三种模式,用户可在三种模式间切换。 确定堡垒锁模式后,可通过选择标签配置对此策略生效的服务器。如需要管理分组标签,可使用“去管理分组”快速跳转至服务器管理模块。

  • 本文向大家介绍Python实现堡垒机模式下远程命令执行操作示例,包括了Python实现堡垒机模式下远程命令执行操作示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现堡垒机模式下远程命令执行操作。分享给大家供大家参考,具体如下: 一 点睛 堡垒机环境在一定程度上提升了运营安全级别,但同时也提高了日常运营成本,作为管理的中转设备,任何针对业务服务器的管理请求都会经过此节点,比

  • Ladar Levison编写了ecies_encrypt和ecies_decrypt C函数。这些功能与ECIES弹力城堡兼容吗?如果不是,有没有人知道要修复什么或者ecies的另一个C实现?

  • 问题内容: 我想实现此方案:在AWS上,我有一个VPC,在其中部署了公共和私有子网。在公共子网中,我有一个“堡垒”实例,而在私有子网中,有一个节点在运行某些服务(又称为“服务实例”)。通过使用* nux ssh命令,我可以执行以下操作从本地笔记本电脑连接到“服务实例”: 我有一个Go程序,想做以下事情: ssh通过“堡垒”从“本地便携式计算机”连接到“服务实例” 使用连接会话来运行一些命令(例如“

  • 问题内容: 我目前在公司中使用Docker-Compose运行开发堆栈,以向开发人员提供他们编写我们的应用程序所需的一切。 它尤其包括: 一个Gitlab容器(sameersbn / gitlab),用于管理私有GIT存储库, 一个用于构建和持续集成的Jenkins容器(library / jenkins), 一个Archiva容器(ninjaben / archiva-docker)管理Mave

  • 问题内容: 假设我有这个: 我想以该类之外最简单的方式遍历每个对象。我应该怎么做呢?我考虑过这样做: 遵循这些原则。 无论如何,问题是我不能真正从next()返回单个对象,并且我也不能让Iterator接受多个类型。那么,有什么想法吗? 另外,我不能开设新课程来将MobileSuit和Pilot相结合。我需要将它们分开,即使我一次遍历两者。原因是可能有没有飞行员的机动战士,而且我不确定如何通过将他

  • 一个自动点唱机只有一首歌恐怕不会太流行,所以我们需要建立一个歌曲目录和一个等待播放的列表。这都是容器的例子,一个包含若干个对其它对象引用的对象。 目录和播放列表都有类似的操作,增加歌曲,删除歌曲,返回歌曲列表等等。播放列表可能还需要别的方法,比如插入广告,记录累计播放时间等,我们将在后面考率这些问题。现在,我们需要建立一个SongList类,以便在目录和播放列表中使用。 容器 在开始实现之前,我们

  • > 我正试图弄清楚Kubernetes中的网络,尤其是多集装箱吊舱的处理。在我的简单场景中,我总共有3个豆荚。其中一个有两个容器,另一个只有一个容器,它希望与多容器吊舱中的特定容器通信。我想弄清楚kubernetes如何处理此类容器之间的通信。 为此,我在一个“sidecar体系结构”中有一个简单的多容器吊舱,YAML文件如下所示: > 我想用这个YAML文件实现的是,在pod“nginx”中,有