You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@knox.apache.org by kr...@apache.org on 2019/05/28 17:17:04 UTC
[knox] branch master updated: KNOX-1866 - Fix HBase UI proxying
(#94)
This is an automated email from the ASF dual-hosted git repository.
krisden pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/knox.git
The following commit(s) were added to refs/heads/master by this push:
new fc968d9 KNOX-1866 - Fix HBase UI proxying (#94)
fc968d9 is described below
commit fc968d94b09fa56d2c363b0a8cf5828691ef49e3
Author: Josh Elser <jo...@gmail.com>
AuthorDate: Tue May 28 13:16:59 2019 -0400
KNOX-1866 - Fix HBase UI proxying (#94)
* Tested against HBase 2.1.x.
* Everything expected to be working with the exception of the LogLevel servlet.
* Remove the busted top-level URL with no host&port
* Replace all {gateway.url} with {$frontend[url]}
* Lift common endpoints out of master/rs specific URLs (e.g. logs, jmx, dump)
* Consistently allow access to master/RS without master-status/rs-status
---
.../resources/services/hbaseui/2.1.0/rewrite.xml | 224 +++++++++++++++++++++
.../resources/services/hbaseui/2.1.0/service.xml | 91 +++++++++
2 files changed, 315 insertions(+)
diff --git a/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/rewrite.xml b/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/rewrite.xml
new file mode 100644
index 0000000..8ee9294
--- /dev/null
+++ b/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/rewrite.xml
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<rules>
+ <rule dir="IN" name="HBASEUI/hbase/inbound/master/root/qualified" pattern="*://*:*/**/hbase/webui/?{host}?port}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/master-status"/>
+ </rule>
+ <!-- Make sure that redirects back to the master landing page work -->
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/master/root" pattern="/">
+ <rewrite template="{$frontend[url]}/hbase/webui/"/>
+ </rule>
+ <!-- Master convenience URLs -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/master/home" pattern="*://*:*/**//hbase/webui/master?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/master-status?{**} "/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/master/home" pattern="//{host}:{port}/master-status?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/master-status?host={$hostmap(host)}?{port}?{**}"/>
+ </rule>
+ <!-- RS convenience URLs -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/regionserver/home" pattern="*://*:*/**//hbase/webui/regionserver?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/rs-status?{**} "/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regionserver/home" pattern="//{host}:{port}/rs-status?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/rs-status?host={$hostmap(host)}?{port}?{**}"/>
+ </rule>
+
+ <!-- Load a RegionServer's status page -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/regionserver/home" pattern="*://*:*/**//hbase/webui/regionserver?{host}?{port}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/rs-status"/>
+ </rule>
+ <!-- Yes, we have both explicit and implicit scheme for rs-status outbound links. Need these both -->
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regionserver/home" pattern="*://{host}:{port}/rs-status/">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/rs-status?host={$hostmap(host)}?{port}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regionserver/home" pattern="//{host}:{port}/rs-status/">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/rs-status?host={$hostmap(host)}?{port}"/>
+ </rule>
+
+ <!-- region.jsp -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/regions" pattern="*://*:*/**/hbase/webui/regionserver/region.jsp?{host}?{port}?{name}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/region.jsp?{name}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regions" pattern="/region.jsp?{name}?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/region.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/regions" pattern="//{host}:{port}/region.jsp?{name}">
+ <rewrite template="{$frontend[url]}/hbase/webui/region.jsp?host={host}?{port}?{name}"/>
+ </rule>
+
+ <!-- storeFile.jsp -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/storefile" pattern="*://*:*/**/hbase/webui/regionserver/storeFile.jsp?{host}?{port}?{name}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/storeFile.jsp?{name}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/storefile" pattern="/storeFile.jsp?{name}">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/storeFile.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{name}"/>
+ </rule>
+
+ <rule dir="IN" name="HBASEUI/hbase/inbound/processMaster" pattern="*://*:*/**/hbase/webui/processMaster.jsp">
+ <rewrite template="{$serviceUrl[HBASEUI]}/processMaster.jsp"/>
+ </rule>
+
+ <!-- LogLevel servlet -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/loglevel" pattern="*://*:*/**/hbase/webui/logLevel?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/logLevel?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/loglevel" pattern="/logLevel?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/logLevel?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+
+ <!-- Profiler servlet -->
+ <!-- prof-output sets the Refresh header to render the SVG after the profiler finishes.
+ This sets up a filter to catch that Refresh header and rewrite it to point to the
+ proxied location instead of the original.
+ -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/profiler" pattern="*://*:*/**/hbase/webui/prof?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/prof?{**}"/>
+ </rule>
+ <rule dir="IN" name="HBASEUI/hbase/inbound/prof_output" pattern="*://*:*//**/hbase/webui/prof-output/{**}?{host}?{port}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/prof-output/{**}?host={host}?port={port}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/profiler" pattern="/prof?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/prof?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <filter name="HBASEUI/hbase/webui/outbound/headers/prof-output">
+ <content type="application/x-http-headers">
+ <apply path="Refresh" rule="HBASEUI/hbase/webui/outbound/headers/prof-output/refresh"/>
+ </content>
+ </filter>
+ <rule dir="OUT" name="HBASEUI/hbase/webui/outbound/headers/prof-output/refresh" pattern="*;/prof-output/{**}?{**}">
+ <!-- Can we somehow parse the literal number to wait before redirect instead of picking the constant 5s? -->
+ <rewrite template="{$prefix[5;,url]}{$frontend[url]}/hbase/webui/prof-output/{**}?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+
+ <!-- zk.jsp on the Master page -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/zkdump" pattern="*://*:*/**/hbase/webui/master/zk.jsp?{host}?{port}?{**}">
+ <rewrite template="{$servicScheme[HBASEUI]}://{host}:{port}/zk.jsp?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/webui/outbound/zkdump" pattern="//{host}:{port}/zk.jsp?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/zk.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/webui/outbound/zkdump2" pattern="/zk.jsp?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/zk.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+
+ <!-- table.jsp, the IN is handled by master/all_children -->
+ <rule dir="OUT" name="HBASEUI/table" pattern="/table.jsp?{name}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/table.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{name}"/>
+ </rule>
+
+
+ <!-- WIP of master UI using query string to carry host and port -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/master/all_children" pattern="*://*:*/**/hbase/webui/master/{**}?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/{**}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/master/children" pattern="/master-status?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/master-status?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/master/children" pattern="/tablesDetailed.jsp?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/tablesDetailed.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/master/children" pattern="/procedures.jsp?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/procedures.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/master/children" pattern="/processMaster.jsp?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/master/processMaster.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+
+ <!-- RegionServer UI proxying -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/regionserver/root/qualified" pattern="*://*:*/**/hbase/webui/regionserver?{host}?port}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/rs-status"/>
+ </rule>
+ <rule dir="IN" name="HBASEUI/hbase/inbound/regionserver/all_children" pattern="*://*:*/**/hbase/webui/regionserver/{**}?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/{**}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regionserver/children" pattern="/rs-status?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/rs-status?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regionserver/children" pattern="/processRS.jsp">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/processRS.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regionserver/children" pattern="/tablesDetailed.jsp">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/tablesDetailed.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/regionserver/children" pattern="/procedures.jsp">
+ <rewrite template="{$frontend[url]}/hbase/webui/regionserver/procedures.jsp?host={$inboundurl[host]}?port={$inboundurl[port]}"/>
+ </rule>
+
+ <!-- Generic proxying. We can't keep everything separated by master or RegionServer
+ because some of them generate the same outbound link and we'd mess up our URLs
+ (e.g. viewing RegionServer logs on a url that says `master`)-->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/logfile" pattern="*://*:*/**/hbase/webui/{host}/{port}/logs/{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/{host}/{port}/logs/{**}"/>
+ </rule>
+ <rule dir="IN" name="HBASEUI/hbase/inbound/logs" pattern="*://*:*/**/hbase/webui/logs/?{host}?{port}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/logs/"/>
+ </rule>
+ <rule dir="IN" name="HBASEUI/hbase/inbound/logs/files" pattern="*://*:*/**/hbase/webui/logs/{**}?{host}?{port}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{$hostmap(host)}:{port}/logs/{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/logs" pattern="/logs">
+ <rewrite template="{$frontend[url]}/hbase/webui/logs?host={$inboundurl[host]}?port={$inboundurl[port]}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/logs" pattern="/logs/{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/logs/{**}?host={$inboundurl[host]}?port={$inboundurl[port]}"/>
+ </rule>
+ <!-- Configuration servlet -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/conf" pattern="*://*:*/**/hbase/webui/conf?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/conf?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/conf" pattern="/conf?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/conf?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <!-- Debug dump servlet -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/dump" pattern="*://*:*/**/hbase/webui/dump?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/dump?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/dump" pattern="/dump?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/dump?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+ <!-- JMX metrics -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/jmx" pattern="*://*:*/**/hbase/webui/jmx?{host}?{port}?{**}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/jmx?{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/jmx" pattern="/jmx?{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/jmx?host={$inboundurl[host]}?port={$inboundurl[port]}?{**}"/>
+ </rule>
+
+ <!-- Static file serving -->
+ <rule dir="IN" name="HBASEUI/hbase/inbound/static" pattern="*://*:*/**/hbase/webui/static/{**}">
+ <rewrite template="{$serviceUrl[HBASEUI]}/static/{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/png" pattern="/static/hbase_logo_small.png">
+ <rewrite template="{$frontend[url]}/hbase/webui/static/hbase_logo_small.png"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/css" pattern="/static/css/{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/static/css/{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/js" pattern="/static/js/{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/static/js/{**}"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/static" pattern="/static/{**}">
+ <rewrite template="{$frontend[url]}/hbase/webui/static/{**}"/>
+ </rule>
+ <rule dir="IN" name="HBASEUI/hbase/inbound/logs/css" pattern="*://*:*/**/hbase/webui/logs/jetty-dir.css?{host}?{port}">
+ <rewrite template="{$serviceScheme[HBASEUI]}://{host}:{port}/logs/jetty-dir.css"/>
+ </rule>
+ <rule dir="OUT" name="HBASEUI/hbase/outbound/logs/css" pattern="jetty-dir.css">
+ <rewrite template="{$frontend[url]}/hbase/webui/logs/jetty-dir.css?host={$inboundurl[host]}?port={$inboundurl[port]}"/>
+ </rule>
+</rules>
diff --git a/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/service.xml b/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/service.xml
new file mode 100644
index 0000000..83f399c
--- /dev/null
+++ b/gateway-service-definitions/src/main/resources/services/hbaseui/2.1.0/service.xml
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<service role="HBASEUI" name="hbase" version="1.2.4">
+ <routes>
+ <!-- Fixes the stylesheet on the logs servlet -->
+ <route path="/hbase/webui/logs/jetty-dir.css">
+ <rewrite apply="HBASEUI/hbase/inbound/logs/css" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/logs/css" to="response.body"/>
+ </route>
+ <route path="/hbase/webui/**">
+ <rewrite apply="HBASEUI/hbase/inbound/master/path" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/headers" to="response.headers"/>
+ </route>
+ <route path="/hbase/webui/static/**">
+ <rewrite apply="HBASEUI/hbase/inbound/static" to="request.url"/>
+ </route>
+ <!-- Define explicit routes for endpoints shared across master/regionserver -->
+ <route path="/hbase/webui/logs?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/logs" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/logs" to="response.body"/>
+ </route>
+ <route path="/hbase/webui/logs/{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/logs/files" to="request.url"/>
+ </route>
+ <route path="/hbase/webui/logLevel?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/loglevel" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/loglevel" to="response.body"/>
+ </route>
+ <route path="/hbase/webui/conf?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/conf" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/conf" to="response.body"/>
+ </route>
+ <route path="/hbase/webui/dump?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/dump" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/dump" to="response.body"/>
+ </route>
+ <route path="/hbase/webui/jmx?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/jmx" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/jmx" to="response.body"/>
+ </route>
+ <route path="/hbase/webui/prof?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/profiler" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/profiler" to="response.body"/>
+ </route>
+ <route path="/hbase/webui/prof-output/{**}?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/prof_output" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/webui/outbound/headers/prof-output" to="response.headers"/>
+ </route>
+ <!-- Region info -->
+ <route path="/hbase/webui/regionserver/region.jsp?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/regions" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/regions" to="response.body"/>
+ </route>
+ <!-- Storefile info -->
+ <route path="/hbase/webui/regionserver/storeFile.jsp?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/storefile" to="request.url"/>
+ </route>
+ <!-- Enables loading the master without /master-status -->
+ <route path="/hbase/webui/master?**">
+ <rewrite apply="HBASEUI/hbase/inbound/master/home" to="request.url"/>
+ </route>
+ <route path="/hbase/webui/master/{**}?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/master/all_children" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/master/children" to="response.body"/>
+ </route>
+ <!-- Enables loading the RS without /rs-status -->
+ <route path="/hbase/webui/regionserver?**">
+ <rewrite apply="HBASEUI/hbase/inbound/regionserver/home" to="request.url"/>
+ </route>
+ <route path="/hbase/webui/regionserver/{**}?{**}">
+ <rewrite apply="HBASEUI/hbase/inbound/regionserver/all_children" to="request.url"/>
+ <rewrite apply="HBASEUI/hbase/outbound/regionserver/children" to="response.body"/>
+ </route>
+ </routes>
+ <dispatch classname="org.apache.knox.gateway.hbase.HBaseDispatch"/>
+</service>