Istari Platform Installation
Istari Platform installation process consists of two parts:
- Secrets: The Istari Platform requires a few secrets to be created in the Kubernetes cluster. These secrets are used to store sensitive information related to the Istari Platform and its components.
- Istari Platform Helm Chart: The Istari Platform is installed using a Helm chart. The Helm chart contains all the necessary configurations and resources required to deploy the Istari Platform in a Kubernetes cluster.
Secrets
Make sure to replace <customer_istari_fqdn> with the actual domain used for the Istari Digital platform, e.g. istari.customer_domain.com.
Frontend Service Secret
The Istari Platform requires a secret for the frontend service. This secret is used to store sensitive information related to file storage and access. The secret should be created in the Kubernetes cluster where the Istari Platform is deployed.
apiVersion: v1
kind: Secret
metadata:
name: istari-frontend
stringData:
ISTARI_REGISTRY_URL: "https://registry.<customer_istari_fqdn>"
VITE_DOCUMENTATION_URL: "https://docs.istaridigital.com"
VITE_DOMAIN: "<customer_istari_fqdn>"
VITE_FILE_AUTH_ENDPOINT: "https://registry.<customer_istari_fqdn>"
VITE_FS_URL: "https://registry.<customer_istari_fqdn>"
# Leave commented out. From chart 6.0 the chart supplies this value itself,
# as https://api.<common.mainFqdn> (or common.apiFqdnOverride), routing the frontend's registry traffic
# through <base>/registry instead of the direct endpoint above. Uncomment
# only to override the chart's value: a key set here wins over the one the
# chart injects, so a stale value survives disabling the gateway.
# VITE_ISTARI_DIGITAL_API_URL: "https://api.<customer_istari_fqdn>"
VITE_LOGOUT_REDIRECT_URI: "https://<customer_istari_fqdn>"
VITE_REDIRECT_URI: "https://<customer_istari_fqdn>"
VITE_UI_URL: "https://<customer_istari_fqdn>"
VITE_ZITADEL_AUTHORITY: "https://zitadel.<customer_istari_fqdn>"
ZITADEL_CLOUD_URL: "https://zitadel.<customer_istari_fqdn>"
VITE_CLIENT_ID: "<zitadel_client_id>"
VITE_ZITADEL_CLIENT_ID: "<zitadel_client_id>"
ZITADEL_CLOUD_CLIENT_ID: "<zitadel_client_id>"
# Set VITE_ITAR to "true" if your platform will be hosting ITAR/CUI data
VITE_ITAR: "false"
# Following values are required as is
BASE_URL: ""
ZITADEL_CLOUD_REQUEST_SCOPE: "openid profile email offline_access urn:zitadel:iam:org:project:id:zitadel:aud"
VITE_SENTRY_ENABLED: "false"
VITE_SENTRY_AUTH_TOKEN: ""
VITE_SENTRY_DSN: ""
Make sure to replace <customer_istari_fqdn> with the actual domain used for the Istari Digital platform, e.g. istari.customer_domain.com.
Note the following:
- zitadel_domain is obtained from the Zitadel Install step
- zitadel_client_id is obtained from the Zitadel Install step - Create an OIDC Application for Frontend
- The Notifications inbox is available in the sidebar once NATS eventing is configured. See Notifications.
VITE_ISTARI_DIGITAL_API_URLstays commented out above. From chart 6.0 the chart sets it for you, tohttps://api.<customer_istari_fqdn>(fromcommon.mainFqdn, or the host incommon.apiFqdnOverride), so set it in this Secret only to override that value. See API Gateway for what enabling the gateway changes.
You will then create the secret by running the following command:
kubectl apply -f istari-frontend-secret.yaml
Registry Service Secret
What is currently referred to as "fileservice" will be renamed to "registry-service" as part of a future release. In preparation for this we have chosen to use the subdomain registry below.
The Istari Platform requires a secret for fileservice. This secret is used to store sensitive information related to file storage and access. The secret should be created in the Kubernetes cluster where the Istari Platform is deployed.
Istari Digital needs to grant access to license holder and license key to the customer. Please reach out to your Istari Digital Customer Success representative if you do not already have these.
apiVersion: v1
kind: Secret
metadata:
name: istari-fileservice
stringData:
FILE_SERVICE_AUTHZED_HOST: "spicedb" # Change to host if setting FILE_SERVICE_AUTHZED_NO_TLS to "false"
FILE_SERVICE_AUTHZED_NO_TLS: "true" # Set this to "false" if you want to require TLS with SpiceDB
FILE_SERVICE_AUTHZED_PORT: "50051" # Change to 443 if setting FILE_SERVICE_AUTHZED_NO_TLS to "false"
FILE_SERVICE_AUTHZED_TOKEN: "<spicedb_preshared_key>"
FILE_SERVICE_CORS_ALLOW_ORIGINS: '["https://<customer_istari_fqdn>", "https://v2.<customer_istari_fqdn>"]'
FILE_SERVICE_DATABASE_URL: "postgresql://registry:<password>@<rds_host>:5432/registry"
FILE_SERVICE_LICENSE_HOLDER: "<license_holder>"
FILE_SERVICE_LICENSE_KEY: "<license_key>"
FILE_SERVICE_OBJECT_STORE_SCHEME_NAME: "s3" # Set to `wasbs` if using Windows Azure Blob Storage instead of AWS S3
FILE_SERVICE_OBJECT_STORE_ACCESS_KEY: "<AWS_S3_access_key OR Azure_storage_account_name>"
FILE_SERVICE_OBJECT_STORE_SECRET_KEY: "<AWS_S3_secret_key OR Azure_storage_container_access_key>"
FILE_SERVICE_OBJECT_STORE_NAME: "<AWS_S3_bucket OR Azure_storage_container>"
FILE_SERVICE_OBJECT_STORE_ENDPOINT_URL: "https://<AWS_S3_endpoint_url OR Azure_endpoint_url>" # See https://docs.aws.amazon.com/general/latest/gr/s3.html and https://learn.microsoft.com/en-us/azure/storage/common/storage-account-overview#standard-endpoints
FILE_SERVICE_OBJECT_STORE_REGION: "<AWS_S3_region>" # Not used with Azure Blob Storage
FILE_SERVICE_ZITADEL_DOMAIN: "https://zitadel.<customer_istari_fqdn>"
FILE_SERVICE_ZITADEL_JWKS_URL: "https://zitadel.<customer_istari_fqdn>/oauth/v2/keys" # Deprecated as of 2025.07.1 release
FILE_SERVICE_ZITADEL_CLIENT_ID: "<zitadel_client_id>"
FILE_SERVICE_ZITADEL_PROJECT_ID: "<zitadel_project_id>"
FILE_SERVICE_ZITADEL_PROJECT_GRANT_ID: "<zitadel_project_grant_id>"
FILE_SERVICE_ZITADEL_SECRET: "<zitadel_secret>"
FILE_SERVICE_ZITADEL_USER_MANAGER_SECRET: "<zitadel_user_manager_secret>"
FILE_SERVICE_NATS_TOKEN: "<nats_auth_token>" # Must match NATS_AUTH_TOKEN in the istari-nats secret (see NATS Secret below)
FILE_SERVICE_FEATURE_FLAGS__EVENTING_ENABLED: "true" # Enables eventing functionality (powered by NATS)
# Following values are required as is
FILE_SERVICE_HOST: "0.0.0.0"
FILE_SERVICE_PORT: "8000"
FILE_SERVICE_SENTRY_ENABLED: "false"
FILE_SERVICE_USE_SINGLETON_AUTHZED_PERMISSION_MANAGER: "false"
FILE_SERVICE_CORS_ALLOW_ORIGINS is written as a JSON array. Make sure to use double quotes for the JSON array.
Note the following:
customer_istari_fqdnis the domain used for the Istari Digital platform, e.g. `istari.customer_domain.com.zitadel_client_idis obtained from the Zitadel Config stepzitadel_project_idand zitadel_project_grant_id are both obtained from the Zitadel Config stepzitadel_secretis obtained from the Zitadel Config stepzitadel_user_manager_secretis obtained from the Zitadel Config stepAWS_S3_access_keyorAzure_storage_account_nameare obtained from the AWS or Azure Object Store Configuration stepAWS_S3_bucketorAzure_storage_containerare obtained from the AWS or Azure Object Store Configuration stepAWS_S3_endpoint_urlorAzure_endpoint_urlare obtained from the AWS or Azure Object Store Configuration stepAWS_S3_regionis obtained from the Object Store Configuration stepspicedb_preshared_keyis obtained from the SpiceDB Install steppasswordis obtained from the AWS or Azure PostgreSQL Install step and is associated with the DB userregistry_servicenats_auth_tokenis a strong, randomly generated value you create. It must be identical to theNATS_AUTH_TOKENin the NATS Secret below.
You will then create the secret by running the following command:
kubectl apply -f istari-fileservice-secret.yaml
NATS Secret
The Istari Platform uses NATS for messaging, which powers eventing functionality in the registry service (fileservice). Create a Kubernetes secret named istari-nats to hold the NATS authentication token.
NATS authenticates connections using a shared token. Choose a single secret value (the "NATS auth token") and provide it in two places, which must match:
- The
istari-natssecret, under the keyNATS_AUTH_TOKEN(read by NATS). - The
istari-fileservicesecret, under the keyFILE_SERVICE_NATS_TOKEN(read by the registry service — see the Registry Service Secret above).
Create the istari-nats secret, replacing <nats_auth_token> with a strong, randomly generated value that matches FILE_SERVICE_NATS_TOKEN in the fileservice secret:
apiVersion: v1
kind: Secret
metadata:
name: istari-nats
stringData:
NATS_AUTH_TOKEN: "<nats_auth_token>"
You will then create the secret by running the following command:
kubectl apply -f istari-nats-secret.yaml
Optional: MCP Secret
By default the Istari Platform Helm chart does not enable MCP functionality. The MCP Service is also what lets Istari AI Chat read platform data, so enable it if you plan to offer AI Chat. Should you wish to do so you must first create an additional Kubernetes secret named istari-mcp. This file should contain the following, with items in <> replaced with values specific to your install (described below):
apiVersion: v1
kind: Secret
metadata:
name: istari-mcp
stringData:
ISTARI_DIGITAL_MCP_SERVICE_BASE_URL: "https://mcp.<customer_istari_fqdn>"
ISTARI_DIGITAL_ZITADEL_CLIENT_ID: "<zitadel_client_id>"
ISTARI_DIGITAL_ZITADEL_CLIENT_SECRET: "<zitadel_client_secret>"
ISTARI_DIGITAL_ZITADEL_ISSUER: "https://zitadel.<customer_istari_fqdn>"
ISTARI_DIGTIAL_FRONTEND_BASE_URL: "https://<customer_istari_fqdn>"
Note the following:
customer_istari_fqdnis the domain used for the Istari Digital platform, e.g. `istari.customer_domain.com.zitadel_client_idandzitadel_client_secretare obtained from the Zitadel Configuration & Secrets - MCP Service Application step.
You will then create the secret by running the following command:
kubectl apply -f istari-mcp-secret.yaml
Optional: Identity Service Secret
By default the Istari Platform Helm chart does not enable the Identity Service. Should you wish to do so (see Scenario 10) you must first create an additional Kubernetes secret named istari-identity. This file should contain the following, with items in <> replaced with values specific to your install (described below):
apiVersion: v1
kind: Secret
metadata:
name: istari-identity
stringData:
ISTARI_DIGITAL_IDENTITY_SERVICE_DATABASE_URL: "postgresql://<db_user>:<db_password>@<db_host>:5432/<db_name>"
ISTARI_DIGITAL_IDENTITY_SERVICE_SIGNING_KEY: "<signing_key>"
ISTARI_DIGITAL_IDENTITY_SERVICE_TOKEN_ENCRYPTION_KEY: "<token_encryption_key>"
ISTARI_DIGITAL_IDENTITY_SERVICE_CORS_ALLOWED_ORIGINS: "https://<customer_istari_fqdn>"
ISTARI_DIGITAL_IDENTITY_SERVICE_ENFORCE_CLIENT_REGISTRATION: "true"
ISTARI_DIGITAL_IDENTITY_SERVICE_OIDC_SCOPES: "openid profile email offline_access urn:zitadel:iam:org:project:id:zitadel:aud urn:zitadel:iam:user:resourceowner"
# Optional — fallback tenant for Zitadel instance-level admins:
ISTARI_DIGITAL_IDENTITY_SERVICE_JWT_DEFAULT_TENANT_ID: "<zitadel_org_id>"
Note the following:
- Create a new, dedicated PostgreSQL database for the Identity Service and use its connection string as the
ISTARI_DIGITAL_IDENTITY_SERVICE_DATABASE_URL. The database name is your choice. ENFORCE_CLIENT_REGISTRATION: "true"makes the Identity Service refuse a sign-in from a client it has not registered, or one that asks to return to an address outside that client's allowlist. Without it, such sign-ins are only logged, which leaves the sign-in flow open to phishing pages that pose as a platform client and to stolen authorization codes sent to an attacker's address. It is safe from the first install: the frontend and MCP service sign in under the client IDs the Identity Service registers at startup, with allowlists derived fromcommon.mainFqdn. If people reach the frontend or MCP service at another address, add it to the allowlist; see Overriding the redirect allowlists.signing_keyandtoken_encryption_keyare the$SIGNING_KEYand$TOKEN_ENCRYPTION_KEYvalues from Identity Service — Generate Keys.- With the provisioner (
provisioner.enabled: true, as in Scenario 10), the secret carries no client credentials: the provisioner generates the registry's and the MCP service's credentials, and the Identity Service registers the registry, frontend and MCP service from them at startup — see How the Platform Clients Are Registered. Without the provisioner, add the keys listed in Chart install without the provisioner to the secrets it names: this one, the registry's (istari-fileservice) and, if deployed, the MCP service's (istari-mcp). zitadel_org_idis your Zitadel organization's numeric ID — see Finding your Zitadel organization ID.- The YAML above leaves out the values that register the Identity Service with Zitadel: its OIDC client ID, private key, issuer and base URL, and the Zitadel management key. Which of them you add here depends on how you registered it:
- Zitadel Configurator 1.10.0 or later: none. The Configurator delivers them in its own secret,
zitadel-identity-service-env. - Configurator 1.8.2 to 1.9.x: only the management key,
ISTARI_DIGITAL_IDENTITY_SERVICE_ZITADEL_MANAGER_KEY. Create it by hand (step 4). The install or upgrade fails without it, unless you turn off the chart's import of Zitadel organizations. - No Configurator, or one older than 1.8.2: all of them, as Register Zitadel by hand describes.
- Zitadel Configurator 1.10.0 or later: none. The Configurator delivers them in its own secret,
You will then create the secret by running the following command:
kubectl apply -f istari-identity-secret.yaml
Docker pull secret
The docker-pull-secret should have been created in the Docker Pull Secret step. If you have not created it yet, do so before proceeding.
Verify the secrets
Make sure to verify that the required secrets were created successfully and are listed in the output of the above command.
kubectl describe secret istari-frontend
kubectl describe secret istari-fileservice
kubectl describe secret istari-nats
kubectl describe secret docker-pull-secret
Istari Platform Helm Chart
The Istari Platform is installed using a Helm chart. The Helm chart contains all the necessary configurations and resources required to deploy the Istari Platform in a Kubernetes cluster.
Download Helm Chart
- Your organization needs registry credentials for
istaridigital.jfrog.io. Obtain the JFrog service account username and a token from the Istari Customer Portal (for example using Generate ready-to-use commands on a Helm chart asset). - Use those values for
ISTARI_ARTIFACTORY_USERNAMEandISTARI_ARTIFACTORY_PASSWORDin the commands below (the password is the generated token). - This access is required to pull the Istari Digital Helm chart and to create the
docker pull secretfor EKS in the next steps.
To download the Istari Digital Helm chart in .tgz format, run the following command:
ISTARI_ARTIFACTORY_USERNAME=
ISTARI_ARTIFACTORY_PASSWORD=
helm pull oci://istaridigital.jfrog.io/customer-charts/istari-platform --version X.X.X --username ${ISTARI_ARTIFACTORY_USERNAME} --password ${ISTARI_ARTIFACTORY_PASSWORD}
Use the service account username and token from the Customer Portal for ISTARI_ARTIFACTORY_USERNAME and ISTARI_ARTIFACTORY_PASSWORD.
Helm Chart Installation
Create an istari-values.yaml file. It must set common.mainFqdn, the domain people use to reach the platform: every host and URL the chart emits derives from it, and the chart refuses to install without it. The Istari Platform also uses NATS for messaging, so enable the NATS subchart:
common:
mainFqdn: "<customer_istari_fqdn>" # required: the domain you use to access the platform
# Enable NATS messaging (powers eventing in the registry service)
nats:
enabled: true
<customer_istari_fqdn> is a bare host such as istari.example.com, with no https:// and no path.
When nats.enabled: true, the chart deploys NATS in-cluster and automatically injects the FILE_SERVICE_NATS_URL environment variable into the fileservice Pods so they can connect to it. The NATS auth token is sourced from the istari-nats and istari-fileservice secrets you created above. NATS runs in-cluster and is reached over the internal nats://nats:4222 address, so no external DNS or routing configuration is required.
Install the Istari Platform with this values file:
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Verify the Istari Platform installation
Deployments
kubectl get deployments
The output should look like this:
NAME READY UP-TO-DATE AVAILABLE AGE
istari-fileservice 1/1 2 2 1m
istari-frontend 1/1 2 2 1m
Services
kubectl get services
The output should look like this:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istari-fileservice ClusterIP 172.20.1.1 <none> 80/TCP 1m
istari-frontend ClusterIP 172.20.1.2 <none> 80/TCP 1m
istari-secure-connection ClusterIP 172.20.1.3 <none> 80/TCP 1m
nats ClusterIP 172.20.1.4 <none> 4222/TCP 1m
nats-headless ClusterIP None <none> 4222/TCP,6222/TCP,8222/TCP 1m
spicedb ClusterIP 172.20.1.5 <none> 50051/TCP,8443/TCP,9090/TCP,50053/TCP 1m
Pods
kubectl get pods
The output should look like this:
NAME READY STATUS RESTARTS AGE
istari-fileservice-5676c75c54-4d4sw 1/1 Running 0 1m
istari-fileservice-5676c75c54-m29jc 1/1 Running 0 1m
istari-frontend-7c4597c78b-45mhn 1/1 Running 0 1m
istari-frontend-7c4597c78b-86whn 1/1 Running 0 1m
nats-0 2/2 Running 0 1m
nats-1 2/2 Running 0 1m
nats-2 2/2 Running 0 1m
DNS Routes
Set up Routes records so that:
- Setup
<customer_istari_fqdn>route to theistari-frontendservice on port 80. - Setup
registry.<customer_istari_fqdn>route to theistari-fileserviceservice on port 80.
Istari Platform Helm Chart Configuration
Beyond enabling NATS, you can use the istari-values.yaml file to further configure the Istari Platform according to your needs.
The default values for the Istari Platform Helm chart are available in the Appendix: Helm Chart Default Values. It is recommended to only add the options you wish to override the defaults for in an istari-values.yaml file.
The following are a number of scenarios where you might wish to override these defaults, and examples of how you would accomplish this by modifying your istari-values.yaml file.
The scenario snippets below are additive — each shows only the keys relevant to that scenario. Merge them into the same istari-values.yaml you created during installation (the one that sets nats.enabled: true). Do not use a scenario snippet as your complete configuration, or NATS will be disabled (the chart currently defaults nats.enabled to false).
Scenario 1: Istari Platform with Model Context Protocol (MCP) Service enabled
This configuration enables the MCP Service, and requires multiple steps.
Create MCP Secret
If you have not already done so, create the istari-mcp secret using these instructions.
Verify MCP Secret
You may verify that the istari-mcp secret was successfully created using this command:
kubectl describe secret istari-mcp
Update istari-values.yaml
Add the following values to your istari-values.yaml file to enable.
# Istari Platform with MCP Service
mcp:
enabled: true
# # Uncomment the following and update with necessary values if self-hosting the docker image
# registry: "istaridigital.jfrog.io/main-docker-local"
# image: "mcp-service"
Install the Istari Platform
Then, install/upgrade the Istari Platform Helm chart with the custom istari-values.yaml file:
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Set Up DNS & Route
Then set up a route so that the subdomain mcp.<customer_istari_fqdn> forwards traffic to the istari-mcp service on port 80.
Your LLM will need to be able to connect to the Istari Platform and new MCP subdomain on port 443. Please update security groups and/or any other network configuration accordingly as needed.
Scenario 2: Support for Self-Signed TLS Certs
This is a newly added feature which is still in beta mode.
By default the Istari Platform uses Red Hat's list of trusted public Certificate Issuers when determining whether a TLS cert is valid. If instead using self-signed certs issued from a private Certificate Issuer, it is possible to use the Helm chart to update the Istari Platform containers so that they trust one or more of these. You will need a PEM-encoded trust bundle, which should not contain secret information and is typically provided alongside the self-signed private TLS cert.
Begin by adding the following example to your istari-values.yaml file and then replace everything from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE----- with the complete contents of your trust bundle, which will contain one or more certificates. This contented must be indented and be located directly below the trustedCertBundle: |- line in order to work properly, as in the original example.
# Trusted certificate bundle for when using a self-signed certificate.
# This is a PEM-encoded certificate bundle. AWS, Azure, and GCP root certs will also automatically be trusted.
trustedCertBundle: |-
-----BEGIN CERTIFICATE-----
MIID1z...
...
-----END CERTIFICATE-----
You may then install Istari Platform Helm chart with the custom istari-values.yaml file using the following command:
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 3: Istari Platform with HPA enabled
This configuration enables Horizontal Pod Autoscaling (HPA) for both the file service and frontend service. The HPA will automatically scale the number of replicas based on CPU and memory utilization.
# Istari Platform with HPA enabled
fileservice:
autoscaling:
enabled: true
minReplicas: 1
maxReplicas: 2
averageCPUUtilization: 80
averageMemoryValue: 80
frontend:
autoscaling:
enabled: true
minReplicas: 1
maxReplicas: 2
averageCPUUtilization: 80
averageMemoryValue: 80
Install/Upgrade the Istari Platform Helm chart with the custom istari-values.yaml file
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 4: Taints and Tolerations with Pod Affinity
This configuration sets up taints and tolerations for the Istari Platform. It also sets up pod affinity to ensure that the Istari Platform pods are scheduled on the same node.
# Istari Platform with Taints and Tolerations
fileservice:
tolerations:
- key: "istari.k8s.io/role"
operator: "Equal"
value: "main"
effect: "NoSchedule"
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: istari.k8s.io/role
operator: In
values:
- main
topologyKey: "kubernetes.io/hostname"
frontend:
tolerations:
- key: "istari.k8s.io/role"
operator: "Equal"
value: "main"
effect: "NoSchedule"
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: istari.k8s.io/role
operator: In
values:
- main
topologyKey: "kubernetes.io/hostname"
Install/Upgrade the Istari Platform Helm chart with the custom istari-values.yaml file
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 5: Istari Platform with Node Selector
This configuration sets up node selectors for the Istari Platform. The Istari Platform pods will be scheduled on nodes with the specified labels.
# Istari Platform with Node Selector
fileservice:
nodeSelector:
istari.k8s.io/role: main
frontend:
nodeSelector:
istari.k8s.io/role: main
Install/Upgrade the Istari Platform Helm chart with the custom istari-values.yaml file
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 6: Istari Platform with Custom Resource Requests and Limits
This configuration sets up custom resource requests and limits for the Istari Platform. The Istari Platform pods will be scheduled with the specified resource requests and limits.
# Istari Platform with Custom Resource Requests and Limits
fileservice:
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
frontend:
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "200m"
memory: "256Mi"
Install/Upgrade the Istari Platform Helm chart with the custom istari-values.yaml file
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 7: Istari Platform with Custom Environment Variables
This configuration sets up custom environment variables for the Istari Platform. The Istari Platform pods will be started with the specified environment variables.
# Istari Platform with Custom Environment Variables
fileservice:
env:
- name: LOGS_LEVEL
value: DEBUG
frontend:
env:
- name: LOGS_LEVEL
value: DEBUG
Install/Upgrade the Istari Platform Helm chart with the custom istari-values.yaml file
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 8: Istari Platform with Custom Service Annotations
This configuration sets up custom service annotations for the Istari Platform. The Istari Platform services will be started with the specified service annotations.
# Istari Platform with Custom Service Annotations
fileservice:
serviceAnnotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
frontend:
serviceAnnotations:
service.beta.kubernetes.io/aws-load-balancer-type: "nlb"
Install/Upgrade the Istari Platform Helm chart with the custom istari-values.yaml file
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 9: Istari Platform with Custom Pod Annotations
This configuration sets up custom pod annotations for the Istari Platform. The Istari Platform pods will be started with the specified pod annotations.
# Istari Platform with Custom Pod Annotations
fileservice:
podAnnotations:
iam.amazonaws.com/role: "istari-fileservice-role"
frontend:
podAnnotations:
iam.amazonaws.com/role: "istari-frontend-role"
Install/Upgrade the Istari Platform Helm chart with the custom istari-values.yaml file
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
Scenario 10: Istari Platform with Identity Service enabled
The Identity Service signs people in through your upstream identity provider and issues the platform's tokens. By default that provider is the Zitadel your Istari installation manages. The Identity Service runs behind the API Gateway, which these values also deploy.
Prerequisites
- A DNS record and a TLS Secret for
api.<customer_istari_fqdn>, the API Gateway's host, pointed at your Ingress controller, as for the API Gateway. - The Zitadel Configurator, 1.10.0 or later, installed with
configurator.identity_service_base_url: "https://api.<customer_istari_fqdn>/identity". It registers the Identity Service in Zitadel and delivers its credentials in thezitadel-identity-service-envsecret. Without it, register the Identity Service by hand. - A PostgreSQL database for the Identity Service.
- The
istari-identitysecret, holding the database URL and the keys you generate; see Identity Service Secret.
On install and upgrade, the chart turns your Zitadel organizations into tenants. See Tenants from the chart's Zitadel import for which organizations it covers. To skip it, set identity.idpMigration.enabled: false and create the tenants by hand.
Update istari-values.yaml
Add these values to istari-values.yaml:
common:
mainFqdn: "<customer_istari_fqdn>"
apiGateway:
enabled: true # serves the Identity Service at /identity
ingress:
enabled: true # routes api.<customer_istari_fqdn> to the gateway
className: "nginx" # match your controller's IngressClass
hosts:
- host: api.<customer_istari_fqdn>
paths:
- path: /
pathType: Prefix
tls:
- hosts:
- api.<customer_istari_fqdn>
secretName: api-<customer_istari_fqdn>-tls
provisioner:
enabled: true # generates the platform clients' credentials
identity:
enabled: true # deploys the Identity Service
clientIntegration:
enabled: true # signs the registry, frontend and MCP in through it
secretName: "istari-identity"
extraEnvSecrets:
- zitadel-identity-service-env # from the Zitadel Configurator
migrations:
runAsJob: true # needed by the Zitadel import
On Istio, replace apiGateway.ingress with the matching apiGateway.virtualService values; see the API Gateway. Keep every line, except extraEnvSecrets if you registered the Identity Service in Zitadel by hand. Without clientIntegration.enabled, the Identity Service runs but nothing signs in through it. Without migrations.runAsJob, the chart refuses to install. To generate the client credentials yourself instead of with the provisioner, see Supplying the Credentials Yourself.
Install the Istari Platform
helm upgrade --install -f istari-values.yaml istari istari-platform-X.X.X.tgz
kubectl rollout restart deployment/istari-fileservice deployment/istari-frontend
The restart moves the registry and frontend onto the Identity Service; add deployment/istari-mcp if you run the MCP service.
Don't upgrade with --reuse-values alone: it keeps the old chart's image and import settings. Use --reset-then-reuse-values instead; see Import settings and versions.
Verify
curl -fsS https://api.<customer_istari_fqdn>/identity/health/readiness
curl -fsS https://api.<customer_istari_fqdn>/identity/.well-known/jwks.json
Both return 200. Then sign in at https://<customer_istari_fqdn>, and list the tenants to check that each Zitadel organization you expect has one.
Create a Platform Administrator
The installation needs at least one Platform Administrator, and the chart grants the role to no one. Follow Creating Platform Administrators.
For tenants, the Secure Connection Service agent and the full configuration reference, see Clients & Tenants and the Identity Service page.
Appendix: Helm Chart Default Values
Values for the istari-platform Helm chart are all configurable. It is recommended to include only the options you wish to override in your istari-values.yaml file to simplify future upgrades.
You can view the complete list of default values in our open source chart repository: istari-platform/values.yaml
Alternatively, these values are available by extracting the contents of the istari-platform .tgz file from the Download Helm Chart step, which contains a README.md and a values.yaml file documenting all options.