vlambda博客
学习文章列表

Apache Knox SSO 及在移动云 EMR 中的实践

本文作者为中国移动云能力中心大数据团队软件开发工程师单滢滢,文章主要介绍了Apache KNOX、KNOX SSO的基本原理以及在移动云弹性MapReduce产品中的应用实践。

KNOX SSO 原理

一、KNOX 简介

Apache Knox网关是一个应用程序网关,用于与Apache Hadoop部署的REST API和UI进行交互。Knox Gateway为与Apache Hadoop集群的所有REST和HTTP交互提供单一的访问点。

Knox提供三组面向用户的服务:

1. 代理服务(Proxying Services):Apache Knox项目的主要目标是通过代理HTTP资源提供对Apache Hadoop的访问。

2. 认证服务(Authentication Services):对REST API访问以及UIs的WebSSO流进行身份验证。LDAP/AD,基于头的PreAuth,Kerberos,SAML,OAuth都是可用的选项。

3. 客户端服务(Client Services):可以通过DSL编写脚本或直接将Knox Shell类作为SDK来完成客户端开发。

Apache Knox 代理网关用于保护Hadoop生态体系安全,为Hadoop集群提供唯一的代理入口。Knox以类似反向代理的形式挡在集群前面,通过内置的过滤器链来处理URL请求,支持使用LADP进行用户身份认证,隐匿部署细节(例如端口号和机器名等),接管所有用户的HTTP请求(例如WEB UI 控制台访问和RESTful 服务调用),以此来保护集群安全。不仅如此,Knox还能担任认证网关的角色。

Hadoop大数据平台生态圈中主要用Knox来保护组件UI,例如HDFS UI、YARN UI、Spark UI、HBase UI等。

Apache Knox SSO 及在移动云 EMR 中的实践

典型的Knox请求服务资源过程如下:

Apache Knox SSO 及在移动云 EMR 中的实践


1.HDFS中进行Knox proxy代理配置,即Knox用户代理所有客户端用户;2.客户端发出Rest请求;3.客户端单点登录输入用户名、密码;4.LDAP/AD进行用户认证;5.使用Knox keytab对客户端用户代理、认证;6.使用Knox keytab进行Hadoop资源请求。

二、KNOX SSO 简介

Knox Single Sign-on(SSO)提供使用单个用户名和密码访问控制多个Web UIs功能。

带有默认Knox SSO IDP的Apache Knox允许使用基于表单的身份验证作为SSO的一种解决方案来访问和开发Knox SSO支持的应用程序,包括Ambari、Ranger、Hadoop UIs和通过Knox使用REST APIs定制的应用程序。

目前,有两种配置Knox SSO的方法:

1.LDAP/AD:使用Shiro安全框架,默认方法。2.SAML:使用pac4j+Okta安全框架。

三、KNOX SSO 处理 HTTP 请求流程

以下是通过Knox SSO集成SAML认证的通用时序图:

Apache Knox SSO 及在移动云 EMR 中的实践

流程说明:

Knox SSO为集成许多身份验证系统和SSO解决方案提供了一种抽象方法,使参与集成的web应用程序能够更容易地扩展到这种方法中。如果没有Knox SSO提供的token认证功能,每个组件UI都需要单独与各自的解决方案集成。

类似的,使用LDAP/AD作为IdP,Basic Auth和Form类型的验证时序图分别如下:

Apache Knox SSO 及在移动云 EMR 中的实践


Apache Knox SSO 及在移动云 EMR 中的实践

KNOX SSO 在移动云 EMR 中的实践

一、移动云 EMR 简介

移动云弹性MapReduce(简称EMR)是构建于云端的大数据PaaS服务,包含Hadoop(HDFS/YARN/MapReduce)、Spark、Hive等开源技术。支持用户快速创建集群,进行海量数据存储与计算。

产品功能主要包括:

1. 集群管理

集群生命周期:支持集群订购、退订、删除等。集群实例管理:支持集群资源管理、集群服务管理、集群用户管理等。集群运营管理:支持集群配额管理、容量管理、权限管理等。集群运维管理:支持集群监控告警、故障管理、参数配置管理等。

2. 集群服务

