[ 
https://issues.apache.org/jira/browse/SPARK-20044?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15944829#comment-15944829
 ] 

Oliver Koeth edited comment on SPARK-20044 at 3/28/17 9:09 AM:
---------------------------------------------------------------

The field "webuiaddress" in the <master>/json response does not reflect the 
proxy, but returns the internal worker host/port. I left this unchanged form 
SPARK-15487.
The underlying field WorkerInfo.webUiAddress does not reflect proxy on purpose, 
because this is what the master uses to build the proxy routing 
{noformat}
if (reverseProxy) {
   webUi.addProxyTargets(worker.id, worker.webUiAddress)
}
{noformat}
If the returned JSON should rather show the "external" proxy address, one could 
either fix up the JSON (without affecting workerInfo) in MasterPage.renderJson 
or add a new property "externalwebuiaddress" to WorkerInfo (normally equal to 
webuiaddress, except in case of reverse proxy)


was (Author: okoethibm):
The field "webuiaddress" in the <master>/json response does not reflect the 
proxy, but returns the internal worker host/port. I left this unchanged form 
SPARK-15487.
The underlying field WorkerInfo.webUiAddress does not reflect proxy on purpose, 
because this is what the master uses to build the proxy rounting
if (reverseProxy) {
   webUi.addProxyTargets(worker.id, worker.webUiAddress)
}

If the returned JSON should rather show the "external" proxy address, one could 
either fix up the JSON (without affecting workerInfo) in MasterPage.renderJson 
or add a new property "externalwebuiaddress" to WorkerInfo (normally equal to 
webuiaddress, except in case of reverse proxy)

> Support Spark UI behind front-end reverse proxy using a path prefix
> -------------------------------------------------------------------
>
>                 Key: SPARK-20044
>                 URL: https://issues.apache.org/jira/browse/SPARK-20044
>             Project: Spark
>          Issue Type: Improvement
>          Components: Web UI
>    Affects Versions: 2.1.0
>            Reporter: Oliver Koeth
>            Priority: Minor
>              Labels: reverse-proxy, sso
>
> Purpose: allow to run the Spark web UI behind a reverse proxy with URLs 
> prefixed by a context root, like www.mydomain.com/spark. In particular, this 
> allows to access multiple Spark clusters through the same virtual host, only 
> distinguishing them by context root, like www.mydomain.com/cluster1, 
> www.mydomain.com/cluster2, and it allows to run the Spark UI in a common 
> cookie domain (for SSO) with other services.
> [SPARK-15487] introduced some support for front-end reverse proxies by 
> allowing all Spark UI requests to be routed through the master UI as a single 
> endpoint and also added a spark.ui.reverseProxyUrl setting to define a 
> another proxy sitting in front of Spark. However, as noted in the comments on 
> [SPARK-15487], this mechanism does not currently work if the reverseProxyUrl 
> includes a context root like the examples above: Most links generated by the 
> Spark UI result in full path URLs (like /proxy/app-"id"/...) that do not 
> account for a path prefix (context root) and work only if the Spark UI "owns" 
> the entire virtual host. In fact, the only place in the UI where the 
> reverseProxyUrl seems to be used is the back-link from the worker UI to the 
> master UI.
> The discussion on [SPARK-15487] proposes to open a new issue for the problem, 
> but that does not seem to have happened, so this issue aims to address the 
> remaining shortcomings of spark.ui.reverseProxyUrl
> The problem can be partially worked around by doing content rewrite in a 
> front-end proxy and prefixing src="/..." or href="/..." links with a context 
> root. However, detecting and patching URLs in HTML output is not a robust 
> approach and breaks down for URLs included in custom REST responses. E.g. the 
> "allexecutors" REST call used from the Spark 2.1.0 application/executors page 
> returns links for log viewing that direct to the worker UI and do not work in 
> this scenario.
> This issue proposes to honor spark.ui.reverseProxyUrl throughout Spark UI URL 
> generation. Experiments indicate that most of this can simply be achieved by 
> using/prepending spark.ui.reverseProxyUrl to the existing spark.ui.proxyBase 
> system property. Beyond that, the places that require adaption are
> - worker and application links in the master web UI
> - webui URLs returned by REST interfaces
> Note: It seems that returned redirect location headers do not need to be 
> adapted, since URL rewriting for these is commonly done in front-end proxies 
> and has a well-defined interface



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to