Skip to content

Add a TLS SAN + DNS hostname preflight#682

Merged
jlav merged 3 commits into
mainfrom
jl/tls-hostname-preflight
Jun 5, 2026
Merged

Add a TLS SAN + DNS hostname preflight#682
jlav merged 3 commits into
mainfrom
jl/tls-hostname-preflight

Conversation

@jlav
Copy link
Copy Markdown
Member

@jlav jlav commented Jun 5, 2026

Description

The Replicated config validates the shape of the uploaded TLS cert - PEM headers, recently (#679, #681). But nothing checks the cert actually covers the hostnames being provisioned, or that those hostnames resolve. A missing SAN or a forgotten DNS record installs fine and only shows up later as broken TLS or sandboxes stuck in starting.

This adds a preflight that runs at the pre-install gate (and is re-runnable from the Admin Console) to catch both early. It checks that every hostname OpenHands serves has a covering SAN, and that each resolves from inside the cluster.

It handles both sandbox routing modes, which have different cert requirements: subdomain routing serves {id}.{runtime_base} and needs a wildcard *.{runtime_base} SAN, while path routing serves {runtime_base}/{id} and needs the exact name.

Helm Chart Checklist

  • I have updated the version field in Chart.yaml for each modified chart
  • I have tested the chart upgrade path from the previous version
  • I have verified backwards compatibility with existing values.yaml configurations
  • I have updated the chart's README.md if there are any breaking changes or new required values

Additional Notes

image

jlav added 3 commits June 4, 2026 16:18
Adds replicated/preflight.yaml: a troubleshoot.sh Preflight that validates the uploaded TLS certificate covers every provisioned hostname (subdomain wildcard vs path-based exact runtime routing) and that those hostnames resolve in DNS. A proxied alpine/openssl runPod emits per-hostname warn outcomes. Adds the probe image to application.yaml additionalImages so air-gapped builds mirror it.
The standalone replicated/preflight.yaml (a top-level Preflight CR) is never
discovered by KOTS for this Helm-based app — preflights are surfaced only via
the chart-rendered Secret labeled troubleshoot.sh/kind: preflight. Move the
check into the chart's troubleshoot templates (mirroring PR #459), reading the
cert and hostnames from values already flowing into the chart (keycloak ingress
secret, per-service ingress hosts, runtime-api env, laminar) — no new config
plumbed through the HelmChart CR or values.yaml. The probe image reuses the
proxy base already embedded in image.repository.

Revert the now-unneeded replicated/preflight.yaml and the application.yaml
additionalImages entry. Bump the openhands chart to 0.7.38.
@jlav jlav merged commit 7f5ecee into main Jun 5, 2026
25 checks passed
@jlav jlav deleted the jl/tls-hostname-preflight branch June 5, 2026 15:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants