diff --git "a/\345\274\200\346\272\220\346\225\205\344\272\213/\345\244\251\347\277\274\344\272\221\345\257\271DSS\347\232\204\345\205\254\346\234\211\344\272\221\346\224\271\351\200\240\345\222\214\345\220\216\347\273\255\346\200\235\350\267\257.md" "b/\345\274\200\346\272\220\346\225\205\344\272\213/\345\244\251\347\277\274\344\272\221\345\257\271DSS\347\232\204\345\205\254\346\234\211\344\272\221\346\224\271\351\200\240\345\222\214\345\220\216\347\273\255\346\200\235\350\267\257.md" new file mode 100644 index 0000000000000000000000000000000000000000..dc444e1399a0f0b38c99265e1306065a01aad8b6 --- /dev/null +++ "b/\345\274\200\346\272\220\346\225\205\344\272\213/\345\244\251\347\277\274\344\272\221\345\257\271DSS\347\232\204\345\205\254\346\234\211\344\272\221\346\224\271\351\200\240\345\222\214\345\220\216\347\273\255\346\200\235\350\267\257.md" @@ -0,0 +1,71 @@ +## 天翼云对DSS的公有云改造和后续思路 + +### 背景 + +在此之前,中国电信对内的大数据都没有一个统一的入口,我们大数据团队的负责人刚神很早就关注了wedata社区。在开源方面,DataSphere Sdutio(以下简称DSS)作为大数据一站式开发平台是非常优秀的,同类竞品也比较少或者不够完善,所以我们团队选择了DSS。在我们内部使用一段时间后大家的反馈都还不错,同时领导也提出了把dss+linkis改造成公有云版本的建议,我们团队经过讨论达成一致意见并迅速的开展了相关工作,历时2个多月的时间改造完成并且上线。在这期间得到社区的大力支持,特别是强哥、平哥、黄哥等微众大佬的鼎力支持和问题解答,在此深表感谢。以下就改造工作简单做一下分享: + +### 对接天翼云的单点登录 + + linkis-gateway本身是支持单点登录的,实际接入天翼云cas单点登录也遇到了一些问题,比如:cas回调接口会被网关拦截;2.dss默认设置登陆状态的方法需要移到cas模块,getbaseInfo的设置登陆需要去掉。其他的接入步骤按官方步骤基本上就能正常运行。这块我们也是做成了配置(包括回调接口,重定向地址,ctyun自己的还有appid等) +第一步新建了一个单点登录的模块(我们是ctyunsso)实现SSOInterceptor + +``` + trait SSOInterceptor { + + /** + * 如果打开SSO单点登录功能,当前端跳转SSO登录页面登录成功后,会重新跳回到DSS首页,这时DSS前端再次请求gateway, + * gateway会通过调用该方法获取已SSO登录的用户,然后将用户写入cookie,保证后续请求可直接放行。 + * 您需实现该方法,通过Request返回用户名。 + * @param gatewayContext + * @return + */ + def getUser(gatewayContext: GatewayContext): String + + /** + * 通过DSS首页Url,用户生成一个可重定向的SSO登录页面URL。 + * 要求:需带上requestUrl,以便SSO登录成功后能跳转回来 + * @param requestUrl DSS首页URL + * @return 例如: https://${sso_host}:${sso_port}/cas/login?redirectUrl=${requestUrl} + */ + def redirectTo(requestUrl: URI): String + + /** + * 用户退出登录时,gateway会调用此接口,以保证gateway清除cookie后,SSO单点登录也会把登录信息清除掉 + * @param gatewayContext + */ + def logout(gatewayContext: GatewayContext): Unit + + } +``` +第二步 配置和jar包 + +``` +linkis-gateway增加下面配置 +wds.linkis.gateway.conf.enable.sso=true //开启单点登录模式 +wds.linkis.gateway.conf.sso.interceptor=cn.ctyun.SSOXX 自己实现的单点登录类 +将单点登录模块的jar包放到linkis-gataway/lib 下面 +模块可以建在linkis下面,方便打包。 +``` + +### 安全性全面增强 +对天翼云来说安全有一票否决权,我们的服务都要符合各种安全策略(如https,nginx配置,验证码,代码漏洞扫描都做了改造,弱密码等),以https为例,咨询社区暂时没考虑https,我们自己做了升级https,发现几乎所有模块都有问题,这个url同时也是后端各个模块之前通信的baseurl配置,比如qualitis,visaulis与dss之前的交互,创建删除更新项目等;因为DSS前端模块跳转的链接也要用到这个配置,所以只能配置外网的https baseurl;基本上把所有模块的httpclient,DSS下所有的appjoint,linkis的httpclient都做了改动。兼容了http和https两种调用。(这块应该把前后端url分开,因为时间原因,我们没有改动,实际证明还是应该改的)。 +![image](https://cdn.nlark.com/yuque/0/2020/png/99447/1604644508972-530499d7-af32-4768-a26b-9398748ac8fa.png) + +升级改造过程中也修复问题和增加的一些特性 大概20个左右 +![image](https://cdn.nlark.com/yuque/0/2020/png/99447/1604663569650-d42251fd-e063-4821-9780-8fd8261829d4.png) + +### 用户工作空间HA +社区版本用户工作空间目录默认是使用linux目录,需要在linux下建N个用户和目录,还有备份等原因我们选择了hdfs目录,社区也是支持这个功能的,但不太完善,比如前端不支持保存等,后端也存在很多问题需要适配,具体这块的坑,我的同事涛哥会有专门的文章来介绍 + + +### 用户资源自动开通 +社区版本因为没有太多的涉及到用户管理以及用户开通功能的版块,因此我们对这个版块进行了改造:采用代理用户的方式来实现多租户。在早期内部私有化试用阶段,流程上我们通过系统工单形式进行账户申请,技术上采用业务人员手动执行脚本的方式来进行用户开通,涉及到LDAP账户、keytab授权、hdfs目录、hive库表等多个模块的开通与授权工作,采用脚本开通需要付出一定人力成本,出现问题时排查需要付出较多精力。在进行公有云改造时,依托我们近期开发的运维平台优势,将底层资源开通的功能交给了运维平台实现,开发了一个单独的用户授权服务,将整个用户开通流程从脚本调用方式升级为运维平台API调用。当有新用户需求时,天翼云用户中心向用户授权模块下发工单,由用户授权模块调用运维平台,实现对底层资源的开通,实现了用户资源的自动开通;使得各模块职责单一,出现问题后也便于排查,提高了效率。如果这一版块其他小伙伴也存在相同的需求,我们也会将授权模块的实现框架进行开源并与社区探讨整合。 +![image](https://cdn.nlark.com/yuque/0/2020/png/99447/1604662872094-eb8c90cd-c86e-466d-8e58-40d27c3f5dce.png) + +## 未来展望 +现在产品还有很多需要完善的地方,比如分布式(规划如下)。 +![image](https://cdn.nlark.com/yuque/0/2020/png/99447/1604658488948-c1b9269d-0464-4190-8ba7-a0b0a5281be6.png) + +还有多用户管理,多集群等,新手引导,案例模板等,还有社区1.0发布之后合并到我们的公有云版本 + + \ No newline at end of file