Skip to main content
If your organization signs TLS certificates with a private Certificate Authority (CA) instead of a public one, clients do not trust those certificates by default. TLS handshakes fail with errors such as x509: certificate signed by unknown authority or unable to verify the first certificate. To fix this, the CA bundle must be present in the trust store of every pod that opens the connection. TrueFoundry supports this in three scenarios.
This configuration is only needed for self-signed or internal CA certificates. Endpoints with certificates issued by a public CA are already trusted.

Control plane calling endpoints signed by a custom CA

Control plane components do not talk to each other over TLS — traffic between them is plain pod-to-pod communication inside the cluster. The control plane needs a custom CA when TrueFoundry services make outbound calls to endpoints that present a certificate signed by your private CA, such as model endpoints, integration provider endpoints, private registries, or corporate proxies. Set the CA in your truefoundry chart values:
truefoundry-values.yaml
You can also reference an existing ConfigMap that holds the certificate under the key ca-certificates.crt:
truefoundry-values.yaml
For the full walkthrough, including how to build the ConfigMap and upgrade the release, see How to configure custom CA certificates.

Compute plane connecting to the control plane

tfy-agent runs on the compute plane and connects to your control plane URL. If that URL serves a certificate signed by a private CA, or the traffic passes through a corporate TLS proxy, the agent needs the CA bundle. Set the CA in your tfy-agent chart values. When enabled, the bundle is mounted into the tfyAgent, tfyAgentProxy, and sdsServer pods:
tfy-agent-values.yaml
Install or upgrade tfy-agent after the control plane is reachable, so the agent can complete its first connection. See TFY Agent for the full agent configuration.

Workloads calling endpoints signed by a custom CA

Workloads deployed through TrueFoundry — services, jobs, notebooks, and LLM deployments — run from arbitrary container images in workspace namespaces. When these workloads call an endpoint that presents a certificate signed by your private CA, they need the CA bundle too, and no single Helm value covers images you do not build. TrueFoundry handles this with two Kyverno policies packaged in the tfy-kyverno-config chart: Together they remove the need to rebuild images, patch pod specs, or distribute certificates by hand.

Prerequisites

  • A compute plane cluster connected to your TrueFoundry control plane.
  • Cluster admin access, because both policies are cluster-scoped resources.
  • Kyverno installed on the cluster.
  • tfy-kyverno-config chart version 0.1.10 or later.
  • Your internal CA certificate in PEM format, referred to below as custom-ca.crt.
1

Build the combined CA bundle

The bundle you distribute must contain the public CA certificates and your internal CA. If you ship only your internal CA, workloads lose trust for every public endpoint.Extract a current public bundle from a standard image:
Check that your internal CA certificate is valid:
Append it to the public bundle:
2

Create the CA bundle ConfigMap

Create the ConfigMap in a source namespace. The examples use the truefoundry namespace and the ConfigMap name ca-cert-bundle, which is the chart default. The key must be ca-certificates.crt.
To update an existing ConfigMap, apply it instead:
The sync policy watches this ConfigMap, so future certificate rotations only need this one update.
3

Install Kyverno

If Kyverno is already installed on the cluster, skip this step and reuse the existing installation.
4

Configure tfy-kyverno-config

Create the chart values:
kyverno-config-values.yaml
tfy-* matches the namespaces that TrueFoundry creates for workspaces. Adjust the include list if your workspaces use a different naming pattern, and add excludeNamespaces for namespaces that must be skipped.
5

Deploy the chart

Deploying from the platform records the chart version and change history, which makes later upgrades easier to track.
  1. In the TrueFoundry dashboard, go to Deployments and click New.
  2. Click Show advanced and select Helm.
  3. Choose Public Helm Repository as the chart source and fill in:
    • Helm repository URL: https://truefoundry.github.io/infra-charts
    • Chart name: tfy-kyverno-config
    • Version: the chart version you want to pin
  4. Paste your values into the values editor and click Submit.
See Deploy Helm Charts for the full flow, including OCI registry and Git repository sources for air-gapped clusters.
These policies are cluster-scoped. Deploying Helm charts that create cluster-scoped objects requires cluster admin privileges. If your setup does not allow that, install the chart with the Helm CLI instead.
6

Verify the injection

Confirm both policies exist. You should see <release-name>-sync-configmaps and <release-name>-pod-volume-mounts:
Confirm the ConfigMap was cloned into a workspace namespace:
Deploy or restart a workload, then check the mount and the environment variables:
Confirm the workload reaches an endpoint that uses your internal CA:

Policies created by the chart

The chart renders these manifests from your values. They are shown here so you can review what is applied to the cluster. ConfigMap sync:
Pod volume mounts. The init container rule mirrors the container rule and is rendered only when mountInitContainers is enabled:

Configuration reference

The generated policy sets generateExisting: true and synchronize: true, so it populates namespaces that already exist as well as new ones, and propagates later changes to the source ConfigMap.
Each entry in mountDetails and additionalMountDetails accepts:For example, to mount a TLS Secret alongside the default CA bundle:
kyverno-config-values.yaml
When mountDetails is empty, the chart mounts the CA bundle and sets the variables that most runtimes read:
Setting mountDetails replaces these defaults, including the environment variables. To keep the CA mount and add more volumes, use additionalMountDetails.
Some runtimes keep their own trust store and ignore these variables. For Node.js applications, add NODE_EXTRA_CA_CERTS pointing at the same path. For Java applications, import the CA into the JVM truststore.

Troubleshooting

Use these commands to narrow down where the injection stopped. Check whether the sync policy ran and what it reported:
Check whether a running pod received the volume:
Check the certificate chain that the endpoint serves against the mounted bundle: