# jupyter proxy ###### tags: `NTUToolmenLab` using jupyter hub https://jupyterhub.readthedocs.io/en/stable/quickstart.html#prerequisites https://jupyterhub.readthedocs.io/en/stable/reference/config-proxy.html ## Install ``` sudo apt update sudo apt -y install npm nodejs sudo python3 -m pip install jupyterhub sudo npm install -g configurable-http-proxy ``` ## run ``` jupyterhub --url http://0.0.0.0:8000/jupyter/ jupyterhub --url http://0.0.0.0:8000/jupyter/$(cat /etc/hostname) ``` ## proxy by kubernetes traefik you set your pod that run jupyterhub with label `srvname: linnil1155628469899403` ``` yml apiVersion: v1 kind: Service metadata: namespace: user name: linnil1155628469899403 spec: selector: srvname: linnil1155628469899403 ports: - port: 8000 targetPort: 8000 --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: linnil1155628469899403 namespace: user annotations: kubernetes.io/ingress.class: traefik traefik.frontend.rule.type: PathPrefix spec: rules: - http: paths: - path: /jupyter/linnil1155628469899403 backend: serviceName: linnil1155628469899403 servicePort: 8000 ``` ## create by script rbac ``` yml rules: - apiGroups: [""] # "" indicates the core API group resources: ["pods", "services"] verbs: ["get", "list", "create", "delete"] - apiGroups: ["extensions"] resources: ["ingresses"] verbs: ["get", "list", "create", "delete"] ``` create by api ``` python from kubernetes import client, config config.load_incluster_config() v1 = client.CoreV1Api() v1.delete_namespaced_service("linnil1155628469899403", 'user') v1.create_namespaced_service('user', a) v1beta = client.ExtensionsV1beta1Api() v1beta.delete_namespaced_ingress('linnil1155628469899403', 'user') v1beta.create_namespaced_ingress('user', a) ```