Skip to content

feat(helm): add BackendTLSPolicy support - #2728

Open
bsquizz wants to merge 22 commits into
NVIDIA:mainfrom
bsquizz:feat/backend-tls-policy
Open

feat(helm): add BackendTLSPolicy support#2728
bsquizz wants to merge 22 commits into
NVIDIA:mainfrom
bsquizz:feat/backend-tls-policy

Conversation

@bsquizz

@bsquizz bsquizz commented Aug 12, 2026

Copy link
Copy Markdown

Add BackendTLSPolicy support for end-to-end TLS between Gateway proxies and the OpenShell gateway pod, with automated backend CA ConfigMap creation, single-stage install with cert-manager, configuration validation, and explicit mTLS control.

Summary

This PR enables end-to-end TLS for Gateway API deployments by adding BackendTLSPolicy support. The Gateway proxy terminates client-facing TLS and re-encrypts when connecting to the backend, validating the gateway pod's certificate against an auto-created CA ConfigMap. A new server.tls.enableMtls flag provides explicit control over mTLS client certificate authentication, which must be disabled when using BackendTLSPolicy because ingress proxies cannot present client certificates to backends.

The certgen hook now polls for cert-manager certificates, and cert-manager Certificate resources run as pre-install hooks (weight -30) before certgen (weight -20), ensuring proper ordering. This eliminates the two-stage install requirement - a single helm install succeeds when cert-manager issues certificates within the configurable timeout. By default, the install fails immediately if the timeout is reached (pkiInitJob.failOnTimeout=true), providing clear feedback that BackendTLSPolicy is non-functional rather than silently succeeding with an incomplete configuration.

Configuration validation prevents invalid combinations - the chart fails at install time if both server.tls.enableMtls=true and grpcRoute.backendTLSPolicy.enabled=true are set.

Traffic flow: client → HTTPS → Gateway (terminate) → TLS (re-encrypt) → gateway pod

Related Issue

No issue required: adds optional deployment path for OpenShift 4.22+ and other platforms with BackendTLSPolicy support.

Changes

  • BackendTLSPolicy resource: New grpcRoute.backendTLSPolicy.* values to optionally create a BackendTLSPolicy that configures the Gateway proxy to validate the backend's TLS certificate
  • Auto-created backend CA: The certgen hook now automatically creates the backend CA ConfigMap (<fullname>-backend-ca) from the server certificate CA when backendTLSPolicy.enabled=true
    • With pkiInitJob (default): created during install/upgrade
    • With cert-manager: Certificate resources run as pre-install hooks (weight -30), then certgen hook (weight -20) polls for certificate issuance and creates ConfigMap — single-stage install
  • Fixed hook ordering: Certificate and Issuer resources are now pre-install hooks with weight -30, running before certgen (weight -20). This fixes the chicken-and-egg problem where certgen was waiting for Secrets from Certificates that hadn't been created yet.
  • Configuration validation: Chart fails at install time if both server.tls.enableMtls=true and grpcRoute.backendTLSPolicy.enabled=true are set, preventing invalid configurations from being deployed
  • Configurable timeout: New pkiInitJob.timeoutSeconds value (default 120) controls the polling duration for cert-manager certificate issuance
    • The value represents the actual polling time users experience
    • Job deadline is automatically set to (timeoutSeconds + 30) to allow buffer time for ConfigMap creation
    • Example: --set pkiInitJob.timeoutSeconds=180 polls for exactly 180 seconds
  • Fail-fast by default: New pkiInitJob.failOnTimeout value (default true) controls hook behavior on timeout
    • When true (default): hook fails immediately, install fails, clear feedback that BackendTLSPolicy is incomplete
    • When false: hook succeeds with warning, install completes, BackendTLSPolicy non-functional until helm upgrade
  • Troubleshooting documentation: Added detailed troubleshooting section for the error TLS error: Secret is not supplied by SDS with step-by-step resolution when the backend CA ConfigMap is missing
  • Explicit mTLS control: New server.tls.enableMtls flag (default true) to control mTLS client certificate authentication independently of BackendTLSPolicy
    • Users must set to false when using BackendTLSPolicy
    • Chart validates this requirement and fails at install time if violated
  • Documentation: Updated OpenShift and ingress docs with end-to-end TLS setup instructions, hook ordering explanation, timeout configuration, failure behavior options, validation behavior, and troubleshooting guidance
  • Tests: Added Helm unit tests for BackendTLSPolicy rendering and mTLS flag behavior

Testing

  • mise run pre-commit passes
  • Helm unit tests added for BackendTLSPolicy and enableMtls flag (106 tests passing)
  • Code compiles and passes clippy
  • Fixed hook ordering verified with Helm template rendering
  • Validation tested: fails with enableMtls=true + backendTLSPolicy=true, succeeds with enableMtls=false
  • Documented troubleshooting for "TLS error: Secret is not supplied by SDS"
  • E2E tests with cert-manager (manual validation on OpenShift 4.22+ or Envoy Gateway)

Checklist

  • Follows Conventional Commits
  • Commits are signed off (DCO)
  • Architecture docs updated (Helm README, ingress.mdx, openshift.mdx)
  • Breaking change documented in PR description and commit message
  • Hook ordering fix for cert-manager resources
  • Configuration validation for incompatible settings

@copy-pr-bot

copy-pr-bot Bot commented Aug 12, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@bsquizz
bsquizz force-pushed the feat/backend-tls-policy branch 3 times, most recently from e0d974d to 24b1c23 Compare August 20, 2026 15:35
@bsquizz bsquizz changed the title Draft: feat(helm): add optional BackendTLSPolicy for e2e TLS feat(helm): add BackendTLSPolicy support with auto-CA and mTLS control Aug 20, 2026
@bsquizz

bsquizz commented Aug 20, 2026

Copy link
Copy Markdown
Author

Starting to test E2E in both k8s (kind) and OpenShift.

@bsquizz

bsquizz commented Aug 20, 2026

Copy link
Copy Markdown
Author

Tested sandbox connectivity on kind with a pre-existing network Gateway, with TLS enabled. Verified BackendTLSPolicy exists.

  helm upgrade --install openshell deploy/helm/openshell \
    --namespace openshell \
    --create-namespace \
    --set image.repository=localhost/openshell/gateway \
    --set image.tag=dev \
    --set image.pullPolicy=Never \
    --set supervisor.image.repository=localhost/openshell/supervisor \
    --set supervisor.image.tag=dev \
    --set supervisor.image.pullPolicy=Never \
    --set grpcRoute.enabled=true \
    --set grpcRoute.backendTLSPolicy.enabled=true \
    --set grpcRoute.gateway.create=false \
    --set grpcRoute.gateway.name=gw \
    --set grpcRoute.gateway.namespace=gw-namespace \
    --set server.tls.enableMtls=false \
    --set server.oidc.issuer='' \
    --set server.auth.allowUnauthenticatedUsers=true \
    --set 'grpcRoute.hostnames[0]=openshell-gateway.gw.localhost' \

both with / without --set certManager.enabled=true (with cert-manager, a second 'upgrade' is required after cert-manager issues the certificate in order to create the ConfigMap for the BackendTLSPolicy to consume. This is documented and expected)

@bsquizz bsquizz changed the title feat(helm): add BackendTLSPolicy support with auto-CA and mTLS control feat(helm): add BackendTLSPolicy support with auto-CA and single-stage install Aug 21, 2026
@bsquizz

bsquizz commented Aug 21, 2026

Copy link
Copy Markdown
Author

Changed the way this works so that a follow-up 'helm upgrade' is not required. Now, the certgen hook will wait for cert-manager to issue a certificate. Timeout is configurable, and failing upon timeout is also configurable (default: true)

Tested on OpenShift 4.22.9 when using cert-manager with:

  helm install openshell deploy/helm/openshell \
    --namespace bsquizza-openshell-test \
    --set image.repository=openshell-gateway \
    --set image.tag=9d0f8cc \
    --set supervisor.image.repository=openshell-supervisor \
    --set supervisor.image.tag=9d0f8cc \
    --set grpcRoute.enabled=true \
    --set grpcRoute.backendTLSPolicy.enabled=true \
    --set grpcRoute.gateway.create=false \
    --set grpcRoute.gateway.name=openshell-grpc-gateway \
    --set grpcRoute.gateway.namespace=openshift-ingress \
    --set server.tls.enableMtls=false \
    --set server.oidc.issuer='' \
    --set server.auth.allowUnauthenticatedUsers=true \
    --set 'grpcRoute.hostnames[0]=testgw.mygw.example.com' \
    --set podSecurityContext.fsGroup=null \
    --set securityContext.runAsUser=null \
    --set certManager.enabled=true \
    --set pkiInitJob.timeoutSeconds=180

