- Primeros pasos
- Seguridad y cumplimiento de los datos
- Organizaciones
- Autenticación y seguridad
- Licencia
- Acerca de la licencia
- Precios unificados: marco del plan de licencias
- Activar su licencia Enterprise
- Migrar de Test Suite a Test Cloud
- Migración de licencias
- Asignar licencias a tenants
- Asignación de licencias de usuario
- Anular la asignación de licencias de usuarios
- Monitoring license allocation
- Licencias con exceso de asignación
- Notificaciones de licencias
- Administración de licencias de usuario
- Tenants y servicios
- Cuentas y roles
- Ai Trust Layer
- Aplicaciones externas
- Notificaciones
- Registro
- Exportación de datos
- Pruebas en su organización
- Solución de problemas
- Migrar a Test Cloud
Guía de administración de Test Cloud
Ejecute el cliente de Relay como una imagen de contenedor para establecer túneles de salida seguros a Test Cloud desde entornos en contenedores. Antes de comenzar, configure un Grupo de Relay y tenga lista la cadena de configuración del cliente desde la IU de Relay.
Requisitos previos
- Runtime de contenedor: Podman, Docker o un clúster de Kubernetes.
- Imagen de contenedor de cliente de Relay:
registry.uipath.com/relay-client:<tag>. Sustituye<tag>por una versión de Relay de la página de descargas del Customer Portal de UiPath . La versión mínima compatible es26.4.1. - Un archivo de configuración codificado en base64 generado a partir de la IU de Relay.
- Aceptación del acuerdo de licencia: establece
LICENSE_AGREEMENT=acceptcomo variable de entorno o anexa--accept-license-agreemental comando de inicio. - (Opcional) Un certificado de CA personalizado si tu organización utiliza PKI de empresa.
Para conocer los requisitos de hardware y los requisitos previos de red específicos de la versión, consulta Implementación del cliente de Relay.
Paso 1: obtener la configuración
- Abra el panel de IU de Relay.
- Cree o copie su configuración de Relay.
- Guarda la cadena de configuración codificada en base64 proporcionada por la IU.
Paso 2: configura las variables de entorno
Certificado de CA personalizado
Si tu organización utiliza una CA corporativa o autofirmada, establece las siguientes variables juntas antes de iniciar el contenedor:
| Variable | Propósito | Obligatorio |
|---|---|---|
RELAY_CUSTOM_CA_PATH | Ruta al certificado de CA personalizado | No |
RELAY_CA_BUNDLE_PATH | Ruta donde se escribe el paquete de CA fusionado | Sí, si se utiliza una CA personalizada |
El cliente de Relay fusiona la CA personalizada con el paquete de certificados del sistema antes de establecer cualquier conexión TLS. Ambas variables deben establecerse juntas.
Proxy
Para enrutar el tráfico saliente a través de un proxy:
| Variable | Propósito | Obligatorio |
|---|---|---|
HTTP_PROXY y HTTPS_PROXY | URL del proxy | No |
NO_PROXY | Nombres de host, dominios o direcciones IP separados por comas que omiten el proxy | No |
Paso 3: Implementar
Podman
Para una alta disponibilidad, ejecuta dos contenedores en nodos independientes con nombres distintos. Reemplace <RELAY_ID> por el ID real de la IU de Relay; por ejemplo, ejecute relay1-<RELAY_ID> en el host1 y relay2-<RELAY_ID> en el host2.
Inicio rápido:
# Create a config file with the base64-encoded content from the Relay UI
echo "YOUR_BASE64_CONFIG_HERE" > /tmp/relay_config
# Run the container
podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
--read-only --read-only-tmpfs \
-v /tmp/relay_config:/relay.config.b64enc:z \
-e LICENSE_AGREEMENT=accept \
registry.uipath.com/relay-client:<tag> \
start --config-file /relay.config.b64enc --accept-license-agreement
# Create a config file with the base64-encoded content from the Relay UI
echo "YOUR_BASE64_CONFIG_HERE" > /tmp/relay_config
# Run the container
podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
--read-only --read-only-tmpfs \
-v /tmp/relay_config:/relay.config.b64enc:z \
-e LICENSE_AGREEMENT=accept \
registry.uipath.com/relay-client:<tag> \
start --config-file /relay.config.b64enc --accept-license-agreement
Con un certificado de CA personalizado:
podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
--read-only --read-only-tmpfs \
-v /tmp/relay_config:/relay.config.b64enc:z \
-v /tls/custom-ca.crt:/custom-ca.crt:z \
-v /tmp/writable:/writable:z \
-e RELAY_CUSTOM_CA_PATH=/custom-ca.crt \
-e RELAY_CA_BUNDLE_PATH=/writable/merged-ca.crt \
registry.uipath.com/relay-client:<tag> \
start --config-file /relay.config.b64enc --accept-license-agreement
podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
--read-only --read-only-tmpfs \
-v /tmp/relay_config:/relay.config.b64enc:z \
-v /tls/custom-ca.crt:/custom-ca.crt:z \
-v /tmp/writable:/writable:z \
-e RELAY_CUSTOM_CA_PATH=/custom-ca.crt \
-e RELAY_CA_BUNDLE_PATH=/writable/merged-ca.crt \
registry.uipath.com/relay-client:<tag> \
start --config-file /relay.config.b64enc --accept-license-agreement
Opciones de comando de inicio:
| Opción | Descripción | Ejemplo |
|---|---|---|
--config | Cadena de configuración base64 en línea | --config "base64string..." |
--config-file | Ruta al archivo de configuración | --config-file /relay.config.b64enc |
--log-level | Verbosidad del registro: trace, debug, info, warn o error | --log-level debug |
--heartbeat-interval | Intervalo de latido en segundos (mínimo: 10) | --heartbeat-interval 10 |
--reconnect-interval | Intervalo de reconexión en segundos (mínimo: 1800) | --reconnect-interval 1800 |
--health-addr | Dirección de enlace para el punto final /healthz . El valor predeterminado es 0.0.0.0:9090; utiliza un valor vacío para deshabilitarlo | --health-addr=0.0.0.0:9090 |
Kubernetes
Crear secretos:
# Configuration secret
kubectl create secret generic relay-config \
--from-file=relay.conf=/tmp/relay_config
# Custom CA certificate secret (optional)
kubectl create secret generic custom-ca \
--from-file=custom-ca.crt=./custom-ca.crt
# Headless service for the StatefulSet
kubectl create service clusterip relay-client-<RELAY_ID> --clusterip="None"
# Configuration secret
kubectl create secret generic relay-config \
--from-file=relay.conf=/tmp/relay_config
# Custom CA certificate secret (optional)
kubectl create secret generic custom-ca \
--from-file=custom-ca.crt=./custom-ca.crt
# Headless service for the StatefulSet
kubectl create service clusterip relay-client-<RELAY_ID> --clusterip="None"
Implementar un StatefulSet:
Usa un StatefulSet cuando se aplican restricciones de nombre de host. Los StatefulSets proporcionan nombres de host estables y predecibles (relay-client-0, relay-client-1, etc.), que el servicio de Relay utiliza para identificar y validar clientes.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: relay-client-<RELAY_ID>
spec:
serviceName: relay-client-<RELAY_ID>
replicas: 2
selector:
matchLabels:
app: relay-client-<RELAY_ID>
template:
metadata:
labels:
app: relay-client-<RELAY_ID>
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- relay-client-<RELAY_ID>
topologyKey: "kubernetes.io/hostname"
containers:
- name: relay
image: registry.uipath.com/relay-client:<tag>
args:
- start
- --config-file=/config/relay.conf
- --accept-license-agreement
- --log-level=info
- --heartbeat-interval=30
env:
- name: RELAY_CUSTOM_CA_PATH
value: "/tls/custom-ca.crt"
- name: RELAY_CA_BUNDLE_PATH
value: "/writable/merged-ca.crt"
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsGroup: 1001
runAsNonRoot: true
runAsUser: 1001
readinessProbe:
httpGet:
path: /healthz
port: 9090
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 3
successThreshold: 1
failureThreshold: 2
resources:
requests:
cpu: 50m
memory: 100Mi
volumeMounts:
- name: relay-config
mountPath: /config/relay.conf
subPath: relay.conf
readOnly: true
- mountPath: /writable
name: writable
- name: custom-ca
mountPath: /tls/custom-ca.crt
subPath: custom-ca.crt
readOnly: true
volumes:
- name: relay-config
secret:
secretName: relay-config
- name: writable
emptyDir: {}
- name: custom-ca
secret:
secretName: custom-ca
restartPolicy: Always
terminationGracePeriodSeconds: 30
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: relay-client-<RELAY_ID>
spec:
serviceName: relay-client-<RELAY_ID>
replicas: 2
selector:
matchLabels:
app: relay-client-<RELAY_ID>
template:
metadata:
labels:
app: relay-client-<RELAY_ID>
spec:
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- relay-client-<RELAY_ID>
topologyKey: "kubernetes.io/hostname"
containers:
- name: relay
image: registry.uipath.com/relay-client:<tag>
args:
- start
- --config-file=/config/relay.conf
- --accept-license-agreement
- --log-level=info
- --heartbeat-interval=30
env:
- name: RELAY_CUSTOM_CA_PATH
value: "/tls/custom-ca.crt"
- name: RELAY_CA_BUNDLE_PATH
value: "/writable/merged-ca.crt"
imagePullPolicy: IfNotPresent
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
privileged: false
readOnlyRootFilesystem: true
runAsGroup: 1001
runAsNonRoot: true
runAsUser: 1001
readinessProbe:
httpGet:
path: /healthz
port: 9090
initialDelaySeconds: 5
timeoutSeconds: 1
periodSeconds: 3
successThreshold: 1
failureThreshold: 2
resources:
requests:
cpu: 50m
memory: 100Mi
volumeMounts:
- name: relay-config
mountPath: /config/relay.conf
subPath: relay.conf
readOnly: true
- mountPath: /writable
name: writable
- name: custom-ca
mountPath: /tls/custom-ca.crt
subPath: custom-ca.crt
readOnly: true
volumes:
- name: relay-config
secret:
secretName: relay-config
- name: writable
emptyDir: {}
- name: custom-ca
secret:
secretName: custom-ca
restartPolicy: Always
terminationGracePeriodSeconds: 30
Verifica la implementación:
kubectl get statefulset relay-client-<RELAY_ID>
kubectl get statefulset relay-client-<RELAY_ID>
Operaciones
Configuration details
El archivo de configuración debe contener la cadena JSON codificada en base64 generada por la IU de Relay. Al iniciarse, el cliente de Relay lee la configuración, la decodifica, la valida y se conecta al punto final de servicio de Relay especificado.
- Primera ejecución: la configuración se almacena cifrada en el directorio de datos.
- Ejecuciones posteriores: la configuración cifrada se descifra y se utiliza automáticamente.
- Cambios en el archivo de configuración: requiere un reinicio del contenedor para que surta efecto.
Intervalo de latido
El latido mantiene activas las conexiones TCP inactivas. Reduce el intervalo si tu cortafuegos, proxy o traducción de direcciones de red (NAT) descarta las conexiones inactivas antes de los 30 segundos:
--heartbeat-interval=30 # Default
--heartbeat-interval=10 # For aggressive firewall or NAT environments
--heartbeat-interval=30 # Default
--heartbeat-interval=10 # For aggressive firewall or NAT environments
Intervalo de reconexión
La reconexión proactiva restablece la conexión en una programación fija. Usa esto en entornos donde un proxy o equilibrador de carga tiene un tiempo de espera de conexión inactiva:
--reconnect-interval=0 # Disabled (default)
--reconnect-interval=1800 # Reconnect every 30 minutes (minimum)
--reconnect-interval=0 # Disabled (default)
--reconnect-interval=1800 # Reconnect every 30 minutes (minimum)
Punto final de estado
La opción --health-addr está disponible con el cliente de Relay 26.4.2 y versiones posteriores.
La imagen del contenedor habilita un punto final HTTP /healthz de forma predeterminada en 0.0.0.0:9090. Usa --health-addr=<address> para cambiar la dirección de enlace, o --health-addr= para deshabilitar el punto final. La sonda de preparación de Kubernetes en el manifiesto de ejemplo utiliza este punto final.
Acceder a los registros
# Podman
podman logs -f relay1
# Kubernetes (current run)
kubectl logs -f relay-client-0
# Kubernetes (previous run, if the container restarted)
kubectl logs relay-client-0 --previous
# Podman
podman logs -f relay1
# Kubernetes (current run)
kubectl logs -f relay-client-0
# Kubernetes (previous run, if the container restarted)
kubectl logs relay-client-0 --previous
La retención de registros del contenedor está controlada por su tiempo de ejecución del contenedor o la política de registro del clúster de Kubernetes, no por el cliente de Relay.
Seguridad
Aplica la siguiente configuración de seguridad en tu manifiesto de contenedor:
readOnlyRootFilesystem: true: evita la modificación del sistema de archivos del contenedor.runAsNonRoot: true: ejecuta el proceso como usuario no root.allowPrivilegeEscalation: false: evita la escalada de privilegios.capabilities.drop: [ALL]: elimina todas las capacidades de Linux.privileged: false: deshabilita el modo privilegiado.
Almacena la configuración de Relay en secretos de Kubernetes y utiliza el control de acceso basado en roles (RBAC) para restringir el acceso a los secretos. No incrustes la configuración base64 en la imagen del contenedor ni la pases como una variable de entorno simple.
Solución de problemas
| Síntoma | Causa | Resolución |
|---|---|---|
license agreement not accepted al iniciar | Indicador de licencia o variable no establecida | Añade --accept-license-agreement al comando de inicio o establece LICENSE_AGREEMENT=accept |
| No se ha encontrado el archivo de configuración | Ruta de montaje del volumen o secreto incorrectos | Ejecuta kubectl describe secret relay-config y kubectl describe pod <pod-name> para verificar los montajes |
| No se puede conectar al servicio de Relay | Problema de red o firewall | Compruebe los registros de pod con kubectl logs <pod-name> y verifique los destinos salientes necesarios en Implementar el cliente de Relay |
| Error al combinar la CA personalizada | No se han establecido ambas variables de entorno de CA | Establezca RELAY_CUSTOM_CA_PATH y RELAY_CA_BUNDLE_PATH juntos |
| Nombre de host no reconocido por el servicio de Relay | El nombre del pod es aleatorio (Pod independiente, no StatefulSet) | Usa un StatefulSet en lugar de un Pod independiente |
| Errores de certificado x509 | Certificado de CA no válido o inaccesible | Verifique el formato del certificado con openssl x509 -in custom-ca.crt -text -noout y compruebe los permisos de archivo |
- Requisitos previos
- Paso 1: obtener la configuración
- Paso 2: configura las variables de entorno
- Certificado de CA personalizado
- Proxy
- Paso 3: Implementar
- Podman
- Kubernetes
- Operaciones
- Configuration details
- Intervalo de latido
- Intervalo de reconexión
- Punto final de estado
- Acceder a los registros
- Seguridad
- Solución de problemas