- Erste Schritte
- Datensicherheit und Compliance
- Organisationen
- Authentifizierung und Sicherheit
- Lizenzierung
- Über die Lizenzierung
- Einheitliche Preise: Lizenzierungsplan-Framework
- Aktivieren Ihrer Enterprise-Lizenz
- Migrieren von Test Suite zu Test Cloud
- Lizenzmigration
- Zuweisen von Lizenzen zu Mandanten
- Zuweisen von Benutzerlizenzen
- Freigegeben von Benutzerlizenzen
- Überwachung der Lizenzzuweisung
- Lizenzüberzuweisung
- Lizenzierungsbenachrichtigungen
- Benutzerlizenzverwaltung
- Mandanten und Dienste
- Konten und Rollen
- AI Trust Layer
- Externe Anwendungen
- Benachrichtigungen
- Protokollierung
- Datenexport
- Tests in Ihrer Organisation
- Fehlersuche und ‑behebung
- Migration zur Test Cloud
Test Cloud-Administratorhandbuch
Führen Sie den Relay-Client als Container-Image aus, um sichere ausgehende Tunnel von Containerumgebungen zu Test Cloud herzustellen. Bevor Sie beginnen, konfigurieren Sie eine Relay-Gruppe und halten Sie die Client-Konfigurationszeichenfolge über die Relay-Benutzeroberfläche bereit.
Voraussetzungen
- Container-Runtime: Podman, Docker oder ein Kubernetes-Cluster.
- Container-Image des Relay-Clients:
registry.uipath.com/relay-client:<tag>. Ersetzen Sie<tag>durch eine Relay-Version von der Downloadseite des UiPath Customer Portal . Die mindestens unterstützte Version ist26.4.1. - Eine base64-codierte Konfigurationsdatei, die von der Relay-Benutzeroberfläche generiert wurde.
- Lizenzannahmevereinbarung: Legen Sie
LICENSE_AGREEMENT=acceptals Umgebungsvariable fest, oder fügen Sie--accept-license-agreementan den Startbefehl an. - (Optional) Ein benutzerdefiniertes Zertifizierungsstellenzertifikat, wenn Ihre Organisation Enterprise-PKI verwendet.
Hardwareanforderungen und versionsspezifische Netzwerkvoraussetzungen finden Sie unter Bereitstellen des Relay-Clients.
Schritt 1: Abrufen der Konfiguration
- Öffnen Sie das Dashboard Relay-UI.
- Erstellen oder kopieren Sie Ihre Relay-Konfiguration.
- Speichern Sie die von der Benutzeroberfläche bereitgestellte base64-codierte Konfigurationszeichenfolge.
Schritt 2: Konfigurieren der Umgebungsvariablen
Benutzerdefiniertes Zertifizierungsstellenzertifikat
Wenn Ihre Organisation eine Unternehmens- oder selbstsignierte Zertifizierungsstelle verwendet, legen Sie die folgenden Variablen zusammen, bevor Sie den Container starten:
| Variable | Zweck | Erforderlich |
|---|---|---|
RELAY_CUSTOM_CA_PATH | Pfad zum benutzerdefinierten Zertifikat der Zertifizierungsstelle | Nein |
RELAY_CA_BUNDLE_PATH | Pfad, in den das zusammengeführte Zertifizierungsstellenpaket geschrieben wird | Ja, wenn Sie eine benutzerdefinierte Zertifizierungsstelle verwenden |
Der Relay-Client führt die benutzerdefinierte Zertifizierungsstelle mit dem Systemzertifikatpaket zusammen, bevor er TLS-Verbindungen herstellt. Beide Variablen müssen zusammen festgelegt werden.
Proxy
So leiten Sie ausgehenden Datenverkehr über einen Proxy weiter:
| Variable | Zweck | Erforderlich |
|---|---|---|
HTTP_PROXY und HTTPS_PROXY | Proxy-URL | Nein |
NO_PROXY | Durch Kommas getrennte Hostnamen, Domänen oder IP-Adressen, die den Proxy umgehen | Nein |
Schritt 3: Bereitstellen
Podman
Führen Sie für hohe Verfügbarkeit zwei Container auf separaten Knoten mit unterschiedlichen Namen aus. Ersetzen Sie <RELAY_ID> durch die tatsächliche ID aus der Relay-Benutzeroberfläche – führen Sie beispielsweise relay1-<RELAY_ID> auf Host1 und relay2-<RELAY_ID> auf Host2 aus.
Schnellstart:
# 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
Mit einem benutzerdefinierten Zertifizierungsstellenzertifikat:
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
Startbefehlsoptionen:
| Option | Beschreibung | Beispiel |
|---|---|---|
--config | Inline-Base64-Konfigurationszeichenfolge | --config "base64string..." |
--config-file | Pfad zur Konfigurationsdatei | --config-file /relay.config.b64enc |
--log-level | Ausführliche Protokollierung: trace, debug, info, warn oder error | --log-level debug |
--heartbeat-interval | Heartbeat-Intervall in Sekunden (Minimum: 10) | --heartbeat-interval 10 |
--reconnect-interval | Verbindungsintervall in Sekunden (Minimum: 1800) | --reconnect-interval 1800 |
--health-addr | Bindeadresse für den Endpunkt /healthz . Standardmäßig auf 0.0.0.0:9090; Verwenden Sie einen leeren Wert, um ihn zu deaktivieren | --health-addr=0.0.0.0:9090 |
Kubernetes
Geheimnisse erstellen:
# 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"
Stellen Sie ein StatefulSet bereit:
Verwenden Sie einen StatefulSet, wenn Hostnamenbeschränkungen erzwungen werden. StatefulSets bieten stabile, vorhersehbare Hostnamen (relay-client-0, relay-client-1 usw.), die der Relay-Dienst zur Identifizierung und Validierung von Clients verwendet.
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
Überprüfen Sie die Bereitstellung:
kubectl get statefulset relay-client-<RELAY_ID>
kubectl get statefulset relay-client-<RELAY_ID>
Betrieb
Configuration details
Die Konfigurationsdatei muss den base64-codierten JSON-String enthalten, der von der Relay-Benutzeroberfläche generiert wurde. Beim Start liest der Relay-Client die Konfiguration, decodiert sie, validiert sie und stellt eine Verbindung mit dem angegebenen Relay-Dienst-Endpunkt her.
- Erste Ausführung: Die Konfiguration wird verschlüsselt im Datenverzeichnis gespeichert.
- Nachfolgende Ausführungen: Die verschlüsselte Konfiguration wird automatisch entschlüsselt und verwendet.
- Änderungen an der Konfigurationsdatei: Erfordern einen Neustart des Containers, um wirksam zu werden.
Heartbeat-Intervall
Der Heartbeat hält inaktive TCP-Verbindungen aktiv. Verringern Sie das Intervall, wenn Ihre Firewall, Ihr Proxy oder Ihre Netzwerkadressenübersetzung (NAT) inaktive Verbindungen vor 30 Sekunden auslöst:
--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
Intervall für die erneute Verbindung
Proaktive erneute Verbindung stellt die Verbindung nach einem festen Zeitplan wieder her. Verwenden Sie dies in Umgebungen, in denen ein Proxy oder Lastausgleich einen Timeout bei Inaktivität der Verbindung hat:
--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)
Integritätsendpunkt
Die Option --health-addr ist mit dem Relay-Client 26.4.2 und höher verfügbar.
Das Container-Image aktiviert standardmäßig einen /healthz -HTTP-Endpunkt auf 0.0.0.0:9090. Verwenden Sie --health-addr=<address> um die Bindungsadresse zu ändern, oder --health-addr= um den Endpunkt zu deaktivieren. Der Kubernetes-Bereitschaftstest im Beispielmanifest verwendet diesen Endpunkt.
Zugreifen auf Protokolle
# 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
Die Aufbewahrung von Containerprotokollen wird durch Ihre Container-Laufzeit- oder Kubernetes-Cluster-Protokollierungsrichtlinie gesteuert, nicht durch den Relay-Client.
Sicherheit
Wenden Sie die folgenden Sicherheitseinstellungen in Ihrem Containermanifest an:
readOnlyRootFilesystem: true– verhindert die Änderung des Container-Dateisystems.runAsNonRoot: true– Führt den Prozess als Nicht-Stammbenutzer aus.allowPrivilegeEscalation: false– verhindert die Eskalation von Berechtigungen.capabilities.drop: [ALL]– Verwirft alle Linux-Funktionen.privileged: false– deaktiviert den privilegierten Modus.
Speichern Sie die Relay-Konfiguration in Kubernetes-Geheimnissen und verwenden Sie die rollenbasierte Zugriffskontrolle (RBAC), um den geheimen Zugriff einzuschränken. Betten Sie die Base64-Konfiguration nicht in das Container-Image ein und übergeben Sie sie nicht als einfache Umgebungsvariable.
Fehlersuche und ‑behebung
| Symptome | Ursache | Resolution |
|---|---|---|
license agreement not accepted beim Start | Lizenz-Flag oder -Variable nicht festgelegt | Fügen Sie --accept-license-agreement zum Startbefehl hinzu, oder legen Sie LICENSE_AGREEMENT=acceptfest. |
| Konfigurationsdatei nicht gefunden | Falscher Volume-Bereitstellungspfad oder geheimes Geheimnis | Führen Sie kubectl describe secret relay-config und kubectl describe pod <pod-name> aus, um Bereitstellungen zu überprüfen |
| Verbindung mit dem Relay-Dienst nicht möglich | Netzwerk- oder Firewallproblem | Überprüfen Sie die Pod-Protokolle mit kubectl logs <pod-name> und stellen Sie sicher, dass die erforderlichen ausgehenden Ziele unter Bereitstellen des Relay-Clients festgelegt sind |
| Die benutzerdefinierte Zusammenführung von Zertifizierungsstellen ist fehlgeschlagen | Nicht beide Umgebungsvariablen von Zertifizierungsstellen festgelegt | Legen Sie sowohl RELAY_CUSTOM_CA_PATH als auch RELAY_CA_BUNDLE_PATH zusammen fest |
| Hostname wird vom Relay-Dienst nicht erkannt | Pod-Name ist zufällig (eigenständiger Pod, nicht StatefulSet) | Verwenden Sie ein StatefulSet anstelle eines eigenständigen Pods |
| x509-Zertifikatsfehler | Ungültiges oder nicht zugängliches Zertifizierungsstellenzertifikat | Überprüfen Sie das Zertifikatformat mit openssl x509 -in custom-ca.crt -text -noout und überprüfen Sie die Dateiberechtigungen |
- Voraussetzungen
- Schritt 1: Abrufen der Konfiguration
- Schritt 2: Konfigurieren der Umgebungsvariablen
- Benutzerdefiniertes Zertifizierungsstellenzertifikat
- Proxy
- Schritt 3: Bereitstellen
- Podman
- Kubernetes
- Betrieb
- Configuration details
- Heartbeat-Intervall
- Intervall für die erneute Verbindung
- Integritätsendpunkt
- Zugreifen auf Protokolle
- Sicherheit
- Fehlersuche und ‑behebung