Repository navigation
bug(helm): clientCaSecretName="" does not remove client_ca_path from gateway config #2095
Copy link
Copy link
Closed
Copy link
Labels
area:clusterRelated to running OpenShell on k3s/dockerRelated to running OpenShell on k3s/dockerarea:gatewayGateway server and control-plane workGateway server and control-plane workstate:staleInactive item at risk of automatic closure.Inactive item at risk of automatic closure.
Description
Agent Diagnostic
- Explored
deploy/helm/openshell/templates/gateway-config.yaml— theclient_ca_pathline is rendered unconditionally, regardless ofserver.tls.clientCaSecretName. - Explored
deploy/helm/openshell/templates/_gateway-workload.tpl— thetls-client-cavolume mount is also unconditional. WhenclientCaSecretNameis empty, it falls back toopenshell-server-tlsviaclientCaFromServerTlsSecret: true. - Explored
deploy/helm/openshell/values.yaml:229-231— the comment says "Set to empty string to disable mTLS and run HTTPS-only", but the template does not condition on this value. - Verified by deploying with
--set server.tls.clientCaSecretName="": gateway logs still showTLS client certificate verification enabled. Browsers getERR_BAD_SSL_CLIENT_AUTH_CERTwhen connecting through a passthrough route. - Workaround: manually patch the ConfigMap to remove
client_ca_pathafter each Helm install/upgrade.
Description
Setting server.tls.clientCaSecretName="" in the Helm values is documented as the way to disable mTLS and run HTTPS-only (for OIDC auth). However, the gateway config template still renders client_ca_path in the TOML, and the StatefulSet still mounts the tls-client-ca volume. The gateway starts with TLS client certificate verification enabled regardless.
Reproduction Steps
- Install the chart with mTLS disabled:
helm install openshell oci://ghcr.io/nvidia/openshell/helm-chart \ --version 0.0.70 -n openshell \ --set server.tls.clientCaSecretName="" - Check the rendered TOML:
oc get configmap openshell-config -n openshell \ -o jsonpath='{.data.gateway\.toml}' | grep client_ca_path
- Check gateway logs:
oc logs statefulset/openshell -n openshell | grep -i "client cert"
Expected: No client_ca_path in the TOML, gateway logs show HTTPS-only without client cert verification.
Actual: client_ca_path = "/etc/openshell-tls/client-ca/ca.crt" is present. Gateway logs: TLS client certificate verification enabled.
Environment
- OS: macOS 15.x (Apple Silicon)
- OpenShift: ROSA HCP 4.21 (Kubernetes 1.34.2)
- OpenShell: v0.0.70 chart
Logs
INFO openshell_server::cli: TLS enabled — listening on encrypted HTTPS
INFO openshell_server::cli: TLS client certificate verification enabledAfter manual ConfigMap patch (removing client_ca_path):
INFO openshell_server::cli: TLS enabled — listening on encrypted HTTPS
# no "client certificate verification" lineWorkaround
Manually patch the ConfigMap after each helm install/upgrade:
oc get configmap openshell-config -n openshell -o json | \
python3 -c "
import json, sys
cm = json.load(sys.stdin)
toml = cm['data']['gateway.toml']
toml = toml.replace('client_ca_path = \"/etc/openshell-tls/client-ca/ca.crt\"\n', '')
cm['data']['gateway.toml'] = toml
json.dump(cm, sys.stdout)
" | oc replace -f -
oc rollout restart statefulset openshell -n openshell- I pointed my agent at the repo and had it investigate this issue
- I loaded relevant skills (e.g.,
debug-openshell-cluster,debug-inference,openshell-cli) - My agent could not resolve this — the diagnostic above explains why
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:clusterRelated to running OpenShell on k3s/dockerRelated to running OpenShell on k3s/dockerarea:gatewayGateway server and control-plane workGateway server and control-plane workstate:staleInactive item at risk of automatic closure.Inactive item at risk of automatic closure.
Activity
TaylorMutch commentedon Jul 11, 2026
github-actions commentedon Jul 27, 2026
This issue has had no activity for 14 days and is now marked stale. It may be closed in 7 days if there is no further activity. Comment or remove the state:stale label to keep it open.