本文针对knox_1.0.0进行总结,过程中可能会穿插其他版本的异同
一、环境准备
二、解压安装

cd knox-1.0.0查看目录如下

三、knox文件目录解析
3.1 conf/
- gateway-site.xml
重要参数如下
| param | description | default |
|---|---|---|
| gateway.port | knox默认端口 | 8443 |
| gateway.path | 默认url中的路径 | gateway |
| gateway.hadoop.kerberos.secured | 集群是否开启kerberos | false |
| java.security.krb5.conf | krb5.conf的完整路径 | /etc/knox/conf/krb5.conf |
| java.security.auth.login.config | JAAS登陆配置的完整路径 | /etc/knox/conf/krb5JAASLogin.conf |
- topologies 放置所有的网络拓扑xml文件,用于部署集群代理
如下

登陆的配置
admin.xml
knoxsso.xml这里可以了解到,只要是个web应用,都可以拿knox来代理,起作用与nginx如出一辙,都是反向代理的思想
如果需要对自己的hadoop集群进行topology部署,则touch一个{cluster_name}.xml文件,参考沙箱进行配置
- users.ldif
里面是knox自带的一个Ldap demo,默认knox的登陆就是依据这个文件中的ldap用户密码等信息进行登陆的
这里的用户名密码都是如下格式
{user}
{user-password}
如admin/admin-password
3.2 data/
- persisted master secret在磁盘持久化的密码
- keystore秘钥库
- services Hadoop组件服务的rewrite、service配置文件(配置页面资源跳转)
- 每一个集群对应的topology中xml会在deployment目录下生成发布包
下来依次说下
- persisted master secret在磁盘持久化的密码
在启动knox前必须先执行一个脚本{GATEWAY_HOME}/bin/knoxcli.sh create-master,需要在磁盘生成一个持久化的master secret,这个密码保存在{GATEWAY_HOME}/data/security/master文件中(加密形式)
- keystore秘钥库
在{GATEWAY_HOME}/data/security/keystores包含了knox的身份秘钥
gateway.jks文件以及每个部署的集群拓扑对应的证书存储,如下

- services Hadoop组件服务的rewrite配置文件(配置页面资源跳转)
在{GATEWAY_HOME}/data/services中有着各个大数据组件UI服务

拿yarnui来说
cd yarnui

首先就是对应的版本,版本下对应2个文件

rewrite.xml内容如下

基本是一些资源的重定向,用一些正则表示哪一类资源的访问都用knox的gateway来代理
service.xml文件如下

可以看出,service.xml中配置的是yarn组件服务的路由分发
每一类服务都有一个rewrite标签,这个标签指向rewrite.xml中的规则从而实现服务请求到资源的代理
其他组件服务跟yarn一样的道理,可能有些版本不止一个
这里面的路由转发语法比较晦涩难懂,具体可以参考维基
https://cwiki.apache.org/confluence/display/KNOX/2017/08/14/Understanding+Rewrite+Rules+for+Apache+Knox - 每一个集群对应的topology中xml会在deployment目录下生成发布包
在{GATEWAY_HOME}/data/deployments目录下有如下文件,都是各个集群的发布包

