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

               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基于头的PROAUTHKerberosSAMLOAUTH都是可用的选项。


    客户服务:可以通过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.什么是目录服务
目录是一类为了浏览和搜索数据二十几的特殊的数据库,例如:最知名的的微软公司的活动目录(active directory)就是目录数据库的一种。目录服务时按照梳妆形式存储信息的,目录包含基于属性的描述性信息,并且支持高级的过滤功能。
一般来说,目录不支持大多数事务性数据库所支持的高吞吐两盒复杂的更新操作。目录进行更新操作,可以说是要么全部,要么都不的原子操作,目录服务适合的业务应用在于提供大量的查询和搜索操作。
为了保证目录数据的可用性和卡可靠性,她们在确保提供快速的查询和搜索操作的同事,还提供了主从服务器同步目录数据信息的能力,这相当于传统的Mysql数据库的主从同步一样,可以最大限度的确保基于目录业务的持续可用性。
广义的目录服务概念,可以有多重不同的方式来提供目录服务,不同的目录所允许存储的信息是不同的,在信息如何被引用,查询,更新以及防止未经守群的访问等问题上,不同的目录所允许存储的信息是不同的,在信息如何被引用,查询,更新以及防止未经授权的访问等问题上,不同的目录的处理方式也有诸多的不同。一些目录服务时为本地的,只提供受限的服务,(比如,单机上的finger服务)。另一些服务时大范围的(global),提供广阔得多的服务(比如面向整个因特网)。大范围的服务通常是分布式的,这也就意味着数据是分布在多台机器上的,这些计数器一起来提供目录服务。典型的大范围服务定义一个统一的名称空间(namespace)来给出一个相同的数据试图(data view),而不管你相对于数据所在的位置。DNS是一个典型的大范围分布式目录服务的例子。

2.什么是ldap
LDAP是Lightweight Directory Access Protocol (轻量级目录访问协议)的缩写。正如它的名字所表明的那样,它是一个轻量级的目录访问协议,特质基于X.500的目录访问协议的简化版本。LADP运行在TCP/IP或者其他的面向连接的传输服务至上。LADP完整的技术规范由RFC2251 “The Lightweight Directory Access Protocol(V3)”和其他几个在RFC3377中定义的文档组成。我们不需要研究的那么深,因为我们又不会对它进行二次开发,我们运维只要能了解到它的目录结构,以及它的用法就OK了,因此我们可以用两句话总结以上内容:
a>.LADP是轻量目录访问协议(Lightweight Directory Access Protocal)的缩写;
b>.LADP标准实际上是在X.500标准基础 上产生的一个简化版本;

3.什么是X.500
X.500由ITU-T和ISO定义,它实际上不是一个协议,而是有一个协议族组成,包括了从X.501到X.525等一系列非常完整的目录服务协议。X。500主要具备以下特征:
a>.分散维护
运行X.500的每一个站点只负责人本地目录部分,可以立即更新和维护操作;
b>.搜索性能
X.500具有强大的搜素功能,支持用户建立的任意复杂查询。
c>.单一全局命名空间
类似于DNS,X.500为用户提供单一同性命名空间(Single Homogeneous Namespace)。与DNS相比,X。500目录中定义了信息结构,运行本地扩展。
d>.结构化信息结构
X.500目录中定义了信息结构,运行本地扩展。
e>.基于标准的目录服务
由于X.500可以被用于建立一个基于标准的目录,因此在某种意义上,请求应用目录信息(电子邮件,资源自动分配器,特定目录工具)的应用程序就能访问重要且有简直的信息。
从技术上来说,LADP是一个到X.500目录服务的目录访问协议,X.500是一个OSI目录协议。最初,LADP客户单通过网关(gateway)访问X.500目录服务。在客户和网关之间运行LADP和X.500目录访问协议(Directory Access Protocol,DAP),而X.500目录访问协议时位于网关和X.500之间的。DAP是一个重量级的协议,在整个OSI协议栈上进行操作,而且需要占用大量的计算资源。LADP被设计的在TCP/IP层上操作,以小得多的代价实现了大多数DAP的功能。
虽然LADP仍旧可以通过网关访问X.500目录服务器,但是现在通常都是在X.500服务器上直接实现LADP。
单独的LADP守护程序sladp,可以被看做是一个轻量级的X.500目录服务器。也就是说,他没有实现X.500完整的DAP协议。作为一个轻量级的目录服务器,sladp实现的仅仅是X.500模型的一个子集。我们可以理解是LADP是X.500的一个简单的实现。

