You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
chart: sync the Ingress TLS certificate from Key Vault for estates without the app routing add-on #130
The chart's Ingress objects name ingress.tlsSecret and carry the annotation kubernetes.azure.com/tls-cert-keyvault-uri. Only the AKS app routing add-on turns that annotation
into the Secret. An estate that serves the Ingress objects with ingress-nginx (its own controllers
behind internal load balancers) has no component that creates the Secret, so it is created by hand
from the vault certificate, and it is created again by hand after a reset (namespace deleted) and
at every certificate renewal.
The chart already runs the Key Vault CSI driver for the environment values: memex.keyVaultClasses
renders a SecretProviderClass per class with secretObjects of type Opaque
(templates/memex-portal/secretproviderclass.yaml).
Proposal
An opt-in value, for example ingress.tlsFromKeyVault.certificate: <vault certificate object>,
that renders a second SecretProviderClass (or extends the existing one) with a secretObjects
entry of type kubernetes.io/tls, mapping the certificate object (objectType secret, PEM) to tls.crt and tls.key under the name ingress.tlsSecret, mounted on the portal pod so that the
driver creates and rotates the Secret. Renewal in the vault then reaches the Secret within the
driver's rotation interval, and a reset needs no hand step.
Acceptance
On an estate with ingress-nginx and the value set, a fresh namespace receives the TLS Secret from
the chart alone, and the served chain includes the intermediate certificate.
A new version of the vault certificate reaches the Secret without a deploy.
Estates with the app routing add-on are unchanged (value unset by default).
Documented departure on the affected estate: its deviations record names the hand step and this
chart change as the route to retire it.
Status: the chart half is merged on main in #131 (merge commit e92f8ab).
Opt-in value ingress.tlsFromKeyVault.certificate renders templates/memex-portal/ingress-tls-secretproviderclass.yaml: a SecretProviderClass with a kubernetes.io/tls secretObject named ingress.tlsSecret. Both tls.key and tls.crt come from the certificate object read as objectType: secret, which is its PEM bundle including the chain. The portal pod mounts it.
Unset by default: estates on the app routing add-on render byte-identically.
check-chart-invariants.sh carries the fixture values.ingress-tls-keyvault.yaml with a by-name evidence check, plus refusal controls for a second writer (cert-manager issuer). Re-rendered locally from today's main: the SPC, the ingress-tls CSI volume and mount, and meshweaver.io/tls-secret: "key-vault" are all present.
Still open, and not a code step: the acceptance on the affected estate. That estate sets ingress.tlsFromKeyVault.certificate (plus vaultName/tenantId/identityClientId, or relies on the keyVaultSecrets fallback) in its private overlay, confirms the Key Vault Secrets Provider runs with rotation enabled and the reader identity has secret GET, and deploys through its lane. Then verify that a fresh namespace gets the Secret and that the served chain includes the intermediate, and retire the hand step in its deviations record. Leaving this open until then.
Activity
feat(chart): sync the Ingress TLS Secret from a Key Vault certificate (…
rbuergi commentedon Nov 5, 2026
Status: the chart half is merged on
mainin #131 (merge commit e92f8ab).ingress.tlsFromKeyVault.certificaterenderstemplates/memex-portal/ingress-tls-secretproviderclass.yaml: a SecretProviderClass with akubernetes.io/tlssecretObject namedingress.tlsSecret. Bothtls.keyandtls.crtcome from the certificate object read asobjectType: secret, which is its PEM bundle including the chain. The portal pod mounts it.check-chart-invariants.shcarries the fixturevalues.ingress-tls-keyvault.yamlwith a by-name evidence check, plus refusal controls for a second writer (cert-manager issuer). Re-rendered locally from today'smain: the SPC, theingress-tlsCSI volume and mount, andmeshweaver.io/tls-secret: "key-vault"are all present.Still open, and not a code step: the acceptance on the affected estate. That estate sets
ingress.tlsFromKeyVault.certificate(plusvaultName/tenantId/identityClientId, or relies on thekeyVaultSecretsfallback) in its private overlay, confirms the Key Vault Secrets Provider runs with rotation enabled and the reader identity has secret GET, and deploys through its lane. Then verify that a fresh namespace gets the Secret and that the served chain includes the intermediate, and retire the hand step in its deviations record. Leaving this open until then.