Hadoop(HDFS/YARN/MapReduce):作为大数据存储与计算平台。Spark:基于内存的新一代分布式计算引擎,主要用来构建大型的、低延迟的数据分析应用程序。Hive:基于Hadoop的离线分析型数据仓库,专门查询和分析大型数据集、表和存储管理服务。

移动云EMR还具有操作简单易用、环境安全可靠、成本经济可控、生态完善开放等产品优势,适用于离线数据分析和离线存储与计算等应用场景。

移动云EMR中将Hadoop生态原生UI映射成单点Knox形式的UI,如下图所示:

此外,移动云EMR还通过Knox统一纳管了包括Spark,LogSearch和Ranger等非Hadoop生态圈组件的UI。

二、KNOX SSO 在移动云 EMR 中的实践

移动云EMR产品中集成Knox用于代理集群中各个服务UI,特别的,通过Knox SSO技术,EMR实现了对集群监控管理平台Ambari的代理,提供完整的开箱即用集群统一UI访问能力。

移动云EMR集群的每个节点,均为一台弹性云服务器,使用云镜像提供启动云服务器实例所需的所有信息。通俗地说,镜像就是云服务器的“装机盘”。云镜像是一种用于业务连续性,灾难恢复和备份的技术,将软件以及环境集成到云主机当中,通过镜像服务生成副本文件。

使用云镜像可以灵活便捷地创建出与镜像系统环境或软件一致的云主机,从而避免复杂的服务器配置问题,实现即开即用。

实现 Ambari SSO 关键步骤

移动云EMR中使用HAProxy实现Knox高可用,为实现开箱即用的高可用Knox能力,需要保证高可用集群下的Knox证书一致,因此预先准备Knox证书并固化到镜像中,用于Knox安全认证,参考命令如下(其中<cert.pem>为文件存储位置)。

$JAVA_HOME/bin/keytool -export -alias gateway-identity -rfc -file <cert.pem> -keystore {jkspath}

LDAP启动时初始化,完成LDAP和Ambari用户同步,参考命令如下。

默认情况下,Ambari使用内部数据库作为身份验证和授权的用户存储。可以将Ambari配置为对存储在LDAP、activedirectory(AD)或FreeIPA数据存储中的外部用户进行身份验证尝试通过Web UI访问Ambari,确认已重定向到Knox登录页面。

ambari-server setup-ldap

设置LDAP集成后,必须使用ambari-server将LDAP用户和组与Ambari数据库中的用户同步。

ambari-server sync-ldap --all

KNOX启动时初始化,完成ambari-server的Knox SSO配置,参考命令如下。

ambari-server setup-sso

效果展示

输入Ambari的Knox代理URL,提示不安全,选择继续前往。

跳转到Knox SSO表单验证页面请求验证,并带有originalUrl参数。

输入配置的LDAP中保存的用户名和密码,验证通过,生成hadoop-jwt存入cookie,重定向到originalUrl,通过正确的hadoop-jwt登陆Ambari。

总结与思考

Knox SSO为移动云EMR中实现单点登录访问控制多个大数据组件Web UIs提供了能力。

为Ambari配置Knox SSO需要注意以下几点:

配置Ambari可使用外部用户存储系统(如LDAP)进行身份验证和授权,否则无法通过Knox登录验证页面完成对Ambari的认证保持Ambari与LDAP的用户和组同步,否则会提示单点登录重定向错误Ambari需要开启SSO,并设置相关配置,否则无法通过Knox代理Ambari UI

使用Knox中遇到的一些问题,供大家参考:

由于HBase版本限制,Knox对一些低版本的HBase UIs的代理还不够完善如果Knox进程没有单独配置内存,进程会自动根据系统内存大小按照比例划分可用内存。当频繁触发Knox的访问,会导致Knox进程占用内存高,严重的会直接导致UIs不可访问。因此使用Knox作为代理,建议为Knox单独配置内存使用keytool 生成的证书有默认的有效期,因此需要及时关注证书是否在有效期内


参考资料

KNOX 官网KNOX WebSSO 流程


关于本周文章如果大家有疑问,或者有其他感兴趣的大数据内容,欢迎大家在评论区留言,后续会持续分享大数据领域的干货知识。