Also tested without cert-manager by removing:

    --set certManager.enabled=true \
    --set pkiInitJob.timeoutSeconds=180

@bsquizz
bsquizz marked this pull request as ready for review August 21, 2026 20:35
@bsquizz bsquizz changed the title feat(helm): add BackendTLSPolicy support with auto-CA and single-stage install feat(helm): add BackendTLSPolicy support Aug 21, 2026
@bsquizz
bsquizz force-pushed the feat/backend-tls-policy branch from 66c4809 to 30905b2 Compare August 24, 2026 21:32
@jhjaggars

Copy link
Copy Markdown
Contributor

Review findings

  1. Enabling BackendTLSPolicy on an existing built-in-PKI release creates the wrong trust anchor. The hook generates a new in-memory PKI bundle on every run, but run_kubernetes skips the already-existing server/client/JWT Secrets. It then writes the newly generated bundle's unrelated CA to the backend ConfigMap. On an upgrade that first enables this feature, the Gateway proxy will reject the existing server certificate. The backend CA should come from the authoritative server Secret (as it does in cert-manager mode), or run_kubernetes should report whether it created the current bundle. Details: crates/openshell-server/src/certgen.rs:126-130, :214-245, :360-362.

  2. The backend CA ConfigMap is never reconciled. Once the ConfigMap exists, certgen returns without comparing or updating ca.crt. A later CA rotation or server Secret replacement therefore leaves the ingress proxy trusting stale material and can break external access. Please reconcile the ConfigMap from the authoritative CA on every hook run rather than treating existence as sufficient. Details: crates/openshell-server/src/certgen.rs:345-357.

  3. The cert-manager Issuers and Certificates now escape Helm's release lifecycle. These long-lived resources were previously normal release objects. Marking all of them as hooks means Helm will not manage them as part of uninstall or removal through certManager.enabled=false; they can remain active and continue reconciling/renewing Secrets. Please preserve lifecycle cleanup or use a different ordering mechanism. Details: deploy/helm/openshell/templates/cert-manager-pki.yaml:11-26, :78-80, :156-158.

  4. Required companion references and deployment skills were not updated. The canonical PKI architecture still describes only Secret outputs and the old idempotency contract; the Kubernetes gateway-config example does not explain conditional client_ca_path; and the cluster/Helm skills have no BackendTLSPolicy, backend CA ConfigMap, timeout, or enableMtls diagnostics. The gateway-deployment maintenance map explicitly routes this kind of change to debug-openshell-cluster and helm-dev-environment. Details: architecture/gateway.md:628-659, docs/reference/gateway-config.mdx:421-440, .agents/skills/debug-openshell-cluster/SKILL.md:320-374, .agents/skills/helm-dev-environment/SKILL.md:180-193, .agents/skills/sync-agent-infra/SKILL.md:45.

@bsquizz

bsquizz commented Aug 27, 2026

Copy link
Copy Markdown
Author

Implemented feedback and re-tested successfully in our e2e setup

Add grpcRoute.backendTLSPolicy values to optionally create a
BackendTLSPolicy resource that enables end-to-end TLS between the
Gateway proxy and the OpenShell gateway pod. The Gateway proxy
terminates client-facing TLS and re-encrypts when connecting to the
backend, validating the pod's certificate against a user-supplied CA
ConfigMap.

This removes the requirement to set server.disableTls=true when using
HTTPS at the Gateway listener. Supported on OpenShift 4.22+ and other
platforms with BackendTLSPolicy support in the Gateway API
implementation.

Update OpenShift and ingress documentation with e2e TLS instructions.

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
Extend the generate-certs command with --backend-ca-configmap-name and
--backend-ca-source-secret flags. When BackendTLSPolicy is enabled, the
certgen pre-install hook creates the CA ConfigMap automatically:

- pkiInitJob mode (default): uses the CA from the generated PKI bundle.
  Fully automatic on first install.
