本文针对knox_1.0.0进行总结,过程中可能会穿插其他版本的异同
运行环境:Java1.8
支持Hadoop 3.x
下载knox1.0.0
https://cwiki.apache.org/confluence/display/KNOX/Apache+Knox+Releases
这个官网链接有全版本的资源
这里主要对conf/与data/等重要的配置文件进行介绍下
logs/,bin/,会在启动knox时说明下
解压后的knox-1.0.0为{GATEWAY_HOME}目录,启动前要先依据自己的Hadoop集群情况进行配置。
主要在{GATEWAY_HOME}/conf目录下进行配置
包含适用于gateway全局的配置
tree结构,如下
这里说几个比较重要的配置文件
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 |
更多配置查看官网
http://knox.apache.org/books/knox-1-0-0/user-guide.html#Quick+Start
topologies 放置所有的网络拓扑xml文件,用于部署集群代理
如下
登陆的配置
admin.xml
knoxsso.xml
knox 前台webUI界面
manager.xml
沙箱测试案例
sandbox。xml
这里可以了解到,只要是个web应用,都可以拿knox来代理,起作用与nginx如出一辙,都是反向代理的思想
如果需要对自己的hadoop集群进行topology部署,则touch一个{cluster_name}.xml文件,参考沙箱进行配置
users.ldif
里面是knox自带的一个Ldap demo,默认knox的登陆就是依据这个文件中的ldap用户密码等信息进行登陆的
这里的用户名密码都是如下格式
{user}
{user-password}
如admin/admin-password
包含安全与特定拓扑结构构件,在运行时需要读/写访问
此目录包含的东西比较多
总结如下
下来依次说下
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即可生效
<?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>
需要的配置如下
<service>
<role>HBASEUI</role>
<url>http://ocdp52:16010</url>
</service>
<service>
<role>HDFSUI</role>
<url>http://ocdp52:50070</url>
</service>
<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>
<service>
<role>RANGER</role>
<url>http://ocdp52:6080</url>
</service>
<service>
<role>RANGERUI</role>
<url>http://ocdp52:6080</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>
其余组件UI请浏览官网配置
注意:
每次对{cluster_name}.xml文件修改后无需重启knox,他这个是热部署,会自动生效
knox启动不能用root用户操作,需要将{GATEWAY_HOME}也就是knox-1.0.0文件夹赋予另外的用户权限,如ocdp
然后执行如下操作
su ocdp
cd ${knox}/
./bin/knoxcli.sh create-master
执行结果如下
上图中–force 是因为之前创建过了,强制执行覆盖的,密码设置为ocdp123
接着操作
./bin/gateway.sh start
./bin/ldap.sh start
gateway启动端口在gateway-site.xml中设置过了,默认8443
ldap用的是knox内嵌默认的ldap Demo服务,端口33389,不执行ldap.sh start
就会访问组件UI报错
至此,knox部署完成,可根据如下url访问组件UI界面
https://{gateway_ip}:8443/gateway/{cluster_name}/{hadoop_UI}
Ex:
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
拿yarnUI来说
https://ocdp52:8443/gateway/ocdp/yarn
点击高级
点击继续前往链接(不安全)
会弹出一个输入账号密码输入框
这里的账号密码就是knox自带的ldap用户账号密码,上面有说过
输入admin/admin-password
代理成功
但是Knox这个东西各个版本里的不同组件UI对应的rewrite.xml、service.xml文件比较复杂,会出现很多很多的问题,要么组件UI访问不进去,要么访问进去了组件UI内部界面跳转就会有问题,不过基本上都是因为rewrite.xml与service.xml文件的问题
我研究了一段时间后总结如下
我knox访问的集群是HDP平台下的各个组件服务
这些高版本knox访问HDFS UI、HBASE UI报错500。压根访问不了,报错我至今未解决,不过确定是证书问题
低版本可以访问所有的UI,但是内部跳转问题却层出不穷
yarn UI内部访问8042、log、node、appication问题有很多
hdfs UI 内部访问datanode地址就失效了。不再是gateway所代理的地址了
HBASE UI 最上面的Head一栏按钮大部分都访问不了
具体的报错我很多已经发了篇文章大致说了下链接如下
Apache Knox报错大全
后续会持续补充,有问题可以私信我沟通
knox毕竟能够代理的组件有限,所以我外层套了一个nginx服务
架构如下
部署nginx链接如下
Nginx安装部署操作梳理(三步走)
部署完后需要开启nginx 的SSL模式并生成证书,配置证书路径
文章链接如下
Nginx开启SSL总结
依据以上文档可以保证配通
一个月的knox之旅到此结束了,但是knox很多其他的东西还处于调研阶段,比如下面几点
后续有时间再继续研究