I am running RStudio IDE servers in a Kubernetes cluster: each user gets an individual instance of the same docker image [with their own home-directory mounted in]
The normal routing path is external url
-> k8 ingress rule catches /user/
-> nginx service proxy-pass based on location
-> specific pod
I cannot get a clean response from an RStudio server, accessing it through router
All user-servers are named user-<uuid>
The nginx has a Location
definition thus:
location ~ /user/([a-z0-9]+)/rstudio {
proxy_hide_header Content-Security-Policy;
proxy_pass http://user-$1.${POD_NAMESPACE}.svc.cluster.local:8787;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host user-$1:8787;
client_max_body_size 0;
proxy_set_header X-Forwarded-Proto $proto;
proxy_set_header X-Forwarded-Port $port;
add_header X-Clacks-Overhead "RStudio" always;
proxy_set_header User-Agent "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:121.0) Gecko/20100101 Firefox/121.0";
}
[ ${POD_NAMESPACE}
ensures that it references the pod in my namespace and doesn't magically connect to someone elses service; $proto
& $port
are for http/https & 443/80; $1
is the UUID specific to the user. X-Clacks-Overhead
lets me confirm that this location definition is used ]
If I work from the router container in the cluster [so bypassing any possible contamination from external factors] - I can get a named file:
-
curl http://<user-1234>:8787/rstudio.css
== downloads file -
curl http://<user-1234>:8787/notrstudio.css
== page not found page -
curl http://<nginx-service-name>/<location>/rstudio.css
== 404
I've tried various combinations of X-RStudio-Root-Path
& www-root-path
.... and I've essentially run myself in circles - and frazzled the brain of a colleague who tried to help
Two questions:
- Can someone explain the actual effects of
X-RStudio-Root-Path
&www-root-path
- the documentation is not that clear - Has anyone got a working instance, and able to share their config?