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>