ForgeRock ForgeOps provides a powerful Helm-based deployment model for the Identity Platform. In this advanced deployment guide, we focus on deploying ForgeOps 7.5 to Red Hat OpenShift CRC (CodeReady Containers) using custom-built Docker images, Helm charts, and fine-grained security controls.
This article assumes you’re already familiar with the basics of ForgeOps and OpenShift. If you’re looking for the beginner version of this tutorial, check out:
👉 Deploying ForgeRock ForgeOps on Red Hat OpenShift CRC: A Step-by-Step Guide
🔧 Prerequisites
- OpenShift CRC installed and running
- ForgeOps 7.5 Git repository cloned
- Docker or Podman for image builds
- Helm CLI installed and logged into OpenShift cluster
- Access to modify
/etc/hosts
and manage SCCs in OpenShift
🏗️ Step 1: Build Custom Docker Images
Build your ForgeOps Identity Platform images locally to customize configurations or plug in custom scripts:
# Build AM
cd forgeops/docker/am-base
docker build -t am-base:7.5.0 .
cd ../am-cdk
docker build --build-arg docker_tag=7.5.0 -t am-cdk:7.5.0 .
# Build DS
cd forgeops/docker/ds-base
docker build -t ds-base:7.5.0 .
# Build LDIF Importer
cd forgeops/docker/ldif-importer
docker build -t ldif-importer:7.5.0 .
Once built, tag and push these to your OpenShift CRC’s internal registry:
TOKEN=$(oc whoami -t)
docker login -u kubeadmin -p $TOKEN default-route-openshift-image-registry.apps-crc.testing
docker tag am-cdk:7.5.0 default-route-openshift-image-registry.apps-crc.testing/forgeops/am:7.5.0
docker push default-route-openshift-image-registry.apps-crc.testing/forgeops/am:7.5.0
docker tag ds-base:7.5.0 default-route-openshift-image-registry.apps-crc.testing/forgeops/ds:7.5.0
docker push default-route-openshift-image-registry.apps-crc.testing/forgeops/ds:7.5.0
docker tag ldif-importer:7.5.0 default-route-openshift-image-registry.apps-crc.testing/forgeops/ldif-importer:7.5.0
docker push default-route-openshift-image-registry.apps-crc.testing/forgeops/ldif-importer:7.5.0
🔐 Step 2: Prepare Secrets Before Helm Deployment
❗ Common pitfall: Helm templates expect Secrets like
ds-passwords
andam-env-secrets
to already exist. Missing Secrets cause initContainers or main containers to crash.
You can manually create the required Secrets (or use kubectl apply -f secrets.yaml
) prior to running Helm:
oc create secret generic ds-passwords \
--from-literal=dirmanager.pw=ForgeRock123 \
--from-literal=keystore.pw=changeit \
-n forgeops
oc create secret generic am-env-secrets \
--from-literal=AM_PASSWORD=ForgeRock123 \
-n forgeops
⚙️ Step 3: Configure Security Context (OpenShift Gotcha)
OpenShift enforces Security Context Constraints (SCC), which may block ForgeOps pods from starting.
Add anyuid
SCC to the namespace’s default service account or create a dedicated one:
oc create namespace forgeops
oc adm policy add-scc-to-user anyuid -z default -n forgeops
# Optional: Use a separate SA
oc create sa forgeops-sa -n forgeops
oc adm policy add-scc-to-user anyuid -z forgeops-sa -n forgeops
Also, grant access to secrets via RBAC:
oc create role secret-accessor \
--verb=get,list \
--resource=secrets \
-n forgeops
oc create rolebinding forgeops-binding \
--role=secret-accessor \
--serviceaccount=forgeops:forgeops-sa \
-n forgeops
📦 Step 4: Deploy with Helm
Make sure your values-openshift.yaml
overrides match your OpenShift domain and images:
am:
image:
repository: default-route-openshift-image-registry.apps-crc.testing/forgeops/am
tag: "7.5.0"
serviceAccount:
name: forgeops-sa
ds:
image:
repository: default-route-openshift-image-registry.apps-crc.testing/forgeops/ds
tag: "7.5.0"
persistence:
enabled: false
Deploy:
cd forgeops/charts/identity-platform
helm upgrade --install identity-platform . \
--namespace forgeops \
--values values-openshift.yaml \
--set 'platform.ingress.hosts={forgeops.example.com}' \
--set serviceAccount.name=forgeops-sa
🧪 Step 5: Validate and Access
-
Check services:
oc get pods -n forgeops
-
Add to
/etc/hosts
:127.0.0.1 forgeops.example.com
-
Access AM UI:
https://forgeops.example.com/am
📌 Final Tips
- Ensure Secrets are created before Helm is invoked
- Don’t forget OpenShift’s
securityContext
is stricter than standard Kubernetes - Use custom service accounts and RBAC for least privilege
- Double check image paths when pushing to OpenShift registry