- Overview
- Requirements
- Pre-installation
- Preparing the installation
- Downloading the installation packages
- Configuring the OCI-compliant registry
- Granting installation permissions with cluster roles
- Granting installation permissions without cluster roles
- Installing and configuring the service mesh
- Installing and configuring the GitOps tool
- Installing the External Secrets Operator
- Deploying Redis through OperatorHub
- Applying miscellaneous configurations
- Running uipathctl
- Installation
- Post-installation
- Migration and upgrade
- Monitoring and alerting
- Cluster administration
- Product-specific configuration
- Orchestrator advanced configuration
- Configuring Orchestrator parameters
- Configuring appSettings
- Configuring the maximum request size
- Overriding cluster-level storage configuration
- Configuring NLog
- Saving robot logs to Elasticsearch
- Configuring credential stores
- Configuring encryption key per tenant
- Cleaning up the Orchestrator database
- Skipping host library installation
- AI Trust Layer
- Troubleshooting
- 500 errors and rate limiting on S3 requests in ODF
- External Secrets troubleshooting
- Configuring CSI driver tolerations for ODF 4.20
- Temporal as a Service troubleshooting
- AI Center and Document Understanding pods fail to start with TLS certificate verification enabled
- Studio Desktop cannot load Integration Service connectors and activities
- TLS certificate validation errors
- Manual ArgoCD NetworkPolicy mitigation (GHSA-47m3-95c7-g2g8)
- Configuring resource requests and limits for uipathctl-created workloads
Granting installation permissions without cluster roles
Grant the Automation Suite installer namespace-scoped permissions on OpenShift and compensate for missing cluster-scoped roles with pre-created resources.
This page applies only when your security policy prohibits granting any cluster-scoped permissions (ClusterRole or ClusterRoleBinding) to the Automation Suite installer service account (uipathadmin). If you can grant the cluster-scoped permissions, refer to Granting installation permissions with cluster roles instead.
If you install multiple Automation Suite instances on the same cluster, you must grant permissions for the other namespaces where you install Automation Suite.
This page describes how to grant the Automation Suite installer the permissions it needs without assigning any cluster-scoped permissions.
You keep the uipathadmin service account strictly namespace-scoped: you skip the two cluster-scoped ClusterRole resources and the ClusterRoleBinding used in the standard flow, and you compensate for the missing cluster-scoped reads with a set of pre-created resources and uipathctl flags.
You must execute the commands referenced in this section from a Linux, Windows, or macOS machine that has access to the OpenShift Kubernetes API server.
Commands that perform admin actions (creating the certificate Secret) must be run by a cluster administrator. Commands that perform uipathadmin actions use the kubeconfig you generate in Step 4.
To grant installation permissions without cluster roles, perform the following steps:
- Creating a service account
- Creating the required namespace-scoped roles
- Binding the roles
- Generating the kubeconfig file
- Configuring
input.jsonfor restricted-mode operation - Pre-creating the TLS certificate Secret
- Installing and configuring the service mesh and GitOps tool
Step 1: Creating a service account
To create a service account, take the following steps:
-
Create the
<uipath>namespace and project:oc get namespace <uipath> || oc new-project <uipath>oc get namespace <uipath> || oc new-project <uipath> -
Set the default namespace and project to
<uipath>:oc project <uipath>oc project <uipath>All subsequent
occommands will operate within the<uipath>namespace. -
Create a service account named
uipathadmin:oc create serviceaccount uipathadminoc create serviceaccount uipathadmin -
Use the existing
admincluster role to grant admin permissions to theuipathadminservice account in the<uipath>namespace:oc create rolebinding uipathadmin --clusterrole=admin --serviceaccount=<uipath>:uipathadminoc create rolebinding uipathadmin --clusterrole=admin --serviceaccount=<uipath>:uipathadminNote:This is a namespace-scoped
RoleBindingthat references the built-inadmincluster role. It grantsuipathadminadmin permissions only within the<uipath>namespace, not cluster-wide. NoClusterRoleBindingis created.
Step 2: Creating the required namespace-scoped roles
The uipathadmin service account requires certain permissions during the Automation Suite installation. In the no-cluster-roles flow, you provide these permissions through namespace-scoped roles only.
To create each role, save its configuration as a YAML file and run the following command, replacing the <file_name.yaml> placeholder with the actual name of the YAML file:
oc apply -f <file_name.yaml>
oc apply -f <file_name.yaml>
You can create the YAML file for each role by copying the configuration from the following sections.
The following namespace-scoped roles are the only roles uipathadmin needs in this flow. The prerequisite checks that would otherwise rely on cluster-scoped reads are excluded and validated out-of-band, as described in Running prerequisite checks without cluster roles.
Installation permissions in the <uipath> namespace
Most of the Automation Suite installation runs through ArgoCD, but some components are installed directly through Helm charts. The uipathctl tool runs an installation job that performs these Helm installations in the <uipath> namespace. To do this, uipathadmin needs a namespace-scoped role that can create and manage roles, role bindings, secrets, and config maps.
The following example shows the uipath-automationsuite-role configuration:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: uipath-automationsuite-role
namespace: <uipath>
rules:
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["roles", "rolebindings"]
verbs: ["get", "watch", "list", "patch", "update", "create", "delete"]
- apiGroups: [""]
resources: ["secrets", "configmaps"]
verbs: ["get", "watch", "list", "patch", "update", "create", "delete"]
- apiGroups: ["security.istio.io", "networking.istio.io"]
resources: ["*"]
verbs: ["get", "watch", "list", "patch", "update", "create", "delete"]
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: uipath-automationsuite-role
namespace: <uipath>
rules:
- apiGroups: ["rbac.authorization.k8s.io"]
resources: ["roles", "rolebindings"]
verbs: ["get", "watch", "list", "patch", "update", "create", "delete"]
- apiGroups: [""]
resources: ["secrets", "configmaps"]
verbs: ["get", "watch", "list", "patch", "update", "create", "delete"]
- apiGroups: ["security.istio.io", "networking.istio.io"]
resources: ["*"]
verbs: ["get", "watch", "list", "patch", "update", "create", "delete"]
Certificate and validation permissions in the <istio-system> namespace
The following operations are performed in the <istio-system> namespace:
- The Automation Suite prerequisite check tool reads the pods and services in the
<istio-system>namespace to validate that Istio is installed and configured properly. - The
get secretspermission is required to copy the certificate file from the<istio-system>namespace to the<uipath>namespace.
Because uipathadmin does not configure Istio or install the WebAssembly (WASM) plugin in the no-cluster-roles flow, you use the read-only variant of this role. A cluster administrator performs those operations instead (refer to Step 7).
The following example shows the istio-system-automationsuite-role configuration:
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: istio-system-automationsuite-role
namespace: <istio-system>
rules:
- apiGroups: [""]
resources: ["services", "pods"]
verbs: ["list"]
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["istio-ingressgateway-certs"]
verbs: ["get"]
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: istio-system-automationsuite-role
namespace: <istio-system>
rules:
- apiGroups: [""]
resources: ["services", "pods"]
verbs: ["list"]
- apiGroups: [""]
resources: ["secrets"]
resourceNames: ["istio-ingressgateway-certs"]
verbs: ["get"]
Step 3: Binding the roles
Bind the namespace-scoped roles that you created in the previous step to the uipathadmin service account by running the following commands:
oc project <istio-system>
oc create rolebinding istio-system-automationsuite-rolebinding \
--role=istio-system-automationsuite-role --serviceaccount=<uipath>:uipathadmin
oc project <uipath>
oc create rolebinding uipath-automationsuite-rolebinding \
--role=uipath-automationsuite-role --serviceaccount=<uipath>:uipathadmin
oc project <istio-system>
oc create rolebinding istio-system-automationsuite-rolebinding \
--role=istio-system-automationsuite-role --serviceaccount=<uipath>:uipathadmin
oc project <uipath>
oc create rolebinding uipath-automationsuite-rolebinding \
--role=uipath-automationsuite-role --serviceaccount=<uipath>:uipathadmin
Step 4: Generating the kubeconfig file
After you assign all the permissions to the service account, you must create a kubeconfig file to pass to the uipathctl tool for the installation.
Generating the kubeconfig file on Linux or Mac
To generate the kubeconfig file on Linux or Mac, run the following commands:
# For generating kubeconfig
# Creates the token for uipathadmin service account
token=$(oc -n <uipath> create token uipathadmin --duration=8760h)
# Getting api-server details
server=$(oc config view -o jsonpath="{.clusters[]..server}")
# Login logs on using the provided token and server and outputs kubeconfig at the provided path.
oc login --server=$server --token=$token --kubeconfig=uipathadminkubeconfig --insecure-skip-tls-verify=true
# For generating kubeconfig
# Creates the token for uipathadmin service account
token=$(oc -n <uipath> create token uipathadmin --duration=8760h)
# Getting api-server details
server=$(oc config view -o jsonpath="{.clusters[]..server}")
# Login logs on using the provided token and server and outputs kubeconfig at the provided path.
oc login --server=$server --token=$token --kubeconfig=uipathadminkubeconfig --insecure-skip-tls-verify=true
If the operation was successful, you should see a kubeconfig file named uipathadminkubeconfig.
Generating the kubeconfig file on Windows
You must perform this step using Windows Powershell.
To generate the kubeconfig file on Windows, run the following commands:
# For generating kubeconfig
# Creates the token for uipathadmin service account
$token = oc -n <uipath> create token uipathadmin --duration=8760h
# Getting api-server details
$server = oc config view -o jsonpath="{.clusters[]..server}"
# Login logs on using the provided token and server and outputs kubeconfig at the provided path.
oc login --server=$server --token=$token --kubeconfig=uipathadminkubeconfig --insecure-skip-tls-verify=true
# For generating kubeconfig
# Creates the token for uipathadmin service account
$token = oc -n <uipath> create token uipathadmin --duration=8760h
# Getting api-server details
$server = oc config view -o jsonpath="{.clusters[]..server}"
# Login logs on using the provided token and server and outputs kubeconfig at the provided path.
oc login --server=$server --token=$token --kubeconfig=uipathadminkubeconfig --insecure-skip-tls-verify=true
If the operation was successful, you should see a kubeconfig file named uipathadminkubeconfig.
Step 5: Configuring input.json for restricted-mode operation
In the no-cluster-roles flow, you must add a few keys to your input.json so that uipathctl and the UiPath service charts avoid operations that require cluster-scoped reads or resources. The following sections explain each key.
5.1 Priority classes
Set ignore_priority_class to true:
{
"ignore_priority_class": true
}
{
"ignore_priority_class": true
}
This setting does the following:
- It tells
uipathctlto skip its ownpriorityclasses.scheduling.k8s.iolookup, which would otherwise require a cluster-scoped read. - It propagates to all UiPath service charts, which then omit
priorityClassNamefrom their workloads.
As a result, no Automation Suite pod references a PriorityClass, so no PriorityClass needs to exist on the cluster and none has to be pre-created.
5.2 Certificates and ingress
Add the certificate and ingress keys. For details on the certificate-related keys, refer to Certificate requirements.
{
"server_certificate": {
"tls_cert_file": "<path-to-tls.crt>",
"tls_key_file": "<path-to-tls.key>",
"ca_cert_file": "<path-to-ca.crt>"
},
"ingress": {
"namespace": "<istio-system>",
"gateway_selector": { "istio": "ingressgateway" },
"ingress_gateway_secret": "istio-ingressgateway-certs"
},
"additional_ca_certs": "<path-to-ca.crt>"
}
{
"server_certificate": {
"tls_cert_file": "<path-to-tls.crt>",
"tls_key_file": "<path-to-tls.key>",
"ca_cert_file": "<path-to-ca.crt>"
},
"ingress": {
"namespace": "<istio-system>",
"gateway_selector": { "istio": "ingressgateway" },
"ingress_gateway_secret": "istio-ingressgateway-certs"
},
"additional_ca_certs": "<path-to-ca.crt>"
}
The additional_ca_certs key is required only when your TLS certificate is signed by a private or self-signed Certificate Authority. It propagates the CA bundle to the trust store of all Automation Suite pods.
5.3 AS Robots concurrency limit
This step is required only if you enable AS Robots (asrobots).
If you enable AS Robots, set an explicit concurrency_limit:
{
"asrobots": {
"enabled": true,
"concurrency_limit": 2
}
}
{
"asrobots": {
"enabled": true,
"concurrency_limit": 2
}
}
When concurrency_limit is not set, the AS Robots chart deploys a ClusterRole and ClusterRoleBinding to automatically read node capacity and compute robot concurrency. A namespaced ArgoCD instance cannot manage these cluster-scoped resources, so the asrobots application fails to synchronize:
ComparisonError: cluster level ClusterRoleBinding "<uipath>-asrobots-robot-resources-crb" can not be managed when in namespaced mode
ComparisonError: cluster level ClusterRoleBinding "<uipath>-asrobots-robot-resources-crb" can not be managed when in namespaced mode
With an explicit concurrency_limit, the chart deploys no cluster-scoped resources.
5.4 Bring your own components
Because uipathadmin has no cluster-scoped permissions in this flow, the installer cannot deploy the platform components that create cluster-scoped resources - such as Istio, OPA Gatekeeper, cert-manager, and network policies. You must provision these components yourself and list them in exclude_components so that the installer skips them.
List the components you provide yourself in exclude_components, and set telemetry_optout to true because telemetry cannot be enabled in this flow. For the component list and details, refer to Without cluster roles.
Step 6: Pre-creating the TLS certificate Secret
Because uipathadmin is namespace-scoped only, a cluster administrator must create the istio-ingressgateway-certs Secret in the <istio-system> namespace before installation. This does not grant uipathadmin any extra privilege; it substitutes for the work uipathadmin would have done if it had the cluster-scoped permissions. (No PriorityClass needs to be created - that dependency is removed by ignore_priority_class in Step 5.1.)
The istio-ingressgateway-certs Secret is created as part of configuring the service mesh. To create it, refer to Configuring Istio and installing the WASM plugin for routing.
Because uipathadmin holds only the read-only istio-system-automationsuite-role, it can read this Secret but cannot create it; a cluster administrator must create it.
Ensure the Secret contains all three keys - tls.crt, tls.key, and ca.crt - because the ca.crt key is required when your TLS certificate is signed by a private or self-signed Certificate Authority.
Step 7: Installing and configuring the service mesh and GitOps tool
Follow the standard procedures for the service mesh and GitOps tool. These procedures create additional namespace-scoped roles and bindings for uipathadmin in the <argocd> namespace; none of them require cluster-scoped permissions on uipathadmin.
- Installing and configuring the service mesh - install OpenShift Service Mesh. Because
uipathadminruns with the read-only<istio-system>role, it cannot configure Istio or install the WASM plugin itself; a cluster administrator must set upistio-configurebefore the Automation Suite installation. - Installing and configuring the GitOps tool - provision the dedicated ArgoCD instance and complete all steps.
For the istio-configure setup steps, refer to Configuring Istio and installing the WASM plugin for routing.
- Step 1: Creating a service account
- Step 2: Creating the required namespace-scoped roles
- Installation permissions in the
<uipath>namespace - Certificate and validation permissions in the
<istio-system>namespace - Step 3: Binding the roles
- Step 4: Generating the kubeconfig file
- Generating the kubeconfig file on Linux or Mac
- Generating the kubeconfig file on Windows
- Step 5: Configuring
input.jsonfor restricted-mode operation - 5.1 Priority classes
- 5.2 Certificates and ingress
- 5.3 AS Robots concurrency limit
- 5.4 Bring your own components
- Step 6: Pre-creating the TLS certificate Secret
- Step 7: Installing and configuring the service mesh and GitOps tool