- cert-manager mode: reads ca.crt from the server TLS Secret. On first
  install the Secret does not exist yet (cert-manager reconciles after
  templates are applied), so the ConfigMap is created on the first helm
  upgrade. Logs a warning on the initial skip.

The caCertificateConfigMapName value now defaults to <fullname>-backend-ca
when empty, so users only need to set backendTLSPolicy.enabled=true.

Update certgen RBAC to include configmaps get/create when the feature is
enabled. Add CLI arg parsing tests for the new flags.

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
Replace automatic mTLS disabling based on BackendTLSPolicy with an
explicit server.tls.enableMtls flag that defaults to true. The user is
now responsible for setting this to false when using BackendTLSPolicy,
as ingress proxies cannot present client certificates to backends.

Updated:
- values.yaml: Added server.tls.enableMtls (default true)
- gateway-config.yaml: Check enableMtls instead of backendTLSPolicy
- _gateway-workload.tpl: Check enableMtls for client CA mount
- Tests: Updated to use enableMtls flag
- Docs: Added enableMtls=false to BackendTLSPolicy examples
- README: Document new flag and BackendTLSPolicy requirement

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
Update documentation to explain the two-step install process required
when using cert-manager with BackendTLSPolicy:

1. helm install - cert-manager issues the server certificate, but the
   certgen hook can't create the backend CA ConfigMap yet (cert-manager
   reconciles after templates are applied)
2. helm upgrade - certgen hook reads the CA from the cert-manager-issued
   certificate and creates the ConfigMap

Previously, the docs said "created on first upgrade" without explaining
why or that the feature won't work until then. The updated docs now:
- Explain the timing issue (cert-manager reconciles after chart install)
- Provide clear steps for the cert-manager workflow
- Note that pkiInitJob (default) creates it immediately on install
- Clarify that users must wait for the Certificate to be Ready before
  running the second upgrade

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
…TLSPolicy

BackendTLSPolicy validates the backend certificate against the service FQDN
(e.g., openshell.openshell.svc.cluster.local), not the external hostname.
The external hostname only needs to be on the Gateway listener certificate
for client-facing TLS.

The default certManager.serverDnsNames already includes all required service
FQDN variants, so no configuration is needed for BackendTLSPolicy to work.

Fixed incorrect documentation that claimed:
- "The server certificate SAN list must include the external hostname"
- Users need to "configure certManager.serverDnsNames with the external hostname"

Removed the unnecessary pkiInitJob.serverDnsNames override from the example
and clarified that:
- Gateway listener certificate needs the external hostname (for clients)
- Backend certificate needs the service FQDN (for Gateway proxy)
- The service FQDN is already in the defaults

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
Change all references from "ACME issuer" to "LetsEncrypt/ACME issuer"
to help users understand that LetsEncrypt is the most common ACME
provider and what ACME means in practice.

Updated:
- docs/kubernetes/managing-certificates.mdx
- docs/kubernetes/openshift.mdx
- deploy/helm/openshell/values.yaml
- deploy/helm/openshell/README.md
- deploy/helm/openshell/ci/values-openshift-route-cert-manager.yaml

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
…ay hostname

Reorganize the OpenShift production deployment documentation:

1. Changed main section from "Production Deployments" to "Options for
   end-to-end TLS" for better clarity

2. Renamed subsections for consistency and clarity:
   - "End-to-end TLS using Gateway API and BackendTLSPolicy (OpenShift 4.22+)"
   - "End-to-end TLS using pass-through Route (all OpenShift versions)"

3. Clarified that the Gateway hostname is typically a wildcard:
   "typically a wildcard like *.openshell-ingress-gw.example.com"

4. Removed the recommendation to copy the cluster's wildcard certificate
   from openshift-ingress namespace, as this is not a recommended
   security best practice

These changes make it clearer that users have two end-to-end TLS options
and help them understand the typical naming pattern for Gateway hostnames.

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
…t-manager

When using BackendTLSPolicy with cert-manager, the certgen hook now polls
for up to 90 seconds waiting for cert-manager to issue the TLS certificate
before creating the backend CA ConfigMap. This eliminates the need for a
second `helm upgrade` in most cases.

The hook polls every 2 seconds with progress logging every 10 seconds.
If cert-manager takes longer than 90 seconds, the hook times out gracefully
and logs a warning, preserving the fallback to manual ConfigMap creation
or a second upgrade.