这里在前台用gateway第一次访问组件ui时,就会在此目录下生成{GATEWAY_HOME}/conf/topologies/{cluster_name}.xml文件对应的发布包
需要注意下,因为rewrite.xml与service.xml问题可能会有很多(比如说跳转时界面资源刷不出来,报错404等其他问题),你就需要修改rewrite.xml或者service.xml。修改完xml后想要生效,需要在这里将{GATEWAY_HOME}/data/deployments下对应集群的发布包删除
rm -rf {cluster_name}*
然后再重启knox即可生效
四、配置{cluster_name}.xml
<?xml version="1.0" encoding="utf-8"?> <!--==============================================--> <!-- DO NOT EDIT. This is an auto-generated file. --> <!--==============================================--> <topology> <generated>true</generated> <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.ldapContextFactory</name> <value>org.apache.hadoop.gateway.shirorealm.KnoxLdapContextFactory</value> </param> <param> <name>main.ldapRealm.contextFactory</name> <value>$ldapContextFactory</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://localhost:33389</value> </param> <param> <name>main.ldapRealm.contextFactory.authenticationMechanism</name> <value>simple</value> </param> <param> <name>urls./</name> <value>authcBasic</value> </param> </provider> </gateway> <service> <role>HBASEUI</role> <url>http://ocdp52:16010</url> </service> <service> <role>JOBHISTORYUI</role> <url>http://ocdp52:19888</url> </service> <service> <role>JOBTRACKER</role> <url>http://ocdp52:19888</url> </service> <service> <role>RANGER</role> <url>http://ocdp52:6080</url> </service> <service> <role>RANGERUI</role> <url>http://ocdp52:6080</url> </service> <service> <role>RESOURCEMANAGER</role> <url>http://ocdp52:8088/ws</url> </service> <service> <role>YARNUI</role> <url>http://ocdp52:8088</url> </service> <service> <role>HDFSUI</role> <url>http://ocdp52:50070</url> </service> <service> <role>AMBARIUI</role> <url>http://ocdp52:8080</url> </service> <service> <role>AMBARI</role> <url>http://ocdp52:8080</url> </service> <service> <role>AMBARIWS</role> <url>ws://ocdp52:8080</url> </service> </topology> HBase UI跳转
需要的配置如下
<service> <role>HBASEUI</role> <url>http://ocdp52:16010</url> </service>
4.1 HDFS UI跳转
<service> <role>HDFSUI</role> <url>http://ocdp52:50070</url> </service>
4.2 Yarn UI 跳转
<service> <role>YARNUI</role> <url>http://ocdp52:8088</url> </service> <service> <role>RESOURCEMANAGER</role> <url>http://ocdp52:8088/ws</url> </service> <service> <role>JOBHISTORYUI</role> <url>http://ocdp52:19888</url> </service> <service> <role>JOBTRACKER</role> <url>http://ocdp52:19888</url> </service>
4.3 Ranger UI跳转
<service> <role>RANGER</role> <url>http://ocdp52:6080</url> </service> <service> <role>RANGERUI</role> <url>http://ocdp52:6080</url> </service>
4.4 Ambari UI 跳转
<service> <role>AMBARIUI</role> <url>http://ocdp52:8080</url> </service> <service> <role>AMBARI</role> <url>http://ocdp52:8080</url> </service> <service> <role>AMBARIWS</role> <url>ws://ocdp52:8080</url> </service>
其余组件UI请浏览官网配置
注意:
每次对{cluster_name}.xml文件修改后无需重启knox,他这个是热部署,会自动生效
五、启动gateway
su ocdp cd ${knox}/ ./bin/knoxcli.sh create-master
接着操作
./bin/gateway.sh start ./bin/ldap.sh start

gateway启动端口在gateway-site.xml中设置过了,默认8443
ldap用的是knox内嵌默认的ldap Demo服务,端口33389,不执行ldap.sh start就会访问组件UI报错
六、浏览器通过Knox访问组件UI
https://localhost:8443/gateway/ocdp/ranger https://localhost:8443/gateway/ocdp/hdfs https://localhost:8443/gateway/ocdp/yarn https://localhost:8443/gateway/ocdp/hbase/webui https://localhost:8443/gateway/ocdp/ambari
代理成功
七、knox代理组件UI报错
7.1 knox版本为1.0.0.3、1.3
这些高版本knox访问HDFS UI、HBASE UI报错500。压根访问不了,报错我至今未解决,不过确定是证书问题
7.2 knox版本为0.12
7.3 Apache Knox报错整理
后续会持续补充,有问题可以私信我沟通
八、nginx->knox->Hadoop组件 UI
部署nginx链接如下
九、还需研究方向
一个月的knox之旅到此结束了,但是knox很多其他的东西还处于调研阶段,比如下面几点
9.1 KNOXSSO配置
9.2 HA配置
9.3 kerberos配置
后续有时间再继续研究
一键三连(〃‘▽’〃)
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199628.html原文链接:https://javaforall.net