4.LADP与X.500的相同点
LADP是X.500标准中的目录访问协议DAP的一个子集,可用于建立X.500目录。因此这两个目录技术标准有着许多的共同之处:
a>.在平台上,都实现了一个通用的平台结构,提供了一个操作系统和应用程序需要的信息服务类型,可以被许多平台和应用程序接收和实现;
b>.在信息模型上,都是用了项,对象类,属性等概念的模式来描述信息;
c>.在命名空间上方面,都是用了目录信息结构和层次命名模型;
d>.在功能模型上,都使用了相似的操作命令来管理目录信息;
e>.在认证框架方面,都可以实现用户名称和密码,或者基于安全加密方式的认真机制;
f>.早灵活性上,他们的目录规模都可大可小,达到全球目录树,小到只有一台目录服务器;
g>.在分布性方面,目录信息都可以分布在多个目录服务器中,这些服务器可以由各个组织管理,既保证了目录信息总体结构的一致性,又满足了分级管理的需要。

5.LADP与X.500的差别
a>.LADP基于Internet协议,X.500基于OSI(开放式系统互联)协议,建立在应用层上的X.500目录访问协议DAP,需要在OSI会话层和表示层上进行许多的建立连接和包处理的任务,需要特殊的网络软件实现对网络的访问;LADP则直接运行在更简单和更通用的TCP/IP或其他可靠的传输层协议上,避免了在OSI会话和表示层的开销,是链接的建立和包的处理更简单,更快,对于互联网和企业网应用更理性。
b>.LADP协议更为简单,LADP继承了X.500最好的特性,同时去掉了它的复杂性,LADP通过使用查找操作实现列表方式和读操作,另一方面省去了X.500中神猫的和很少使用的服务控制和安全特性,只保留常用的特性,简化了LADP的实现。
c>.LADP通过引用机制实现分布式访问,X.500 DSA通过服务器之间的链操作实现分布式的访问,这样查询的压力九中与服务器端;而LADP通过客户端API实现分布式操作(对于应用透明)平衡了负载;
d>.LADP实现具有低费用,已配置和一管理的特点,经过性能测试,LADP比X.500㕛更少的响应时间;LADP提供了满足应用程序对目录服务所需求的特性。
LDAP(全称“Weight Diretory Access Protocol”)目录服务介绍 

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

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

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

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

   2.1>.启动LDAP:

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