The Job's activeDeadlineSeconds is 120s, so the 90s timeout leaves 30s
margin for ConfigMap creation and hook completion.

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
Add `pkiInitJob.timeoutSeconds` Helm value (default 120) to control how long
the certgen hook Job can run. When using cert-manager with BackendTLSPolicy,
the hook polls for (timeoutSeconds - 30) seconds to leave margin for ConfigMap
creation and cleanup.

This allows users to increase the timeout for environments where cert-manager
takes longer than 90 seconds to issue certificates, without requiring code
changes.

Example usage:
```yaml
pkiInitJob:
  timeoutSeconds: 180  # Hook polls for 150 seconds
```

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
Update documentation to mention the pkiInitJob.timeoutSeconds value and
how it affects the cert-manager polling behavior when using BackendTLSPolicy.

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
Add `pkiInitJob.failOnTimeout` Helm value (default false) to control whether
the certgen hook fails or succeeds when cert-manager does not issue a
certificate within the polling timeout.

When false (default), the hook succeeds with a warning and users can run
`helm upgrade` after cert-manager issues the certificate to create the
backend CA ConfigMap. This provides backwards-compatible behavior.

When true, the hook fails immediately if the timeout is reached, providing
clear feedback that BackendTLSPolicy is non-functional. This is useful for
strict validation requirements where incomplete installs should fail fast.

Example usage:
```yaml
pkiInitJob:
  timeoutSeconds: 180
  failOnTimeout: true  # Fail install if cert-manager takes >150s
```

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
…ing docs

Change `pkiInitJob.failOnTimeout` default from false to true to provide
immediate feedback when cert-manager does not issue certificates within
the polling timeout. This prevents silent failures where BackendTLSPolicy
is non-functional but the install appears to succeed.

Add comprehensive troubleshooting section to docs/kubernetes/ingress.mdx
documenting the specific error "TLS error: Secret is not supplied by SDS"
that occurs when the backend CA ConfigMap is missing, with step-by-step
resolution instructions.

Updated comments in values.yaml to clearly document the default behavior
and explain when administrators might see connectivity errors if they
override the default to failOnTimeout=false.

BREAKING CHANGE: pkiInitJob.failOnTimeout now defaults to true. Helm
installs will fail if cert-manager takes longer than (timeoutSeconds - 30)
seconds to issue certificates. To restore the old behavior of allowing
installs to succeed with a warning, set `pkiInitJob.failOnTimeout=false`.

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
Make Certificate and Issuer resources run as pre-install/pre-upgrade hooks
with weight -30, before the certgen hook (weight -20). This fixes the
chicken-and-egg problem where the certgen hook was waiting for Secrets
created by Certificates that hadn't been created yet.

**Hook ordering:**
1. Certificate and Issuer resources created (weight -30)
2. cert-manager issues certificates and creates Secrets
3. certgen hook runs (weight -20), finds Secrets, creates ConfigMap
4. Main resources (StatefulSet, Service, etc.) created

Previously, the certgen pre-install hook would run before any resources
were created, poll for a non-existent Secret, timeout, and fail. The
Certificate resources would never get created because Helm waits for
all pre-install hooks to succeed before creating main resources.

This fix allows single-stage installs to work reliably as long as
cert-manager can issue certificates within the polling timeout.

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
Add Helm chart validation that fails the install if both
server.tls.enableMtls=true and grpcRoute.backendTLSPolicy.enabled=true
are set, since this is an invalid configuration.

BackendTLSPolicy requires mTLS to be disabled because the Gateway proxy
cannot present client certificates to the backend. This validation provides
immediate, clear feedback at install time rather than allowing the
misconfiguration to be discovered through runtime errors.

Example error message:
```
Error: grpcRoute.backendTLSPolicy requires mTLS to be disabled because
the Gateway proxy cannot present client certificates to the backend;
set server.tls.enableMtls=false
```

Also updated documentation to mention this validation check.

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
Improve documentation to clearly explain that pkiInitJob.timeoutSeconds
controls the Job deadline, but the actual polling timeout is
(timeoutSeconds - 30) to reserve 30 seconds for ConfigMap creation
and cleanup.

Added concrete example: "timeoutSeconds=180 allows 150 seconds of polling"
to make the relationship explicit and avoid confusion where users might
expect the hook to poll for the full timeout value.

