Hello,
I have a problem connecting my OpenShift 4.22.2 cluster (3-node bare-metal) to my TrueNAS Scale 25.10.4 System with iSCSI.
The TrueNAS iSCSI Target lives on 192.168.10.126 and it allows all initiators on the 192.168.10.0/24 subnet (to keep it simple for now).
It has a iscsi IQN Base called “iqn.2005-10.org.freenas.ctl”
The OpenShift Nodes all live in this 192.168.10.0 / 24 network as well, so there are no firewalls etc.
First, I created the “truenas-csi” namespace manually in the OpenShift WebConsole.
(this instruction is missing from the documentation on the GitHub Page by the way. Applying the “secret yaml” will therefore fail because that namespace does not exist yet at this step.
Not sure if the “TrueNAS CSI Driver v1.0.0” operator should have created that namespace during install, but it didn’t, so I had to create it manually)
I then created a user inside TrueNas calles “OpenShiftUser” and gave it full admin rights and generated a API key. I verified that this user has API access.
Then I created a yaml for this secret and “oc applied” it. Then check it’s presence with “oc get secret truenas-api-credentials -n truenas-csi -o yaml” and it looks correct.
I then created the yaml for the TrueNASCSI custom resource to deploy the CSI driver:
apiVersion: csi.truenas.io/v1alpha1
kind: TrueNASCSI
metadata:
name: truenas
spec:
insecureSkipTLS: false
iscsiIQNBase: "iqn.2005-10.org.freenas.ctl"
credentialsSecret: "truenas-api-credentials"
namespace: truenas-csi
iscsiPortal: "192.168.10.126:3260"
defaultPool: "Pool01"
truenasURL: "wss://192.168.10.126/api/current"
I then oc apply it with “oc apply -f truenas-csi.yaml” and check it with “oc get truenascsi truenas -o yaml”.
This is the output:
apiVersion: csi.truenas.io/v1alpha1
kind: TrueNASCSI
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"csi.truenas.io/v1alpha1","kind":"TrueNASCSI","metadata":{"annotations":{},"name":"truenas"},"spec":{"credentialsSecret":"truenas-api-credentials","defaultPool":"Pool01","insecureSkipTLS":false,"iscsiIQNBase":"iqn.2005-10.org.freenas.ctl","iscsiPortal":"192.168.10.126:3260","namespace":"truenas-csi","truenasURL":"wss://192.168.10.126/api/current"}}
creationTimestamp: "2026-07-04T22:42:52Z"
finalizers:
- csi.truenas.io/finalizer
generation: 1
name: truenas
resourceVersion: "467692"
uid: 7338f7b2-689a-4761-9316-8800e5a7ee35
spec:
controllerReplicas: 1
credentialsSecret: truenas-api-credentials
defaultPool: Pool01
driverImage: quay.io/truenas_solutions/truenas-csi:latest
insecureSkipTLS: false
iscsiIQNBase: iqn.2005-10.org.freenas.ctl
iscsiPortal: 192.168.10.126:3260
logLevel: 4
managementState: Managed
namespace: truenas-csi
truenasURL: wss://192.168.10.126/api/current
status:
conditions:
- lastTransitionTime: "2026-07-04T22:42:52Z"
message: Waiting for controller and node components to be ready
reason: WaitingForComponents
status: "True"
type: Progressing
driverVersion: latest
observedGeneration: 1
phase: Pending
and that’s how it stays for hours.
I get no errors.
but it keeps saying “Waiting for controller and node components to be ready” and remains in the “pending” state.
I checked if the target on TrueNAS is live and working by abusing a Windows server machine on the same subnet and using it’s software iSCSI to discover the TrueNAS and that all works (I allowed all initiators to the iSCSI target which is why this works without any problems)
To verify that all 3 OpenShift Cluster Nodes can reach port 3260 of the TrueNAS, I used these commands:
oc debug node/<a node> -- chroot /host bash -c \
"nc -zv 192.168.10.126 3260"
and that responds with:
Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.10.126:3260.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.
when I test with this (I found this on the internet somewhere):
oc run test-ws --rm -it --image=curlimages/curl -- \
curl -k wss://192.168.10.126/api/current
I get this on all 3 nodes after waiting for a minute of silence:
imac:~ steven$ oc run test-ws --rm -it --image=curlimages/curl -- \
> curl -k wss://192.168.10.126/api/current
All commands and output from this session will be recorded in container logs, including credentials and sensitive information passed through the command prompt.
If you don't see a command prompt, try pressing enter.
curl: (52) Empty reply from server
Session ended, resume using 'oc attach test-ws -c test-ws -i -t' command when the pod is running
pod "test-ws" deleted from default namespace
It’s the reply “curl: (52) Empty reply from server” that catches my attention.
I must be missing something ![]()
Documentation that I used:
github dot com/truenas/truenas-csi/blob/master/docs/openshift/installation.md
github dot com/truenas/truenas-csi/blob/master/docs/openshift/configuration.md
As well as the relevant documentation on the TrueNAS Website and various blogs and posts.
Disclaimer: I’ve been working with Linux since 1995 and I’m a long-time TrueNAS user, but i’m a total OpenShift and Container noob. This is my first shot at OpenShift.
Kind regards,
Steve