Hi everyone,
I’m having issues setting up JupyterHub on kubernetes that sits behind traefik doing path based routing to services. I’d like to have a number of different services deployed including a number of jupyterhub deployments under different namespaces and reachable via different web paths.
I’m deploying jupyterhub using the helm chart with the following configuration:
hub:
baseUrl: /longbow-workshop/
proxy:
secretToken: "removed"
service:
type: ClusterIP
rbac:
enabled: true
singleuser:
image:
name: ccpbiosim/longbow-workshop
tag: v1.0
storage:
type: none
memory:
limit: 5.0G
guarantee: 1.0G
cpu:
limit: 10.0
guarantee: 0.2
cull:
timeout: 2400
every: 600
prePuller:
continuous:
enabled: true
auth:
type: custom
custom:
className: tmpauthenticator.TmpAuthenticator
with the following command:
helm upgrade --install longbow-workshop jupyterhub/jupyterhub --namespace longbow-workshop --timeout=3600 --version=0.8.2 --values longbow-workshop-helm.yaml
I then configure traefik using the basic steps here docs.traefik.io/user-guide/kubernetes/
Since my jupyterhub is in its own namespace that traefik is not deployed to I have to create a service to expose the public-proxy like this:
apiVersion: v1
kind: Service
metadata:
name: longbow-workshop
namespace: default
spec:
type: ExternalName
externalName: proxy-public.longbow-workshop.svc.cluster.local
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: https
My Traefik ingress rules look like this:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ccpbiosim
annotations:
kubernetes.io/ingress.class: traefik
traefik.frontend.rule.type: PathPrefixStrip
spec:
rules:
- host: hubs.ccpbiosim.ac.uk
http:
paths:
- path: /longbow-workshop
backend:
serviceName: longbow-workshop
servicePort: http
If I then try to go to hubs.ccpbiosim.ac.uk/longbow-workshop it will redirect recursively adding /hub to the end of the url until the browser kills it and it looks like /longbow-workshop/hub/hub/hub/hub/hub/hub/hub/hub/hub/hub.
Oddly, if I configure traefik to use subdomains instead of paths then everything works fine, but it is quite time consuming for us to get A records for subdomains and would prefer to use path based routing instead. Anyone seen this before and know what I’m doing wrong?