Web services need HTTPS certificates and a way to renew them before they expire. The historical nginx-lego package combined an NGINX reverse proxy, which forwards incoming requests, with Lego certificate automation. Its DNS-based validation could prove control of a domain without exposing the application itself publicly. The recovered material also includes kube-lego examples, a different retired project. Check the image and chart actually deployed before deciding which certificate renewal or migration instructions apply.
Current guidance
The original Project link points to the lego ACME client, while the body combines an internal HTTPS proxy using DNS challenges with separate nginx-ingress and kube-lego examples. Those names are not interchangeable: lego remains an ACME client, whereas kube-lego is a deprecated Kubernetes certificate controller. The archived stable/nginx-lego chart also explicitly says it will not be updated, but that alone does not identify every deployment described by this mixed page.
Inspect the installed image, chart metadata, configuration and certificate storage. Determine whether certificate issuance happens inside a reverse-proxy container, through kube-lego, or through another controller. Preserve ACME account information, DNS-provider credentials, hostnames and the current private keys securely while planning the change. Avoid running competing renewal processes against the same certificate ownership.
For a current design, evaluate routing and certificate issuance separately. cert-manager supports DNS01 solvers, including details that matter with delegated zones or split-horizon DNS; the chosen proxy must consume renewed certificates correctly. Rehearse issuance against staging, automatic renewal, certificate reload and an actual client connection before removing the old path. No universal, values-compatible successor for this historical wrapper was established.
Historical upstream link check · 2026-10-09
The recorded upstream address redirects to https://github.com/go-acme/lego and returned HTTP 200 on 2026-10-09. GitHub does not mark go-acme/lego archived or disabled; this does not establish active maintenance, support or compatibility. GitHub resolves the old repository identity to go-acme/lego. Link availability does not certify the historical installation instructions or current security support.
Website availability is separate from project, chart and image support. Use the current guidance and primary sources on this page to assess the distribution.
Historical Kubedex content
Preserved for context. Commands, versions, prices and results below reflect the original research.
This chart bootstraps an nginx-lego deployment on a Kubernetes cluster using the Helm package manager. It is container, which provides nginx based https/ssl proxy. It uses https://letsencrypt.org/ and https://github.com/xenolf/lego to automatically obtain and renew certificates.
It is mainly intended for use with internal (not publicly accessible) services, such as internal Docker registries, so it uses DNS challenge and API enabled DNS servers.
Prerequisites
- Kubernetes 1.4+ with Beta APIs enabled
Nginx
nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, nginx served or proxied 25.03% busiest sites in August 2018. Here are some of the success stories: Dropbox, Netflix, WordPress.com, FastMail.FM.
The sources and documentation are distributed under the 2-clause BSD-like license.
HTTPS ingress with nginx + kube-lego
Kubernetes Ingress Objects are used to manage HTTP(S) access from the internet to inside the Kubernetes cluster. Among other things, it lets us do the following:
- Provide a HTTPS end point so users can connect to us securely
- Direct traffic to various Services based on hostnames or URL paths
- Allow using one public IP address for multiple domain names
- We use the nginx-ingress provider to handle our Ingress needs.
Nginx Ingress
We run on Google Cloud’s Kubernetes Engine. Even though GKE comes pre-installed with the Google Cloud Load Balancer Ingress provider, we decided to use nginx instead for the following reasons:
- GCLB has a 30s default timeout on all HTTP connections. This is counted not just when the connection is idle but from connection start time. This is particularly bad for WebSockets since those connections usually last for a lot longer than 30s! There is no easy way to configure this timeout from inside Kubernetes.
- GCLB does not guarantee you can use the same IP for multiple domains. We want the various subdomains of mybinder.org to point to the same IP so we can easily add/remove new services without waiting for DNS propagation delay.
Configuration with Ingress objects
Ingress objects are used to tell the ingress controllers which requests should be routed to which Service objects. Usually, the rules either check for a hostname (like mybinder.org or prometheus.mybinder.org) and/or a URL prefix (like /metrics or /docs). You can see all the ingress objects present with kubectl –namespace=prod get ingress.
The following ingress objects currently exist:
- jupyterhub – Directs traffic to hub.mybinder.org. The zero-to-jupyterhub guide has more documentation.
- binderhub – Directs traffic to mybinder.org. You can find more details about this in the binderhub helm chart.
- redirector – Directs traffic to the HTTP redirector we run for mybinder.org. This helps do redirects such as docs.mybinder.org or beta.mybinder.org. The list of redirects is configured in mybinder/values.yaml. The code for this is in mybinder/templates/redirector in this repo.
- static – Directs traffic into static.mybinder.org. We serve the mybinder.org badges from a different domain for privacy reasons. This ingress lets us direct traffic only from static.mybinder.org/badge.svg to the binder pod.
- prometheus-server – Directs traffic to prometheus.mybinder.org. Configured under prometheus in both mybinder/values.yaml and config/prod.yaml.
- grafana – Directs traffic to grafana.mybinder.org. Configured under grafana in both mybinder/values.yaml and config/prod.yaml.
kube-lego-nginx – Used by kube-lego for doing automatic HTTPS certificate renewals.
Lego Features
Register with CA
Obtain certificates, both from scratch or with an existing CSR
Renew certificates
Revoke certificates
Robust implementation of all ACME challenges
- HTTP (http-01)
- DNS (dns-01)
- TLS (tls-alpn-01)
- SAN certificate support
- Comes with multiple optional DNS providers
- Custom challenge solvers
- Certificate bundling
- OCSP helper function
Please keep in mind that CLI switches and APIs are still subject to change.
When using the standard –path option, all certificates and account configurations are saved to a folder .lego in the current working directory.
Sources & further reading
Spotted something that needs another look?
Help improve this page →