[root@node101 ~]# hostname
node101.yinzhengjie.org.cn
[root@node101 ~]# 
[root@node101 ~]# cd /usr/hdp/current/knox-server/bin/
[root@node101 bin]# 
[root@node101 bin]# ll
total 144
-rwxr-xr-x 1 root root    45 Oct 30  2017 gateway
-rw-r--r-- 1 root root  1472 Oct 30  2017 gateway.cmd
-rw-r--r-- 1 root root 23626 Oct 30  2017 gateway.jar
-rwxr-xr-x 1 root root  6840 Oct 30  2017 gateway.sh
-rw-r--r-- 1 root root  1024 Oct 30  2017 gateway.xml
-rw-r--r-- 1 root root  1206 Oct 30  2017 knoxcli.cmd
-rw-r--r-- 1 root root 23594 Oct 30  2017 knoxcli.jar
-rwxr-xr-x 1 root root  1769 Oct 30  2017 knoxcli.sh
-rwxr-xr-x 1 root root  1907 Oct 30  2017 knox-env.sh
-rw-r--r-- 1 root root  1649 Oct 30  2017 ldap.cmd
-rw-r--r-- 1 root root 23658 Oct 30  2017 ldap.jar
-rwxr-xr-x 1 root root  6354 Oct 30  2017 ldap.sh
-rw-r--r-- 1 root root  1059 Oct 30  2017 ldap.xml
-rw-r--r-- 1 root root 23623 Oct 30  2017 shell.jar
[root@node101 bin]# 
[root@node101 bin]# ./ldap.sh  start
Starting LDAP succeeded with PID 5642.
[root@node101 bin]# 
[root@node101 bin]# jps | grep ldap
5642 ldap.jar
[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网关服务。

        <topology>

            <gateway>

                <provider>
                    <role>authentication</role>
                    <name>ShiroProvider</name>
                    <enabled>true</enabled>
                    <param>
                        <name>sessionTimeout</name>
                        <value>30</value>
                    </param>
                    <param>
                        <name>main.ldapRealm</name>
                        <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapRealm</value>
                    </param>
                    <param>
                        <name>main.ldapRealm.userDnTemplate</name>
                        <value>uid={0},ou=people,dc=hadoop,dc=apache,dc=org</value>
                    </param>
                    <param>
                        <name>main.ldapRealm.contextFactory.url</name>
                        <value>ldap://{{knox_host_name}}:33389</value>
                    </param>
                    <param>
                        <name>main.ldapRealm.contextFactory.authenticationMechanism</name>
                        <value>simple</value>
                    </param>
                    <param>
                        <name>urls./**</name>
                        <value>authcBasic</value>
                    </param>
                </provider>

                <provider>
                    <role>identity-assertion</role>
                    <name>Default</name>
                    <enabled>true</enabled>
                </provider>

                <provider>
                    <role>authorization</role>
                    <name>AclsAuthz</name>
                    <enabled>true</enabled>
                </provider>

            </gateway>

            <service>
                <role>NAMENODE</role>
                <url>hdfs://{{namenode_host}}:{{namenode_rpc_port}}</url>
            </service>

            <service>
                <role>JOBTRACKER</role>
                <url>rpc://{{rm_host}}:{{jt_rpc_port}}</url>
            </service>

            <service>
                <role>WEBHDFS</role>
                {{webhdfs_service_urls}}
            </service>

            <service>
                <role>WEBHCAT</role>
                <url>http://{{webhcat_server_host}}:{{templeton_port}}/templeton</url>
            </service>

            <service>
                <role>OOZIE</role>
                <url>http://{{oozie_server_host}}:{{oozie_server_port}}/oozie</url>
            </service>

            <service>
                <role>WEBHBASE</role>
                <url>http://{{hbase_master_host}}:{{hbase_master_port}}</url>
            </service>

            <service>
                <role>HIVE</role>
                <url>http://{{hive_server_host}}:{{hive_http_port}}/{{hive_http_path}}</url>
            </service>

            <service>
                <role>RESOURCEMANAGER</role>
                <url>http://{{rm_host}}:{{rm_port}}/ws</url>
            </service>

         <service>
                <role>YARNUI</role>
                <url>http://{{rm_host}}:{{rm_port}}</url>
            </service>


            <service>
                <role>DRUID-COORDINATOR-UI</role>
                {{druid_coordinator_urls}}
            </service>

            <service>
                <role>DRUID-COORDINATOR</role>
                {{druid_coordinator_urls}}
            </service>

            <service>
                <role>DRUID-OVERLORD-UI</role>
                {{druid_overlord_urls}}
            </service>

            <service>
                <role>DRUID-OVERLORD</role>
                {{druid_overlord_urls}}
            </service>

            <service>
                <role>DRUID-ROUTER</role>
                {{druid_router_urls}}
            </service>

            <service>
                <role>DRUID-BROKER</role>
                {{druid_broker_urls}}
            </service>

            <service>
                <role>ZEPPELINUI</role>
                {{zeppelin_ui_urls}}
            </service>

            <service>
                <role>ZEPPELINWS</role>
                {{zeppelin_ws_urls}}
            </service>

        </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。

          <service>
                <role>HDFSUI</role>
                <url>http://node101.yinzhengjie.org.cn:50070/webhdfs</url>
            </service>
HDFS Namenode UI
          <service>
                <role>HBASEUI</role>
                <url>http://node101.yinzhengjie.org.cn:16010/</url>
            </service>
HBase UI
         <service>
                <role>SPARKHISTORYUI</role>
                <url>http://node101.yinzhengjie.org.cn:8080/</url>
            </service>
Spark UI

 

原文地址:https://www.cnblogs.com/yinzhengjie/p/10096385.html