I have a desktop workstation running K3S and the ztjh helm chart but am struggling to enable https via the letsencrypt configuration.
My config.yaml looks like this:
ingress:
enabled: true
proxy:
service:
loadBalancerIP: "<my-IP-address>"
https:
enabled: true
hosts:
- <my-domain>
letsencrypt:
contactEmail: <my-email>
and I’ve verified the DNS is correct (my host name resolves to my specified IP). I launch with helm following the zthj guide succesfully, but my proxy-public
service remains stuck with EXTERNAL-IP pending.
kubectl --namespace=testjupyter get service proxy-public
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
proxy-public LoadBalancer 10.43.2.137 <pending> 443:30868/TCP 6m26s
I understand that the default helm config is using a LoadBalancer type as shown above, and given that I have a single node here that’s probably not doing much for me, but I also understand that K3S includes a built-in ‘klipper’ load balancer suitable for a single node setup
If the ServiceLB Pod runs on a node that has an external IP configured, the node’s external IP is populated into the Service’s status.loadBalancer.ingress address list. Otherwise, the node’s internal IP is used.
I don’t see how to specify the external IP as described, notably I don’t seem to be allowed to use the field externalIP
in the helm config. But I can patch the service, after which it shows my external IP instead of Pending.
kubectl patch svc SERVICENAME -p '{"spec": {"type": "LoadBalancer", "externalIPs":["<my-server-ip>"]}}'
From what I can tell, this works, but feels clunky to patch the service like this. What’s the correct way to do this?
EDIT This works for a while, and I can log in to the jupyterhub, but after an hour or so, my browser tells me that the site is insecure because the SSL cert is self-signed (TRAEFIK DEFAULT CERT
)