1.KNOX安装配置文档

KNOX安装配置文档

参考文档:

https://blog.csdn.net/qq_37865420/article/details/105787160
https://cwiki.apache.org/confluence/display/KNOX/Apache+Knox+Releases

https://cwiki.apache.org/confluence/display/KNOX/2017/08/14/Understanding+Rewrite+Rules+for+Apache+Knox

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/2017/08/14/Understanding+Rewrite+Rules+for+Apache+Knox

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

image-20201201194453425.png

请求的页面如上图。

使用浏览器的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

https://cwiki.apache.org/confluence/display/KNOX/2017/08/14/Understanding+Rewrite+Rules+for+Apache+Knox

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对于新人来说十分不友好的,这个可以交流

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容