JupyterHub proxy-public svc has no external IP (stuck in <pending>)

11/25/2019

I am using helm to deploy JupyterHub (version 0.8.2) to kubernetes (AWS managed kubernetes "EKS"). I have a helm config to describe the proxy-public service, with an AWS elastic load balancer:

proxy:
  secretToken: ""
  https:
    enabled: true
    type: offload
  service:
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-ssl-cert: ...
      service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "tcp"
      service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "443"
      service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: '1801'

Problem: When I deploy JupyterHub to EKS via helm:

helm upgrade --install jhub jupyterhub/jupyterhub --namespace jhub --version=0.8.2 --values config.yaml

The proxy-public svc never get's an external IP. It is stuck in pending state:

> kubectl get svc
NAME           TYPE           CLUSTER-IP       EXTERNAL-IP   PORT(S)                      AGE
hub            ClusterIP      172.20.241.23    <none>        8081/TCP                     15m
proxy-api      ClusterIP      172.20.170.189   <none>        8001/TCP                     15m
proxy-public   LoadBalancer   172.20.72.196    <pending>     80:31958/TCP,443:30470/TCP   15m

I did kubectl describe svc proxy-public and kubectl get events and there does not appear to be anything out of the ordinary. No errors.

-- James Wierzba
amazon-eks
amazon-elb
amazon-web-services
jupyterhub
kubernetes-helm

3 Answers

11/25/2019

You will need another annotation like this in order to use AWS classic loadbalancer.

service.beta.kubernetes.io/aws-load-balancer-internal: 0.0.0.0/0

-- n3o-B
Source: StackOverflow

11/26/2019

The problem turned out to be the fact that I had mistakenly put the kubernetes cluster (and control plane) in private subnets only, thus making it impossible for the ELB to get an external IP.

-- James Wierzba
Source: StackOverflow

12/10/2019

Deploying JupyterHub on kubernetes can be an overkill sometimes if all you want is Jupyterhub which is accessible over the internet for you or your team. Instead of doing the complicated kubernetes setup, you can setup a VM in AWS or any other cloud and have jupyterhub installed and run as a service .

In fact, there is already a VM setup available on AWS, GCP and Azure which can be used to spinup your jupyterhub vm that will be accessible on a public ip and support single or multiuser sessions in just few clicks. Details are below if you want to try it out:

Setup on GCP

Setup on AWS

Setup on Azure

-- Techlatest.net
Source: StackOverflow