Hadoop生态圈-Knox网关的应用案例

                                     作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.Knox网关简介

  据Knox官网所述(http://knox.apache.org/):Apache Knox Gateway是用于与Apache Hadoop部署的RESTAPI和UI交互的应用程序网关。Knox Gateway为与Apache Hadoop集群的所有REST和HTTP交互提供一个单一的访问点。KNOX提供三组面向用户的服务:

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

    认证服务:对USTAPI访问以及UIS的WebSSO流进行身份验证。LDAP/AD,基于头的PROAUTH,Kerberos,SAML,OAUTH都是可用的选项。

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

  简单的说,Apache Knox Gateway是一款用于保护Hadoop生态体系安全的代理网关系统,为Hadoop集群提供唯一的代理入口。Knox以类似反向代理的形式挡在汲取你的前面,隐匿部署细节(例如端口号和机器名等),接管所有用户的HTTP请求(例如WEB UI 控制台访问和RESTful 服务调用),以此来保护集群安全。不仅如此,Knox还能担任认证网关的角色。如下图所示:

  Knox网关本质上是一款基于Jetty实现的高性能反向代理服务器,通过内置的过滤器链来处理URL请求,支持使用LADP进行用户身份认证。Knox网关在架构设计上具有良好的可扩展性,这种扩展性主要通过Service和Provider这两个扩展性框架来实现。Server扩展性框架还提供了一种网关新增的HTTP或RESTful服务端点的途径,例如WebHDFS就是以新建的Service的形式加入Knox网关的。而Provider扩展性框架则是用来定义并实现相应Service所提供的功能,例如端点的用户认证或是WebHDFS中的文件上传等功能。当我们使用Knox作为代理网关之后,大数据平台中Hadoop系统的逻辑拓扑就会变成如下图所示:

  更多关于Knox的知识请参考官网链接:http://knox.apache.org/。

二.通过Ambari安装Knox服务

1>.点击添加服务

2>.选中Knox服务并点击下一步

3>.将Knox Gateway服务和Ambar-server安装在同一台服务器上

4>.输入认证密码

5>.预览配置信息,确认无误后,点击“Deploy”

6>.安装成功后,点击下一步

7>.安装成功后,点击完成

8>.安装成功后,查看Knox的主界面信息

三.LDAP介绍

  Knox网关的认证服务是支持LDAP进行用户身份认证的,那么什么是LDAP呢?LDAP(全称:“Weight Diretory Access Protocol”)是轻量级目录访问协议的简称。它是一种树形目录结构的轻量级数据库,能够提供快速检索能力。常用与存储企业内部组织机构与用户数据。

  1. .什么是目录服务
  2. 目录是一类为了浏览和搜索数据二十几的特殊的数据库,例如:最知名的的微软公司的活动目录(active directory)就是目录数据库的一种。目录服务时按照梳妆形式存储信息的,目录包含基于属性的描述性信息,并且支持高级的过滤功能。
  3. 一般来说,目录不支持大多数事务性数据库所支持的高吞吐两盒复杂的更新操作。目录进行更新操作,可以说是要么全部,要么都不的原子操作,目录服务适合的业务应用在于提供大量的查询和搜索操作。
  4. 为了保证目录数据的可用性和卡可靠性,她们在确保提供快速的查询和搜索操作的同事,还提供了主从服务器同步目录数据信息的能力,这相当于传统的Mysql数据库的主从同步一样,可以最大限度的确保基于目录业务的持续可用性。
  5. 广义的目录服务概念,可以有多重不同的方式来提供目录服务,不同的目录所允许存储的信息是不同的,在信息如何被引用,查询,更新以及防止未经守群的访问等问题上,不同的目录所允许存储的信息是不同的,在信息如何被引用,查询,更新以及防止未经授权的访问等问题上,不同的目录的处理方式也有诸多的不同。一些目录服务时为本地的,只提供受限的服务,(比如,单机上的finger服务)。另一些服务时大范围的(global),提供广阔得多的服务(比如面向整个因特网)。大范围的服务通常是分布式的,这也就意味着数据是分布在多台机器上的,这些计数器一起来提供目录服务。典型的大范围服务定义一个统一的名称空间(namespace)来给出一个相同的数据试图(data view),而不管你相对于数据所在的位置。DNS是一个典型的大范围分布式目录服务的例子。
  6.  
  7. .什么是ldap
  8. LDAPLightweight Directory Access Protocol (轻量级目录访问协议)的缩写。正如它的名字所表明的那样,它是一个轻量级的目录访问协议,特质基于X.500的目录访问协议的简化版本。LADP运行在TCP/IP或者其他的面向连接的传输服务至上。LADP完整的技术规范由RFC2251 The Lightweight Directory Access ProtocolV3)”和其他几个在RFC3377中定义的文档组成。我们不需要研究的那么深,因为我们又不会对它进行二次开发,我们运维只要能了解到它的目录结构,以及它的用法就OK了,因此我们可以用两句话总结以上内容:
  9. a>.LADP是轻量目录访问协议(Lightweight Directory Access Protocal)的缩写;
  10. b>.LADP标准实际上是在X.500标准基础 上产生的一个简化版本;
  11.  
  12. .什么是X.
  13. X.500ITU-TISO定义,它实际上不是一个协议,而是有一个协议族组成,包括了从X.501X.525等一系列非常完整的目录服务协议。X500主要具备以下特征:
  14. a>.分散维护
  15. 运行X.500的每一个站点只负责人本地目录部分,可以立即更新和维护操作;
  16. b>.搜索性能
  17. X.500具有强大的搜素功能,支持用户建立的任意复杂查询。
  18. c>.单一全局命名空间
  19. 类似于DNS,X.500为用户提供单一同性命名空间(Single Homogeneous Namespace)。与DNS相比,X500目录中定义了信息结构,运行本地扩展。
  20. d>.结构化信息结构
  21. X.500目录中定义了信息结构,运行本地扩展。
  22. e>.基于标准的目录服务
  23. 由于X.500可以被用于建立一个基于标准的目录,因此在某种意义上,请求应用目录信息(电子邮件,资源自动分配器,特定目录工具)的应用程序就能访问重要且有简直的信息。
  24. 从技术上来说,LADP是一个到X.500目录服务的目录访问协议,X.500是一个OSI目录协议。最初,LADP客户单通过网关(gateway)访问X.500目录服务。在客户和网关之间运行LADPX.500目录访问协议(Directory Access ProtocolDAP),而X.500目录访问协议时位于网关和X.500之间的。DAP是一个重量级的协议,在整个OSI协议栈上进行操作,而且需要占用大量的计算资源。LADP被设计的在TCP/IP层上操作,以小得多的代价实现了大多数DAP的功能。
  25. 虽然LADP仍旧可以通过网关访问X.500目录服务器,但是现在通常都是在X.500服务器上直接实现LADP
  26. 单独的LADP守护程序sladp,可以被看做是一个轻量级的X.500目录服务器。也就是说,他没有实现X.500完整的DAP协议。作为一个轻量级的目录服务器,sladp实现的仅仅是X.500模型的一个子集。我们可以理解是LADPX.500的一个简单的实现。
  27.  
  28. .LADPX.500的相同点
  29. LADPX.500标准中的目录访问协议DAP的一个子集,可用于建立X.500目录。因此这两个目录技术标准有着许多的共同之处:
  30. a>.在平台上,都实现了一个通用的平台结构,提供了一个操作系统和应用程序需要的信息服务类型,可以被许多平台和应用程序接收和实现;
  31. b>.在信息模型上,都是用了项,对象类,属性等概念的模式来描述信息;
  32. c>.在命名空间上方面,都是用了目录信息结构和层次命名模型;
  33. d>.在功能模型上,都使用了相似的操作命令来管理目录信息;
  34. e>.在认证框架方面,都可以实现用户名称和密码,或者基于安全加密方式的认真机制;
  35. f>.早灵活性上,他们的目录规模都可大可小,达到全球目录树,小到只有一台目录服务器;
  36. g>.在分布性方面,目录信息都可以分布在多个目录服务器中,这些服务器可以由各个组织管理,既保证了目录信息总体结构的一致性,又满足了分级管理的需要。
  37.  
  38. .LADPX.500的差别
  39. a>.LADP基于Internet协议,X.500基于OSI(开放式系统互联)协议,建立在应用层上的X.500目录访问协议DAP,需要在OSI会话层和表示层上进行许多的建立连接和包处理的任务,需要特殊的网络软件实现对网络的访问;LADP则直接运行在更简单和更通用的TCP/IP或其他可靠的传输层协议上,避免了在OSI会话和表示层的开销,是链接的建立和包的处理更简单,更快,对于互联网和企业网应用更理性。
  40. b>.LADP协议更为简单,LADP继承了X.500最好的特性,同时去掉了它的复杂性,LADP通过使用查找操作实现列表方式和读操作,另一方面省去了X.500中神猫的和很少使用的服务控制和安全特性,只保留常用的特性,简化了LADP的实现。
  41. c>.LADP通过引用机制实现分布式访问,X. DSA通过服务器之间的链操作实现分布式的访问,这样查询的压力九中与服务器端;而LADP通过客户端API实现分布式操作(对于应用透明)平衡了负载;
  42. d>.LADP实现具有低费用,已配置和一管理的特点,经过性能测试,LADPX.500㕛更少的响应时间;LADP提供了满足应用程序对目录服务所需求的特性。

