Hi,
We are currently testing the ODC Cloud Connector (Private Gateway) on AKS and would like to run the container as non-root.
The OutSystems documentation states that outsystemscc doesn't require root permissions, but we couldn't find a recommended Kubernetes securityContext.
Has anyone successfully tested or deployed the Cloud Connector with:
securityContext: runAsNonRoot: true allowPrivilegeEscalation: false
If so, which runAsUser / runAsGroup settings are you using, and are there any other requirements we should consider?
Thanks!
You can run the OutSystems Cloud Connector container in AKS as non‑root, but you need to align your securityContext with how the image is built and with the permissions of the host/network it’s running on.
securityContext
From the product docs, the key points are:
Because the image itself doesn’t require root, the usual non‑root Kubernetes hardening applies well:
runAsNonRoot
These flags are safe and recommended:
The connector doesn’t need to start privileged processes, load kernel modules, or manipulate low‑level networking, so allowPrivilegeEscalation: false won’t block it.
allowPrivilegeEscalation: false
runAsUser
runAsGroup
The exact UID/GID will depend on how OutSystems built the image, but in practice you have two options:
Let the image define the user If the connector image sets a non‑root USER in its Dockerfile, you can rely on that and simply do:
USER
This is the simplest and usually works if the container logs don’t show any permission errors.
Force a specific non‑root UID/GID If your cluster has a policy that forces explicit UIDs, pick an arbitrary non‑root user that matches your compliance rules (for example 1000), and only mount volumes that are writable by that UID:
1000
securityContext: runAsNonRoot: true runAsUser: 1000 runAsGroup: 1000 allowPrivilegeEscalation: false
This works as long as:
If your first attempt fails with permission errors, you’ll see them in the connector logs (e.g. unable to create temp files, config files, or SSH sockets). In that case, either adjust runAsUser or fix volume ownership.
To keep it locked down but functional:
securityContext: runAsNonRoot: true runAsUser: 1000 # or whatever is compliant in your AKS runAsGroup: 1000 allowPrivilegeEscalation: false readOnlyRootFilesystem: false # usually needed, the connector may write logs/temp capabilities: drop: ["ALL"]
You can try readOnlyRootFilesystem: true, but expect to potentially need writable space (/tmp or an attached volume) for logs and SSH sockets.
readOnlyRootFilesystem: true
/tmp
Running non‑root doesn’t change the core network requirements:
Deploy a test pod with:
Start the connector using the documented parameters (token, gateway URL, remote connections).Securely tunnel your way into your private network with ODC
Monitor:
secure-gateway
If logs are clean and the ODC connection test succeeds, your chosen runAsUser/runAsGroup and non‑root setup are valid.
Since OutSystems doesn’t mandate a specific UID/GID for the Cloud Connector in the public docs, you’re free to pick any non‑root ID that fits your AKS security policies, provided volumes and filesystem permissions are aligned.