Gov-Ready Third-Party Services
Third-party services are a set of supporting services deployed as part of the NVIDIA Run:ai installation, including Keycloak for authentication and identity management, PostgreSQL as the centralized database, Traefik as the API gateway, NATS for asynchronous communication, and others. A Gov-ready installation replaces the default images of these services with FIPS-validated hardened images. This page lists the services you change, the registry you pull the hardened images from, and the Helm values to set, including any preparation required before installation. Complete these steps before installing the control plane and cluster. For supported versions of each service, refer to the Support Matrix.
Image Registry
Gov-ready third-party images are FIPS-enabled Docker Hardened Images (DHI). You pull them from Docker Hub (docker.io). For the outbound access required to reach it, refer to External Access to Critical Services.
Getting Access
FIPS-enabled Docker Hardened Images require a paid Docker subscription (DHI Select or DHI Enterprise). To get access:
- Subscribe to Docker Hardened Images.
- In Docker Hub, add the repository of each image listed on this page to your Docker Hub organization, using the Docker Hub UI or the
docker dhi mirror startcommand. This is required to get the FIPS variants, in both connected and air-gapped environments. - Create an access token with at least read-only access to those repositories. Use an Organization Access Token for an organization, or a Personal Access Token for a personal account.
To add the repositories, you need to be an organization owner or editor, or have the Docker Hub permission for adding Docker Hardened Image repositories. The examples on this page use <organization> for your Docker Hub organization name, and dhi-<name> for each repository, for example dhi-keycloak.
For the exact steps, refer to the Docker documentation on using Docker Hardened Images.
Docker Hub Credentials
The Docker Hub credentials work the same way in Guided Installation and Manual Helm. How you provide them depends on whether your environment is connected or air-gapped.
Connected
Connected
-
Create the control plane and cluster namespaces. This step is required in both Manual Helm and Guided Installation, because the secret must exist in each namespace before you install.
-
Create a Kubernetes image pull secret from your access token in each namespace. Replace
<dhi-secret-name>with a name of your choice, and use the same name wherever you reference the secret. Use your Docker ID as the username for a Personal Access Token, or your organization name for an Organization Access Token.
During the installation, reference the secret in the Helm values. The NVIDIA Run:ai images still need the runai-reg-creds secret that holds your NGC credentials, so list both secrets, with runai-reg-creds first. The installer sets the first entry to runai-reg-creds, and a list in your values that starts with another secret overrides it, so the NVIDIA Run:ai images would no longer be pulled.
- Manual Helm - Add the values to the control plane and cluster values you pass to Helm. Refer to Manual Helm.
- Guided Installation - Add the values under
controlPlane.customHelmValuesandcluster.customHelmValuesin the installer configuration. Refer to Guided Installation.
Air-gapped
Air-gapped
Your cluster cannot reach Docker Hub, so you do not create a Kubernetes secret. Instead, you provide the hardened images and your Docker Hub credentials in the pack configuration, the file you pass to airgap pack. Add an imageOverrides entry for each hardened image, so that the bundle contains it instead of the default image, and a registryAuth entry with your Docker Hub credentials. Use your Docker ID as the username for a Personal Access Token, or your organization name for an Organization Access Token, and the access token as the password.
Note
To fill in a source, copy the full image reference of the repository and tag from your Docker Hub dashboard and paste it in, instead of typing the organization, repository, and tag separately.
Each source is the full image reference of the hardened image in your Docker Hub organization, including the tag. The postgres entry is the PostgreSQL wait image.
Then pack and load the bundle. For the full procedure, refer to Air-Gapped Bundle in Guided Installation, or Preparations in Manual Helm. For the values you set at install time, refer to Where to Set the Values.
Where to Set the Values
Write the values in a file or in the installer configuration, depending on the installation path:
- Manual Helm - Save the values in a YAML file and pass it with
-fto thehelm upgradecommands in Install the Control Plane and Install the Cluster. Use one file for the control plane values and one for the cluster values, because they belong to different charts. - Guided Installation - Add the control plane values under
controlPlane.customHelmValuesand the cluster values undercluster.customHelmValuesin the installer configuration. Refer to Guided Installation.
Air-Gapped Installations
In an air-gapped installation, the hardened images reach your cluster through the air-gapped bundle, in three stages:
- Pack - On a machine that can reach Docker Hub,
airgap packpulls the hardened images from your Docker Hub organization and adds them to the bundle, together with the other NVIDIA Run:ai images. - Load - Inside the air-gapped network,
airgap loadpushes every image in the bundle to your own private registry. You do not copy the hardened images to your private registry yourself. - Install - The values files that
airgap loadgenerates point the services at your private registry, so the installation pulls the hardened images from there and Docker Hub is never contacted.
An air-gapped installation provides values in three places:
In the sections below, do not set the image registry, repository, and tag values. You enter the image locations in the pack configuration, and the values generated by the load step set them. Set only the other values. In Manual Helm, pass your values file in addition to the values file that airgap load generates.
Control Plane Services
Set the following values in the control plane values, as described in Where to Set the Values.
In a Gov-ready installation, PostgreSQL must be an externally managed instance. NATS and Thanos can also be replaced with externally managed instances, as in a standard installation. The image changes for NATS and Thanos apply when you use the instances deployed with NVIDIA Run:ai.
Keycloak
Keycloak provides authentication and identity management for the NVIDIA Run:ai control plane. It is deployed as part of the control plane Helm chart using Keycloakx (keycloakx), and is not supported as an external service. For Helm configuration fields and changing the admin password, refer to Advanced Control Plane Configurations.
Replace the Keycloak image, add the fips feature to the start command, and run the container as user ID 65532. The hardened image restricts its files to that user, and Keycloak does not start without it. Compared with the default start command, the only difference is fips added to --features. Helm replaces the whole command value, so the example shows the full command.
PostgreSQL
PostgreSQL is the centralized database for the NVIDIA Run:ai control plane. Gov-ready installations always use an externally managed PostgreSQL instance that is FIPS-ready. You provide and manage the instance. Only PostgreSQL version 16 is supported.
Using an External PostgreSQL Instance
To use your external instance, set postgresql.enabled: false, configure global.postgresql.auth.* with the connection details of your server.
Before installing, provision the database and role on your PostgreSQL server. NVIDIA Run:ai uses the role to create a user for each service, and each service has its own schema in the database. Each service user has permissions only on its own schema. The role owns the database, so that it has administrative permissions over it:
-
Create an SQL script file, edit the parameters below, and save it locally:
- Replace
<DATABASE_NAME>with a dedicated database name for NVIDIA Run:ai in your PostgreSQL database. - Replace
<ROLE_NAME>with a dedicated role name (user) for the NVIDIA Run:ai database. - Replace
<ROLE_PASSWORD>with a password for the new PostgreSQL role.
- Replace
-
Run the following command on a machine where PostgreSQL client (
pgsql) is installed:- Replace
<POSTGRESQL_HOST>with the PostgreSQL IP address or hostname. - Replace
<POSTGRESQL_USER>with the PostgreSQL username. - Replace
<POSTGRESQL_PORT>with the port number where PostgreSQL is running. - Replace
<POSTGRESQL_DB>with the name of your PostgreSQL database. - Replace
<SQL_FILE>with the path to the SQL script created in the previous step.
- Replace
Then configure the chart to use the provisioned database.
Configuring External PostgreSQL
PostgreSQL Wait Image
NVIDIA Run:ai services use a PostgreSQL client image in init containers to wait until the database is available. This image is required even when you provide your own PostgreSQL instance. Replace it with the hardened image:
Traefik
Traefik serves as the API gateway for the NVIDIA Run:ai control plane, handling token verification and micro-service routing. It is deployed as part of the control plane Helm chart and is not supported as an external service.
Replace the Traefik image:
NATS
NATS provides caching and asynchronous communication for the NVIDIA Run:ai control plane. It is deployed using Bitnami NATS (nats).
Replace the NATS image and override the command. The hardened image places the binary at /nats-server, so the default nats-server command cannot start it.
Using an External NATS Instance
To replace the deployed NATS with an external instance, set nats.enabled: false and provide the connection URLs and credentials for both cache and pub/sub operations.
Thanos
Thanos provides single-tenant metrics storage for the NVIDIA Run:ai control plane. It is deployed using Bitnami Thanos (thanos). For built-in Thanos storage tuning, refer to Advanced Control Plane Configurations.
Replace the Thanos image:
Using an External Thanos Instance
To replace the deployed Thanos with an external metrics store, set thanos.enabled: false and provide the read and write URLs for the external instance.
Cluster Services
NVIDIA Run:ai cluster services support the workloads running on a NVIDIA Run:ai cluster, rather than the platform itself. Each is deployed automatically as part of the cluster Helm chart and does not support an external instance. Set the following values in the cluster values, as described in Where to Set the Values.