OpenShift Helm Chart
Helm chart for deploying DecisionRules to Red Hat OpenShift. What it deploys, what you need to provision separately, and how to configure it.
The decisionrules-ocp chart deploys DecisionRules to Red Hat OpenShift, for example self-managed OpenShift Container Platform, Azure Red Hat OpenShift (ARO) or Red Hat OpenShift Service on AWS (ROSA). The application is exposed through OpenShift Routes with edge TLS termination. All credentials are read from Kubernetes Secrets that you create yourself, so nothing sensitive is stored in values files or in the Helm release.
Chart name
decisionrules-ocp
Helm repository
https://decisionrules.github.io/helm-charts/decisionrules-ocp/
Artifact Hub
Images
decisionrules/client (rootless variant), decisionrules/server, decisionrules/ai-engine, decisionrules/business-intelligence from Docker Hub
What you need to provision separately
The chart deploys only the DecisionRules application. Prepare the following before you install it:
OpenShift cluster and a project (namespace)
Yes
The Secrets below must exist in the project before installation.
MongoDB
Yes
Two databases: the main database (MONGO_DB_URI) and the Business Intelligence (audit) database (BI_MONGO_DB_URI). They can live on the same MongoDB cluster. For MongoDB Atlas, see MongoDB Atlas Network Peering. See Database - Azure CosmosDB if you use Cosmos DB instead of MongoDB.
DecisionRules license key
Yes
LICENSE_KEY
Secret with the AI provider key (AIA_SECRET)
Only with AI Engine
The AI Engine is enabled by default. See AI Engine providers and models.
Hostnames for the client and the API
Recommended
Needed to build the application URLs. See Application URLs.
Outbound proxy and a ConfigMap with its CA certificate
Optional
Only when outbound traffic must go through a proxy.
Outbound access to the license and distribution servers
Yes
See Prerequisites, or use an Offline License.
The chart does not create MongoDB, Redis, Secrets, ConfigMaps or persistent volumes.
What the chart deploys
Client
Deployment, Service, Route
Yes
client.enabled, client.route.enabled
Server
Deployment, Service, Route, HorizontalPodAutoscaler
Yes
server.enabled, server.route.enabled, server.autoscaling.enabled
AI Engine
Deployment, Service (cluster-internal only)
Yes
aiEngine.enabled
Business Intelligence
Deployment (no Service or Route)
Yes
businessIntelligence.enabled
Resources are named after the Helm release, for example <release>-server and <release>-server-service.
The chart does not set a security context. OpenShift assigns one through its default restricted-v2 Security Context Constraint, and all DecisionRules images run under the arbitrary non-root user ID that OpenShift assigns. The client uses the rootless image, which listens on port 4000.
Secrets
The chart reads credentials from existing Kubernetes Secrets in the release namespace. You set only the name of the Secret in the values, never the values themselves.
server.existingSecret
decisionrules-config
MONGO_DB_URI, BI_MONGO_DB_URI, REDIS_URL, LICENSE_KEY
aiEngine.existingSecret
decisionrules-config
AIA_SECRET (only when aiEngine.enabled=true)
Both values point to the same Secret by default, so you can keep everything in one Secret or split the AI provider key into its own Secret.
The Secret can also be created by any tool that materializes Kubernetes Secrets, for example the External Secrets Operator (from Azure Key Vault, AWS Secrets Manager, HashiCorp Vault and others) or Sealed Secrets. The chart only needs the Secret to exist.
The chart fails to render with a clear error message when server.existingSecret is empty, or when aiEngine.existingSecret is empty while the AI Engine is enabled.
Application URLs
The client and the server need to know their public URLs. The chart builds them as follows:
API_URL
Server, Client
server.apiUrl (for the client client.apiUrl takes precedence) → https://<server.route.host>
CLIENT_URL
Server
server.clientUrl → https://<client.route.host>/#
AI_ENGINE_URL
Server
server.aiEngineUrl → internal AI Engine Service URL (only when the AI Engine is enabled)
Optional features
What changes when you turn each feature on or off:
Server sizing
The server.solver value sizes the server for the rule solver you use:
server.solver
Use for
Server CPU / memory per Pod
Autoscaling
aero (default)
AERO (v2) solver or mixed v1/v2 traffic
4000m / 4Gi (requests = limits)
2–5 Pods
gaia
GAIA (v1) solver only
1000m / 1Gi requests, 2000m / 2Gi limits
2–10 Pods
AERO uses several CPUs within one process, so it runs best on fewer, larger replicas. The profiles are defined in server.solverProfiles in the chart's values.yaml, so you can adjust them, for example --set server.solverProfiles.aero.maxReplicas=8. To size the server yourself regardless of the profile, set server.resources and server.autoscaling.minReplicas / maxReplicas; they take precedence over the profile. See server sizing for scaling and resource reserve.
Configuration reference
Client
client.enabled
true
Deploy the client.
client.replicaCount
2
Number of client pods.
client.image.repository / tag
decisionrules/client / latest-rootless
Use a rootless tag, for example 1.26.2.1-rootless.
client.port
4000
Port the rootless image listens on.
client.apiUrl
""
Overrides API_URL for the client only.
client.resources
250m / 128Mi requests, 500m / 256Mi limits
CPU and memory.
client.route.enabled
true
Create the client Route.
client.route.host
""
Client hostname, for example app.example.com.
client.route.tls.termination
edge
Route TLS termination.
client.route.tls.insecureEdgeTerminationPolicy
Redirect
Redirect HTTP to HTTPS.
Server
server.enabled
true
Deploy the server.
server.replicaCount
2
Number of server pods when autoscaling is disabled.
server.image.repository / tag
decisionrules/server / latest
Pin a version in production, for example 1.26.2.1.
server.port
8080
Server port.
server.solverProfiles.aero, server.solverProfiles.gaia
see Server sizing
Server resources, minReplicas and maxReplicas of each profile.
server.resources
From the server.solver profile
CPU and memory of the server. Overrides the profile when set.
server.existingSecret
decisionrules-config
Name of the connection Secret. Required.
server.apiUrl
""
Overrides API_URL.
server.clientUrl
""
Overrides CLIENT_URL. Must end with /#.
server.aiEngineUrl
""
Overrides AI_ENGINE_URL.
server.inMemoryRuleCount
40
IN_MEMORY_RULE_COUNT, number of rules cached in memory.
server.flushRedisOnStartup
false
FLUSH_REDIS_ON_STARTUP.
server.extraEnv
[]
Additional environment variables.
server.route.*
see Client
Same options as client.route.
server.autoscaling.enabled
true
Create the HorizontalPodAutoscaler.
server.autoscaling.minReplicas / maxReplicas
From the server.solver profile
Autoscaling range (2–5 for aero, 2–10 for gaia). Overrides the profile when set.
server.autoscaling.targetCPUUtilizationPercentage
60
CPU target.
server.startupProbe, livenessProbe, readinessProbe
HTTP /health-check on port 8080
Probe definitions. The startup probe gives the server up to 65 seconds to start.
AI Engine
aiEngine.enabled
true
Deploy the AI Engine.
aiEngine.replicaCount
1
Number of pods.
aiEngine.image.repository / tag
decisionrules/ai-engine / latest
Image.
aiEngine.port
8084
Service port.
aiEngine.provider, family, model
""
AI provider, model family and model.
aiEngine.additionalDataJson
""
Provider-specific settings as a JSON string.
aiEngine.existingSecret
decisionrules-config
Name of the Secret with AIA_SECRET.
aiEngine.resources
250m / 256Mi requests, 500m / 512Mi limits
CPU and memory.
Business Intelligence
businessIntelligence.enabled
true
Deploy Business Intelligence.
businessIntelligence.replicaCount
1
Number of pods.
businessIntelligence.image.repository / tag
decisionrules/business-intelligence / latest
Image.
businessIntelligence.resources
250m / 256Mi requests, 500m / 512Mi limits
CPU and memory.
Proxy
proxy.enabled
false
Inject proxy settings into the Server and the AI Engine.
proxy.httpProxy, httpsProxy, noProxy
""
Proxy URLs and exclusions.
proxy.caBundle.enabled
false
Mount the proxy CA certificate.
proxy.caBundle.configMapName
""
ConfigMap with the CA certificate. Required when caBundle.enabled=true.
proxy.caBundle.mountPath
/etc/ssl/custom
Mount directory.
proxy.caBundle.fileName
mitmproxy-ca.pem
Key in the ConfigMap / file name.
Example values
Install
Create the project and the Secrets first (see Secrets), then install the chart:
To apply changed values or a new chart version later:
Verify
All pods should be Running and 1/1 ready. If a pod stays in CreateContainerConfigError, the Secret or one of its keys is missing. Run oc describe pod <pod-name> -n decisionrules to see which one.
Last updated
Was this helpful?