LDAP(全称“Weight Diretory Access Protocol”)目录服务介绍

1>.LDAP基本概念中常用名词缩写及含义

  LDAP通过定义schema模型来描述一个对象,模型中有一些重要的概念,也就是一系列常用名词缩写,如下图所示:

2>.安装LDAP(安装测试的LDAP服务需要你的集群安装knox网关服务)

  Knox网关自带了一个用于测试LDAP服务,并定义好了一些用户,同时它所有的认证配置都默认指向这个测试的LADP。所以为了方便演示这里就直接使用这个测试的LDAP服务了。

  2.1>.启动LDAP:

    登陆Knox网关所在的服务器,进入安装目录并执行启动脚本。

  1. [root@node101 ~]# hostname
  2. node101.yinzhengjie.org.cn
  3. [root@node101 ~]#
  4. [root@node101 ~]# cd /usr/hdp/current/knox-server/bin/
  5. [root@node101 bin]#
  6. [root@node101 bin]# ll
  7. total
  8. -rwxr-xr-x root root Oct gateway
  9. -rw-r--r-- root root Oct gateway.cmd
  10. -rw-r--r-- root root Oct gateway.jar
  11. -rwxr-xr-x root root Oct gateway.sh
  12. -rw-r--r-- root root Oct gateway.xml
  13. -rw-r--r-- root root Oct knoxcli.cmd
  14. -rw-r--r-- root root Oct knoxcli.jar
  15. -rwxr-xr-x root root Oct knoxcli.sh
  16. -rwxr-xr-x root root Oct knox-env.sh
  17. -rw-r--r-- root root Oct ldap.cmd
  18. -rw-r--r-- root root Oct ldap.jar
  19. -rwxr-xr-x root root Oct ldap.sh
  20. -rw-r--r-- root root Oct ldap.xml
  21. -rw-r--r-- root root Oct shell.jar
  22. [root@node101 bin]#
  23. [root@node101 bin]# ./ldap.sh start
  24. Starting LDAP succeeded with PID .
  25. [root@node101 bin]#
  26. [root@node101 bin]# jps | grep ldap
  27. ldap.jar
  28. [root@node101 bin]#

  2.2>.登陆验证

    LDAP测试服务预置的用户信息有两种途径查看,一种是登陆Knox网关所在的服务器查看配置文件,配置文件地址是“/etc/knox/conf/users.ldif”,另一种是通过Ambari的配置管理查看,如下图所示:

  现在我们使用客户端工具链接到LDAP测试一下服务是否正确启动。市面上有很多免费到LADP客户端工具可以选择,这里推荐使用jxplorer。jxplorer是一款开源的LADP客户端工具,大家根据自己操作系统下载对应 的版本即可,下载地址为:http://jxplorer.org/downloads/users.html。注意,安装jxplorer时,需要安装jdk环境哟:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html。   

  安装jxplorer的过程很简单,我这里就不截图如何安装了。安装成功后打开jxplorer输入登陆信息,如下图所示,几个比较重要的信息如下:

    主机:node101.yinzhengjie.org.cn(这里也可以直接输入IP地址,根据的你环境输入相应的主机名称即可)

    端口:33389(这个端口可以在ldap服务端使用netstat名称查看)

    协定:LDAP v3

    基底DN:dc=hadoop,dc=apache,dc=org

    层次:用户 + 密码

    使用者DN:uid=admin,ou=people,dc=hadoop,dc=apache,dc=org

    密码:admin-password

    使用模板:点击存储自定义一个名称即可,下次可以直接选中这个模板链接对应的目录结构。

  登陆之后我们会看到LDAP里面已经预置了一些组和用户的数据了,如下图所示:

