KNOX安装配置文档
参考文档:
https://blog.csdn.net/qq_37865420/article/details/105787160
https://cwiki.apache.org/confluence/display/KNOX/Apache+Knox+Releases
https://knox.apache.org/books/knox-1-4-0/user-guide.html
导读
Apache Knox是一个通过REST API和UI与Apache Hadoop 部署交互的应用网关。
Knox网关为所有与Hadoop集群的REST和HTTP交互提供了一个单独的访问点。
The Apache Knox Gateway redirects external requests to an internal service using service name and URL of the service definition.此话出处(https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.1.5/configuring-proxy-knox/content/configuring_a_hadoop_server_for_knox.html)
Knox提供三组面向用户的服务:
- 代理服务
Apache Knox项目的主要目标是通过代理HTTP资源提供对Apache Hadoop的访问。 - 身份认证服务
用于访问REST API者的身份认证服务身份验证以及用于UI的WebSSO流。LDAP/AD,基于头的PreAuth,Kerberos,SAML,OAuth都是可用选项。 - 客户端服务
客户端开发可以通过DSL编写脚本或使用Knox Shell类直接作为SDK完成。
1.解压安装
最新knox的版本是1.4.0版本,此次安装环境版本为1.4.0最新版本。
1.4.0版本下载地址:
https://cwiki.apache.org/confluence/display/KNOX/Apache+Knox+Releases
解压目录:
[knox@myhadoop knox]$ pwd
/home/knox/software/knox
[knox@myhadoop knox]$ ll
total 280
drwx------ 2 knox work 4096 Nov 26 17:46 bin
-rwx------ 1 knox work 133733 Nov 18 15:48 CHANGES
drwx------ 5 knox work 4096 Nov 30 10:02 conf
drwx------ 6 knox work 4096 Nov 30 14:24 data
drwx------ 2 knox work 28672 Nov 18 15:48 dep
drwx------ 3 knox work 4096 Nov 18 15:48 ext
-rwx------ 1 knox work 171 Nov 18 15:48 ISSUES
drwx------ 2 knox work 4096 Nov 18 15:48 lib
-rwx------ 1 knox work 73521 Nov 18 15:48 LICENSE
drwx------ 2 knox work 4096 Nov 30 03:54 logs
-rwx------ 1 knox work 165 Nov 18 15:48 NOTICE
drwx------ 2 knox work 4096 Nov 30 14:23 pids
-rwx------ 1 knox work 2743 Nov 18 15:48 README
drwx------ 3 knox work 4096 Nov 18 15:48 samples
drwx------ 2 knox work 4096 Nov 18 15:48 templates
[knox@myhadoop knox]$
2.Knox目录解读
2.1bin目录
[knox@myhadoop bin]$ ll
total 152
-rwx------ 1 knox work 350 Nov 18 15:48 gateway.cfg
-rwx------ 1 knox work 22399 Nov 18 15:48 gateway.jar
-rwx------ 1 knox work 4620 Nov 18 15:48 gateway.sh//启动gateway的脚本
-rwx------ 1 knox work 1024 Nov 18 15:48 gateway.xml
-rwx------ 1 knox work 341 Nov 18 15:48 knoxcli.cfg
-rwx------ 1 knox work 22360 Nov 18 15:48 knoxcli.jar
-rwx------ 1 knox work 1987 Nov 18 15:48 knoxcli.sh//内置的knox客户端脚本,一般用于密码、证书、别名、ldap服务、测试等
-rwx------ 1 knox work 5583 Nov 18 15:48 knox-env.sh
-rwx------ 1 knox work 8555 Nov 26 17:46 knox-functions.sh//一些预定的脚本函数,例如appStart等,在ldap.sh和gateway.sh加载使用
-rwx------ 1 knox work 336 Nov 18 15:48 ldap.cfg
-rwx------ 1 knox work 22429 Nov 18 15:48 ldap.jar
-rwx------ 1 knox work 2862 Nov 18 15:48 ldap.sh //启动ldap脚本,gateway的服务依赖于ldap服务,不启动会报错
-rwx------ 1 knox work 1059 Nov 18 15:48 ldap.xml
-rwx------ 1 knox work 22395 Nov 18 15:48 shell.jar
[knox@myhadoop bin]$
2.2conf目录
[knox@myhadoop conf]$ pwd
/home/knox/software/knox/conf
[knox@myhadoop conf]$ ll
total 48
drwx------ 2 knox work 4096 Nov 18 15:48 descriptors
-rwx------ 1 knox work 3877 Nov 25 11:52 gateway-log4j.properties//用于打印日志、可以设置日志级别
-rwx------ 1 knox work 5945 Nov 27 12:15 gateway-site.xml//gateway总配置,主要配置例如ldap服务url、网关的port、网关的名字(访问路径)、黑白名单等
-rwx------ 1 knox work 1481 Nov 18 15:48 knoxcli-log4j.properties
-rwx------ 1 knox work 1385 Nov 18 15:48 krb5.conf //kerberos客户端的配置,例如配置kerberos的服务器、日志路径等
-rwx------ 1 knox work 1493 Nov 18 15:48 ldap-log4j.properties //用于打印日志、可以设置日志级别
-rwx------ 1 knox work 91 Nov 18 15:48 README
drwx------ 2 knox work 4096 Nov 18 15:48 shared-providers
-rwx------ 1 knox work 1436 Nov 18 15:48 shell-log4j.properties
drwx------ 2 knox work 4096 Nov 27 16:18 topologies //这个很重要,主要用户配置服务,所有的服务,不管是hdfsui、yarnui、sparkui都从这里配置
-rwx------ 1 knox work 2987 Nov 18 15:48 users.ldif //内置的ldap的配置文件,在ldap服务启动的时候,会自动读取这个配置文件
2.3data目录
[knox@myhadoop knox]$ cd data/
[knox@myhadoop data]$ ll
total 24
drwx------ 5 knox work 4096 Nov 18 15:48 applications //定义了knox的主界面UI服务、认证服务等
drwxr-xr-x 9 knox work 4096 Nov 30 14:24 deployments //代理的服务会生成一个war包,存在这里,以便服务器访问使用,例如sandbox.topo.17607c162f8、tomcat.topo.175f5405378等
-rw-r--r-- 1 knox work 37 Nov 30 14:24 gatewayServer.status
-rwx------ 1 knox work 67 Nov 18 15:48 README
drwx------ 3 knox work 4096 Nov 18 15:48 security//gateway安全相关文件、knox会自动生成
drwx------ 59 knox work 4096 Nov 27 18:52 services//定义代理服务的地方,就是定义类似于hdfs、yarn、hbase等服务的转发规则
[knox@myhadoop data]$
2.4templates目录
-rwx------ 1 knox work 4973 Nov 18 15:48 ad.xml
-rwx------ 1 knox work 3414 Nov 18 15:48 apache-ds-dynamicgroup-schema.ldif
-rwx------ 1 knox work 8435 Nov 18 15:48 dynamicgroup.xml
-rwx------ 1 knox work 5049 Nov 18 15:48 hadas.xml
-rwx------ 1 knox work 4557 Nov 18 15:48 hada.xml
-rwx------ 1 knox work 7763 Nov 18 15:48 hs2-grouplookup-cache.xml
-rwx------ 1 knox work 1874 Nov 18 15:48 knox
-rwx------ 1 knox work 309 Nov 18 15:48 knox.service.keytab
-rwx------ 1 knox work 3590 Nov 18 15:48 knoxsso-sandbox.xml
-rwx------ 1 knox work 1336 Nov 18 15:48 krb5.conf
-rwx------ 1 knox work 1194 Nov 18 15:48 krb5JAASLogin.conf
-rwx------ 1 knox work 2629 Nov 18 15:48 pac4j-knoxsso.xml
模板文件,例如需要配置kerberos客户端配置模板等。
3.关键参数的配置,使服务能运行起来
3.1gateway-site.xml
此配置文件参数非常多,不必纠结细节,用的时候查一下官网手册,在这里只介绍介个非常关键的配置参数
3.1.1gateway.port
https://myhadoop:8443/gateway/sandbox/hbase/webui/master-status (此url对如下参数举例)
<property>
<name>gateway.port</name>
<value>8443</value>
<description>The HTTP port for the Gateway.</description>
</property>
这个port就是最终url访问网关的port,默认为8443
3.1.2gateway.path
https://myhadoop:8443/gateway/sandbox/hbase/webui/master-status (此url对如下参数举例)
<property>
<name>gateway.path</name>
<value>gateway</value>
<description>The default context path for the gateway.</description>
</property>
这个就是网关的路径,就是端口后面的那个gateway,最终会体现在这个配置里
3.1.3gateway.gateway.conf.dir
<property>
<name>gateway.gateway.conf.dir</name>
<value>deployments</value>
<description>The directory within GATEWAY_HOME that contains gateway topology files and deployments.</description>
</property>
这个就是最终各个服务部署的位置,例如hdfs的代理服务、tomcat的代理服务等,就是data目录下的deployments文件夹
3.1.4是否被kerberos集群保护
<property>
<name>gateway.hadoop.kerberos.secured</name>
<value>false</value>
<description>Boolean flag indicating whether the Hadoop cluster protected by Gateway is secured with Kerberos</description>
</property>
具体关于knox配置kerberos项需要看,还是挺难的
https://knox.apache.org/books/knox-1-4-0/user-guide.html#Secure+Clusters
3.1.5ldap服务
<property>
<name>gateway.group.config.hadoop.security.group.mapping.ldap.url</name>
<value>ldap://localhost:33389</value>
</property>
ldap的服务地址,默认本地。按照官网启动,会启动knox网关自带的ldap服务,所以,可以默认,如果公司有ldap服务,可以配置公司内部的ldap服务地址。
3.1.5gateway.dispatch.whitelist.services
<property>
<name>gateway.dispatch.whitelist.services</name>
<value>DATANODE,HBASEUI,HDFSUI,JOBHISTORYUI,NODEUI,YARNUI,knoxauth,TOMCAT</value>//服务是否对全局有效
<description>The comma-delimited list of service roles for which the gateway.dispatch.whitelist should be applied.</description>
</property>
3.1.6gateway.dispatch.whitelist
<property>
<name>gateway.dispatch.whitelist</name>//网关允许通过的url,这个很重要,如果不配,gateway可能无法转发外域服务,此配置是服务的目标服务url
<value>^https?:\/\/(localhost|127\.0\.0\.1|0:0:0:0:0:0:0:1|::1|myhadoop|myhadoop):[0-9].*$</value>
<description>The whitelist to be applied for dispatches associated with the service roles specified by gateway.dispatch.whitelist.services.
If the value is DEFAULT, a domain-based whitelist will be derived from the Knox host.</description>
</property>
3.2users.ldif
这个文件是配置关于ldap的配置,例如dn、dc、cn等(把他理解成用户名密码即可),具体需要参考:https://www.jianshu.com/p/7e4d99f6baaf等文档
3.3topologies服务配置
这个服务配置先不讲,留在和data/service转发配置一起讲,主要是二者联系过于紧密,单讲讲不明白。具体路径/home/knox/software/knox/conf/topologies
3.4data目录下deployments
具体路径如下:
/home/knox/software/knox/data/deployments
drwxr-xr-x 4 knox work 4096 Nov 30 17:26 admin.topo.17617d28fa0
drwxr-xr-x 5 knox work 4096 Nov 30 17:26 homepage.topo.175da53abf0
drwxr-xr-x 5 knox work 4096 Nov 30 17:26 knoxsso.topo.175da53abf0
drwxr-xr-x 5 knox work 4096 Nov 30 17:26 manager.topo.17617d28fa0
drwxr-xr-x 4 knox work 4096 Nov 30 17:26 metadata.topo.175da53abf0
drwxr-xr-x 4 knox work 4096 Nov 30 17:26 sandbox.topo.17607c162f8
drwxr-xr-x 4 knox work 4096 Nov 30 17:26 tomcat.topo.175f5405378
主要是各个服务生成的war包,各个集群服务在哪里定义呢?在/home/knox/software/knox/conf/topologies
里定义,每个配置文件都默认为一个集群,其中sandbox.xml是默认配置文件,默认代表反向代理的各个服务,例如hdfs、hbase等,具体每个服务配置详见sanbox.xml。
官网相关配置参考:https://knox.apache.org/books/knox-1-4-0/user-guide.html#UI+Service+Details
[knox@myhadoop topologies]$ pwd
/home/knox/software/knox/conf/topologies
[knox@myhadoop topologies]$ ll
total 40
-rwx------ 1 knox work 3338 Nov 30 17:26 admin.xml
-rwx------ 1 knox work 1991 Nov 18 15:48 homepage.xml
-rwx------ 1 knox work 4117 Nov 18 15:48 knoxsso.xml
-rwx------ 1 knox work 2646 Nov 30 17:26 manager.xml
-rwx------ 1 knox work 2335 Nov 18 15:48 metadata.xml
-rwx------ 1 knox work 89 Nov 18 15:48 README
-rwx------ 1 knox work 6850 Nov 27 11:31 sandbox.xml
-rwx------ 1 knox work 1158 Nov 23 21:17 tomcat.xml
3.5最终要讲一下最重要的部分:服务代理
参考:
https://cwiki.apache.org/confluence/display/KNOX/Proxying+a+UI+using+Knox
本节主要分为两部分配置文件:
/home/knox/software/knox/conf/topologies
下的sandbox.xml
/home/knox/software/knox/data/services/hdfsui/2.7.0
下的service.xml和rewrite.xml
这三个文件密切相关,一个文件配置不对,都不能使服务正确转发,而且日志的出的错误很奇怪,总是说缺少证书,其实并不是。
3.5.1sandbox.xml
此配置文件主要为如下结构:
<topology>
<gateway>
<provider>
<role>authentication</role>
<name>ShiroProvider</name>
<enabled>true</enabled>
<param>
<!--
session timeout in minutes, this is really idle timeout,
defaults to 30mins, if the property value is not defined,,
current client authentication would expire if client idles contiuosly for more than this value
-->
<name>sessionTimeout</name>
<value>30</value>
</param>
</provider>
</gateway>
<service>
<role>HBASEUI</role>
<url>http://localhost:16010</url>
</service>
<service>
<role>HDFSUI</role>
<url>http://localhost:50070</url>
</service>
</topology>
举例使用的url:https://myhadoop:8443/gateway/sandbox/hbase/webui/master-status
以上个url为例子,域名中gateway和hbase之间的sandbox其实就是sandbox.xml文件名字去掉后缀名;如果你想代理tomcat集群,需要在/home/knox/software/knox/conf/topologies
下重新定义一个tomcat.xml(也可以配到sandbox.xml里),配置文件参考sandbox.xml,最后形成的代理url就类似于https://myhadoop:8443/gateway/tomcat/tomcatui/xxx。还有不管是sandbox.xml还是tomcat.xml他们都代表一个topology(其实就是集群) 。例如sandbox.xml可能就代表一个集群,这个集群包含着hadoop生态圈的所有组件,例如hadoop、hbase、yarn、spark等一系列需要代理的组件。
sandbox.xml主要分为两部分,一个是gateway标签中的provider,另一个是service服务。
provider主要用来配置例如认证和授权相关的东西,默认不用动,即可启动服务。
service标签主要用来配置具体服务和具体服务的服务ip、端口。
具体service配置参考:https://knox.apache.org/books/knox-1-4-0/user-guide.html#UI+Service+Details
其中service标签中的role标签用来定义服务的名字,记住要大写,这个和/home/knox/software/knox/data/services/
中的每个服务service.xml和rewrite.xml密切相关,双方紧紧绑定在一起。接下来,用hdfsui服务讲解与sandbox.xml关系。
这里还需要注意,有些服务并不能很好的解析localhost,需要将localhost修改配置为域名。
3.5.2.hdfsui的service.xml和rewrite.xml配置
参考文档
重要:
这里以hdfsui为例讲解service.xml和rewrite.xml,这里必须一定要注意有坑,在hdfsui下有两个文件夹,一个是hadoop 2.7.0版本的服务代理,另一个是hadoop 3.0.0版本的服务代理。经过测试二者不能共存,如果共存,访问服务报错。如果您的集群是2.7.x版本,则需要移除掉3.0.0文件夹,反之亦然。官方有说在sandbox.xml中的服务里配置version版本,经过尝试,并不能解决问题,移除之后报错消失。
在2.7.0的文件夹里,主要有两个文件:
[knox@myhadoop 2.7.0]$ pwd
/home/knox/software/knox/data/services/hdfsui/2.7.0
[knox@myhadoop 2.7.0]$ ll
total 16
-rwx------ 1 knox work 10234 Nov 18 15:48 rewrite.xml
-rwx------ 1 knox work 2982 Nov 18 15:48 service.xml
[knox@myhadoop 2.7.0]$
其中service.xml主要用来对客户端(例如浏览器)进行拦截,分类,并将拦截的URL进行重写(这里不仅仅指请求的url进行重写,还包括返回的response body进行重写),把这种重写规则想成Netty中的入站和出站的Handler就很好理解了,入站的时候url重写,出站的时候response body进行重写,这样就能保证彻底对外隐藏真实的url。
3.5.2.1service.xml
<service role="AMBARIUI" name="ambariui" version="2.2.0">
<metadata>
<type>UI</type>
<context>/ambari</context>
<shortDesc>Apache Ambari Web UI</shortDesc>
<description>The Apache Ambari project is aimed at making Hadoop management simpler by developing software for provisioning, managing, and monitoring
Apache Hadoop clusters.
Ambari provides an intuitive, easy-to-use Hadoop management web UI backed by its RESTful APIs.</description>
</metadata>
<policies>
<policy role="webappsec"/>
<policy role="authentication" name="Anonymous"/>
<policy role="rewrite"/>
<policy role="authorization"/>
</policies>
<routes>
<route path="/ambari">
<rewrite apply="AMBARIUI/ambari/inbound/root" to="request.url"/>
<rewrite apply="AMBARIUI/ambari/outbound/mainpage" to="response.body"/>
</route>
<route path="/ambari/**">
<rewrite apply="AMBARIUI/ambari/inbound/path" to="request.url"/>
</route>
<route path="/ambari/**?**">
<rewrite apply="AMBARIUI/ambari/inbound/query" to="request.url"/>
</route>
<route path="/ambari/**/app.js">
<rewrite apply="AMBARIUI/ambari/outbound/links" to="response.body"/>
</route>
</routes>
</service>
我这里用/home/knox/software/knox/data/services/ambariui/2.2.0
中的service.xml来讲解(配置文件较少,容易讲)
service标签中role属性其实主要对应的是sandbox对应的service标签里的role,这里要严格一致,才能实现绑定,version用于区别服务本身之间的版本。
routes标签主要配置的是所有需要拦截的路径,这里面主要拦截url中含有ambari的url进行重写。
route标签讲解:
route标签中的path属性主要定义需要拦截的路径。rewrite标签中的apply属性主要定义了重写规则,这个apply其实就是去匹配rewrite.xml的filter的name属性的值,具体规则定义在filter里。to属性主要定义了重写的类型,一般的类型有request.url、response.body、request.headers、resquest.body等。
3.5.2.2rewrite.xml
<rules>
<rule dir="IN" name="AMBARIUI/ambari/inbound/root" pattern="*://*:*/**/ambari/">
<rewrite template="{$serviceUrl[AMBARIUI]}/"/>
</rule>
<rule dir="IN" name="AMBARIUI/ambari/inbound/path" pattern="*://*:*/**/ambari/{**}">
<rewrite template="{$serviceUrl[AMBARIUI]}/{**}"/>
</rule>
<rule dir="IN" name="AMBARIUI/ambari/inbound/query" pattern="*://*:*/**/ambari/{**}?{**}">
<rewrite template="{$serviceUrl[AMBARIUI]}/{**}?{**}"/>
</rule>
<!-- WS support -->
<rule dir="OUT" name="AMBARIUI/ambari/outbound/websocket">
<rewrite template="{$frontend[path]}/ambariws/api/stomp/v1"/>
</rule>
<rule dir="OUT" name="AMBARIUI/ambari/outbound/extrapath">
<rewrite template="{$frontend[path]}/ambari/api/v1"/>
</rule>
<filter name="AMBARIUI/ambari/outbound/links">
<content type="*/x-javascript">
<apply path="/api/v1" rule="AMBARIUI/ambari/outbound/extrapath"/>
<apply path="/img/" rule="AMBARIUI/ambari/outbound/img"/>
<apply path="\{proxy_root\}" rule="AMBARIUI/ambari/outbound/sitepath"/>
<apply path="/#/main/dashboard" rule="AMBARIUI/ambari/outbound/logohref"/>
<!-- WS support -->
<apply path="/api/stomp/v1" rule="AMBARIUI/ambari/outbound/websocket"/>
</content>
<content type="application/javascript">
<apply path="/api/v1" rule="AMBARIUI/ambari/outbound/extrapath"/>
<apply path="/img/" rule="AMBARIUI/ambari/outbound/img"/>
<apply path="\{proxy_root\}" rule="AMBARIUI/ambari/outbound/sitepath"/>
<apply path="/#/main/dashboard" rule="AMBARIUI/ambari/outbound/logohref"/>
<!-- WS support -->
<apply path="/api/stomp/v1" rule="AMBARIUI/ambari/outbound/websocket"/>
</content>
<content type="*/html">
</content>
</filter>
<filter name="AMBARIUI/ambari/outbound/mainpage">
<content type="*/html">
<apply path="stylesheets/vendor.css" rule="AMBARIUI/ambari/outbound/vendorcss" />
<apply path="stylesheets/app.css" rule="AMBARIUI/ambari/outbound/appcss" />
<apply path="javascripts/vendor.js" rule="AMBARIUI/ambari/outbound/vendorjs" />
<apply path="javascripts/app.js" rule="AMBARIUI/ambari/outbound/appjs" />
<apply path="/img/logo.png" rule="AMBARIUI/ambari/outbound/favicon"/>
<apply path="/licenses/NOTICE.txt" rule="AMBARIUI/ambari/outbound/notice"/>
</content>
</filter>
</rules>
rewrite.xml主要有两个重要的标签,一个是rule、另一个是filter。rule标签主要规定了进站或者出站匹配的url重写的规则,filter标签主要是对进站或者出站的body(包括response body和request body)进行规则匹配,apply标签中的path属性是匹配规则、rule属性与重写规则相匹配的,这个rule属性的值和rule标签的name属性是一一对应的,匹配之后,进行重写。说到这种程度,也就很好理解app.js重写,因为有时候,不仅要重写html页面,app.js也要重写,因为app.js一般都会有url没有重写。
最后注意几点:
标签的name是不能重复的,service.xml里的apply属性一般都会在rewrite.xml里找到。
这个规则不是复杂,而是难懂,市面上的资料太少,里面包含了浏览器自动发起的请求,也有用户自己发起的请求,既有出站重写也有入站重写,只要理清楚了,其实规则也能写出来。
3.5.2.3service.xml和rewrite.xml转发规则举例说明
以原生ambari转发规则为例:
请求url:https://myhadoop:8443/gateway/sandbox/ambari/#/login
请求的页面如上图。
使用浏览器的f12-->source菜单-->index源码,查看如下:
会发现所有的url都被重写,例如 <link rel="stylesheet" href="/gateway/sandbox/ambari/stylesheets/vendor.css">
已经不是原生的ambari的<link rel="stylesheet" href="stylesheets/vendor.css">
。
省略号……
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/gateway/sandbox/ambari/stylesheets/vendor.css">
<link rel="stylesheet" href="/gateway/sandbox/ambari/stylesheets/app.css">
<script src="/gateway/sandbox/ambari/javascripts/vendor.js"></script>
<script src="/gateway/sandbox/ambari/javascripts/app.js"></script>
<script>
$(document).ready(function() {
require('initialize');
// make favicon work in firefox
$('link[type*=icon]').detach().appendTo('head');
$('#loading').remove();
});
</script>
<title>BigManager</title>
<link rel="shortcut icon" href="/gateway/sandbox/ambari/img/logo.png" type="image/x-icon">
</head>
省略号……
</body>
</html>
查看重写规则:
<route path="/ambari">
<rewrite apply="AMBARIUI/ambari/inbound/root" to="request.url"/>
<rewrite apply="AMBARIUI/ambari/outbound/mainpage" to="response.body"/>
</route>
对访问主页的/ambari路径,会触发页面重写机制( <rewrite apply="AMBARIUI/ambari/outbound/mainpage" to="response.body"/>),具体规则配置在rewrite.xml中,如下:
<filter name="AMBARIUI/ambari/outbound/mainpage">
<content type="*/html">
<apply path="stylesheets/vendor.css" rule="AMBARIUI/ambari/outbound/vendorcss" />
<apply path="stylesheets/app.css" rule="AMBARIUI/ambari/outbound/appcss" />
<apply path="javascripts/vendor.js" rule="AMBARIUI/ambari/outbound/vendorjs" />
<apply path="javascripts/app.js" rule="AMBARIUI/ambari/outbound/appjs" />
<apply path="/img/logo.png" rule="AMBARIUI/ambari/outbound/favicon"/>
<apply path="/licenses/NOTICE.txt" rule="AMBARIUI/ambari/outbound/notice"/>
</content>
</filter>
这里rewrite.xml里的filter标签中属性name的值和service.xml的apply的属性值是一致的,即apply与filter匹配。这里path="stylesheets/vendor.css"中的rule="AMBARIUI/ambari/outbound/vendorcss"
会匹配rewrite.xml的<rule dir="OUT" name="AMBARIUI/ambari/outbound/vendorcss">
的规则,最后会重写HTML页面的url。这里注意OUT,意思是从gateway出站到浏览器,意思要重写response body的意思。
<rule dir="OUT" name="AMBARIUI/ambari/outbound/vendorcss">
<rewrite template="{$frontend[path]}/ambari/stylesheets/vendor.css"/>
</rule>
下面是两篇参考文档,写的其实很粗,但是已经有很大的参考意义了:
https://cwiki.apache.org/confluence/display/KNOX/Apache+Knox+Releases
4.网关启动
knox启动不能用root用户操作
4.1生成保护keystore的密码
这个必须要生成,否则启动报错
./bin/knoxcli.sh create-master
4.2启动knox自带的ldap
./bin/ldap.sh start
4.3启动knox的gateway
./bin/gateway.sh start
5.访问服务
hdfsui服务地址:
https://myhadoop:8443/gateway/sandbox/hdfs/dfshealth.html#tab-overview
hbaseui服务地址:
https://myhadoop:8443/gateway/sandbox/hbase/webui/master-status
具体访问地址可以去官网的用户手册查看,也可以到/home/knox/software/knox/data/services/
下对应的服务的service.xml查看服务的拦截地址
用户手册:
https://knox.apache.org/books/knox-1-4-0/user-guide.html#UI+Service+Details
6.避坑指南
6.1 url避坑
官网给的url有的不能用,例如直接访问https://myhadoop:8443/gateway/sandbox/hbase,是不能用的,必须加入后缀https://myhadoop:8443/gateway/sandbox/hbase/webui/master-status,官方给的rewrite例子不好。
hdfs和yarn可以正常访问
6.2 服务启动不了情况
这种情况很少,我当时遇到过服务启动不了,一个是域名问题,域名中以数字开头,java解析的时候会出错。
6.3 开启kerberos的服务
这个需要配置jaas文件和keytab,principal、jaas、keytab要完全一致,然后就能正常代理ui界面
kerberos对于新人来说十分不友好的,这个可以交流