Updated both values.yaml inline comments and ingress.mdx documentation
for consistency.

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
Update OpenShift documentation to reflect that single-stage installs now
work with cert-manager and BackendTLSPolicy. The Certificate resources
run as pre-install hooks (weight -30) before certgen (weight -20),
allowing the hook to poll for and find the issued certificates.

Removed the outdated two-step process:
1. helm install (cert-manager issues cert, hook logs warning)
2. helm upgrade (hook creates ConfigMap)

Replaced with current single-stage behavior:
- Certificate resources created as pre-install hooks
- certgen hook polls for up to 90 seconds (configurable)
- Single helm install succeeds in most cases
- Fails fast by default if timeout reached

This brings openshift.mdx in line with the already-updated ingress.mdx
documentation.

Signed-off-by: Brandon Squizzato <bsquizzato@nvidia.com>
The timeout value now represents the actual polling time that users
experience when waiting for cert-manager to issue certificates.
The Job activeDeadlineSeconds is set to (timeoutSeconds + 30) to
allow buffer time for ConfigMap creation and cleanup.

Previously, the hook polled for (timeoutSeconds - 30) seconds, which
was confusing when users set timeoutSeconds=180 and only got 150
seconds of actual polling.

Updated documentation in values.yaml, ingress.mdx, and openshift.mdx
to reflect the clearer behavior.

Signed-off-by: Brandon Squizzato <bsquizza@nvidia.com>
Updated the caCertificateConfigMapName description to reflect that the
hook polls for exactly pkiInitJob.timeoutSeconds seconds, not
(timeoutSeconds - 30) seconds.

Regenerated README.md with helm-docs.

Signed-off-by: Brandon Squizzato <bsquizza@nvidia.com>
…ples

Updated all helm install and openshell gateway add examples in ingress.mdx
and openshift.mdx to include OIDC issuer and audience configuration.

Examples now use concrete placeholder values:
- OIDC issuer: https://keycloak.example.com/realms/openshell
- OIDC audience: openshell-cli
- Hostname: gateway.example.com
- ClusterIssuer: letsencrypt-prod

This makes it clearer how to configure OIDC authentication, which is
required when using BackendTLSPolicy or HTTPS termination since the
Gateway proxy cannot present client certificates to the backend.

Signed-off-by: Brandon Squizzato <bsquizza@nvidia.com>
Added --oidc-client-id openshell-cli to all openshell gateway add
commands in ingress.mdx and openshift.mdx, making the default client
ID explicit in the examples even though it's the CLI default.

This improves clarity and helps users understand the complete OIDC
configuration needed for gateway registration.

Signed-off-by: Brandon Squizzato <bsquizza@nvidia.com>
- Read backend CA from the authoritative server Secret instead of the
  in-memory PKI bundle so enabling BackendTLSPolicy on an existing
  release uses the CA that actually signed the server certificate.
- Reconcile the backend CA ConfigMap on every hook run (compare and
  update) instead of skipping when it already exists, so CA rotations
  propagate automatically.
- Remove hook annotations from cert-manager Issuer/Certificate resources
  so they remain regular release objects managed by Helm lifecycle. Split
  the cert-manager backend CA ConfigMap creation into a separate
  post-install/post-upgrade hook Job that polls after cert-manager
  Certificate resources are applied.
- Update architecture/gateway.md, docs/reference/gateway-config.mdx,
  debug-openshell-cluster skill, and helm-dev-environment skill with
  BackendTLSPolicy, backend CA ConfigMap, enableMtls, and timeout
  documentation.

Signed-off-by: Brandon Squizzato <bsquizza@nvidia.com>
Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
@bsquizz
bsquizz force-pushed the feat/backend-tls-policy branch from 9b6d043 to cb4d05f Compare September 4, 2026 16:41
@mrunalp

mrunalp commented Sep 4, 2026

Copy link
Copy Markdown
Collaborator

/ok to test cb4d05f

… docs

Escape inline HTML angle brackets in README.md template placeholders,
remove trailing spaces, and add blank lines around fenced code blocks
in numbered lists.

Signed-off-by: Brandon Squizzato <bsquizza@redhat.com>
@bsquizz
bsquizz marked this pull request as ready for review September 4, 2026 17:37
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.

3 participants