四.验证Knox网关

  由于使用了Knox网关自带的LDAP服务 ,所以我们无须更改它的配置便可以直接使用。作为代理网关,Knox将所有支持代理的RESTful服务和页面进行了一层地址映射。现在我们来测试一下YARN的RESTful服务,打开浏览器输入:“https://node101.yinzhengjie.org.cn:8443/gateway/default/resourcemanager/v1/cluster/apps”。这是YARN查看任务集群的RESTful服务接口。如下图所示,Knox网关需要进行登陆认证。

  输入用户名和密码进行认证登陆,认证通过之后我们如愿访问到数据了,如下图所示:

  接下来我们尝试访问YARN的Web UI控制台,Knox网关的默认配置中只代理了RESful接口,所以我们需要修改它的配置文件,添加想要代理的Web UI控制台。打开Ambari找到Knox网关的配置页面,选择Advanced topology配置项,在末尾添加YARN UI的配置,保存后需要重启Knox网关服务。

  1. <topology>
  2.  
  3. <gateway>
  4.  
  5. <provider>
  6. <role>authentication</role>
  7. <name>ShiroProvider</name>
  8. <enabled>true</enabled>
  9. <param>
  10. <name>sessionTimeout</name>
  11. <value>30</value>
  12. </param>
  13. <param>
  14. <name>main.ldapRealm</name>
  15. <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm</value>
  16. </param>
  17. <param>
  18. <name>main.ldapRealm.userDnTemplate</name>
  19. <value>uid={0},ou=people,dc=hadoop,dc=apache,dc=org</value>
  20. </param>
  21. <param>
  22. <name>main.ldapRealm.contextFactory.url</name>
  23. <value>ldap://{{knox_host_name}}:33389</value>
  24. </param>
  25. <param>
  26. <name>main.ldapRealm.contextFactory.authenticationMechanism</name>
  27. <value>simple</value>
  28. </param>
  29. <param>
  30. <name>urls./**</name>
  31. <value>authcBasic</value>
  32. </param>
  33. </provider>
  34.  
  35. <provider>
  36. <role>identity-assertion</role>
  37. <name>Default</name>
  38. <enabled>true</enabled>
  39. </provider>
  40.  
  41. <provider>
  42. <role>authorization</role>
  43. <name>AclsAuthz</name>
  44. <enabled>true</enabled>
  45. </provider>
  46.  
  47. </gateway>
  48.  
  49. <service>
  50. <role>NAMENODE</role>
  51. <url>hdfs://{{namenode_host}}:{{namenode_rpc_port}}</url>
  52. </service>
  53.  
  54. <service>
  55. <role>JOBTRACKER</role>
  56. <url>rpc://{{rm_host}}:{{jt_rpc_port}}</url>
  57. </service>
  58.  
  59. <service>
  60. <role>WEBHDFS</role>
  61. {{webhdfs_service_urls}}
  62. </service>
  63.  
  64. <service>
  65. <role>WEBHCAT</role>
  66. <url>http://{{webhcat_server_host}}:{{templeton_port}}/templeton</url>
  67. </service>
  68.  
  69. <service>
  70. <role>OOZIE</role>
  71. <url>http://{{oozie_server_host}}:{{oozie_server_port}}/oozie</url>
  72. </service>
  73.  
  74. <service>
  75. <role>WEBHBASE</role>
  76. <url>http://{{hbase_master_host}}:{{hbase_master_port}}</url>
  77. </service>
  78.  
  79. <service>
  80. <role>HIVE</role>
  81. <url>http://{{hive_server_host}}:{{hive_http_port}}/{{hive_http_path}}</url>
  82. </service>
  83.  
  84. <service>
  85. <role>RESOURCEMANAGER</role>
  86. <url>http://{{rm_host}}:{{rm_port}}/ws</url>
  87. </service>
  88.  
  89. <service>
  90. <role>YARNUI</role>
  91. <url>http://{{rm_host}}:{{rm_port}}</url>
  92. </service>
  93.  
  94. <service>
  95. <role>DRUID-COORDINATOR-UI</role>
  96. {{druid_coordinator_urls}}
  97. </service>
  98.  
  99. <service>
  100. <role>DRUID-COORDINATOR</role>
  101. {{druid_coordinator_urls}}
  102. </service>
  103.  
  104. <service>
  105. <role>DRUID-OVERLORD-UI</role>
  106. {{druid_overlord_urls}}
  107. </service>
  108.  
  109. <service>
  110. <role>DRUID-OVERLORD</role>
  111. {{druid_overlord_urls}}
  112. </service>
  113.  
  114. <service>
  115. <role>DRUID-ROUTER</role>
  116. {{druid_router_urls}}
  117. </service>
  118.  
  119. <service>
  120. <role>DRUID-BROKER</role>
  121. {{druid_broker_urls}}
  122. </service>
  123.  
  124. <service>
  125. <role>ZEPPELINUI</role>
  126. {{zeppelin_ui_urls}}
  127. </service>
  128.  
  129. <service>
  130. <role>ZEPPELINWS</role>
  131. {{zeppelin_ws_urls}}
  132. </service>
  133.  
  134. </topology>

Advanced topology                 #点我查看完整的配置信息

  通过以上配置的修改并重启了Knox服务之后,现在我们再次打开浏览器输入:“https://node101.yinzhengjie.org.cn:8443/gateway/default/yarn”,就能看到YARN的Web UI管理控制台了,如下图所示:

  我们还可以继续修改Knox网关的配置加入更多的Web UI映射配置,例如,HDFS Namenode UI,Hbase UI,Spark UI。

  1. <service>
  2. <role>HDFSUI</role>
  3. <url>http://node101.yinzhengjie.org.cn:50070/webhdfs</url>
  4. </service>

HDFS Namenode UI

  1. <service>
  2. <role>HBASEUI</role>
  3. <url>http://node101.yinzhengjie.org.cn:16010/</url>
  4. </service>

HBase UI

  1. <service>
  2. <role>SPARKHISTORYUI</role>
  3. <url>http://node101.yinzhengjie.org.cn:8080/</url>
  4. </service>

Spark UI

Hadoop生态圈-Knox网关的应用案例的更多相关文章

  1. Hadoop生态圈-CDH与HUE使用案例

    Hadoop生态圈-CDH与HUE使用案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.HUE的介绍 1>.HUE的由来 HUE全称是HadoopUser Experi ...

  2. Hadoop生态圈-构建企业级平台安全方案

    Hadoop生态圈-构建企业级平台安全方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 能看到这篇文章的小伙伴,估计你对大数据集群的部署对于你来说应该是手到擒来了吧.我之前分享过 ...

  3. hadoop生态圈介绍

    原文地址:大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍   1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用户可以在不了解分 ...

  4. 大数据技术Hadoop入门理论系列之一----hadoop生态圈介绍

    Technorati 标记: hadoop,生态圈,ecosystem,yarn,spark,入门 1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用 ...

  5. 【】Hadoop生态圈介绍

    Technorati 标记: hadoop,生态圈,ecosystem,yarn,spark,入门 1. hadoop 生态概况 Hadoop是一个由Apache基金会所开发的分布式系统基础架构. 用 ...

  6. Hortworks Hadoop生态圈简介

    Hortworks 作为Apache Hadoop2.0社区的开拓者,构建了一套自己的Hadoop生态圈,包括存储数据的HDFS,资源管理框架YARN,计算模型MAPREDUCE.TEZ等,服务于数据 ...

  7. Hadoop生态圈-单点登录框架之CAS(Central Authentication Service)部署

    Hadoop生态圈-单点登录框架之CAS(Central Authentication Service)部署 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.CAS简介 CAS( ...

  8. Hadoop生态圈-使用FreeIPA安装Kerberos和LDAP

    Hadoop生态圈-使用FreeIPA安装Kerberos和LDAP 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有些大数据平台只是简单地通过防火墙来解决他们的网络安全问题.十分 ...

  9. Hadoop生态圈-Ambari控制台功能简介

    Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...

随机推荐

  1. js判断一个元素是否在数组中

    js判断一个元素是否在数组中 var arr = ['a','s','d','f']; console.info(isInArray(arr,'a'));//循环的方式 function isInAr ...

  2. Paths on a Grid POJ - 1942 组合数学 (组合数的快速计算)

    题意:格路问题 没什么难度 难点在于如何快速计算相对较大的组合数 思路:运用手写计算组合数的方式进行计算  如c(8,3) 如果手算就是   8*7*6/(3*2*1)这样可以很快得解出 计算代码为: ...

  3. 洛谷3703 [SDOI2017] 树点染色 【LCT】【线段树】

    题目分析: 操作一很明显等价于LCT上的access操作,操作二是常识,操作三转化到dfs序上求最大值也是常识.access的时候顺便在线段树中把对应部分-1,把右子树的子树+1即可. 代码: #in ...

  4. Git神器使用相关

    感谢 感谢作者的网站,本文所有的知识可以在上述网站了解到,讲的非常详细,感谢.(https://www.liaoxuefeng.com/wiki/0013739516305929606dd183612 ...

  5. Tomcat控制台总是打印日志问题的解决办法

    问题 使用gradle启动项目,在tomcat控制台中不停地打印perf4j性能日志,导致开发过程很卡很慢.明明修改了logback.xml配置文件,让它输出到log文件中,而不是控制台,但是不起作用 ...

  6. SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

    SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划 ...

  7. [NOI2005]聪聪与可可(期望dp)

    题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间. Solutionluogu ...

  8. centos7搭建ELK Cluster集群日志分析平台(二):Logstash

    续  centos7搭建ELK Cluster集群日志分析平台(一) 已经安装完Elasticsearch 5.4 集群. 安装Logstash步骤 . 安装Java 8 官方说明:需要安装Java ...

  9. 牛客寒假算法基础集训营3B 处女座的比赛资格(用拓扑排序解决DAG中的最短路)

    链接:https://ac.nowcoder.com/acm/contest/329/B 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言5242 ...

  10. 从Java的角度修复CSRF漏洞

    漏洞挖掘中,说实话挖过最多的漏洞就属CSRF漏洞了,提交CSRF漏洞很多次,绕过CSRF防御进行攻击也有很多次.CSRF漏洞是一个很容易引发的问题,今天我从Java的角度来说下这个安全漏洞的修复方案. ...