- 基本情報
- データのセキュリティとコンプライアンス
- 組織
- 認証とセキュリティ
- ライセンス
- テナントとサービス
- アカウントとロール
- AI Trust Layer
- 外部アプリケーション
- 通知
- ログ
- データ エクスポート
- 組織でのテスト
- トラブルシューティング
- Test Cloud に移行する
Test Cloud 管理ガイド
Relay クライアントをコンテナー イメージとして実行し、コンテナー化された環境から Test Cloud へのセキュリティで保護された送信トンネルを確立します。開始する前に、Relay グループを設定し、Relay UI からクライアント設定文字列を準備しておきます。
前提条件
- コンテナー ランタイム: Podman、Docker、または Kubernetes クラスター。
- リレー クライアント コンテナー イメージ:
registry.uipath.com/relay-client:<tag>です。<tag>を、UiPath Customer Portal のダウンロード ページから入手したリレー バージョンに置き換えます。サポートされる最小バージョンは26.4.1です。 - Relay UI から生成された Base64 エンコード構成ファイル。
- ライセンス契約への同意:
LICENSE_AGREEMENT=acceptを環境変数として設定するか、start コマンドに--accept-license-agreementを追加します。 - (オプション)カスタム CA 証明書 (組織でエンタープライズ PKI を使用している場合)。
ハードウェア要件とバージョン固有のネットワークの前提条件については、 リレークライアントをデプロイするを参照してください。
手順 1: 構成を取得する
- Relay UI ダッシュボードを開きます。
- リレー構成を作成またはコピーします。
- UI から提供される Base64 エンコード構成文字列を保存します。
手順 2: 環境変数を設定する
カスタム CA 証明書
組織で企業 CA または自己署名 CA を使用している場合は、コンテナーを起動する前に次の変数を一緒に設定します。
| 変数 | 目的 | Required |
|---|---|---|
RELAY_CUSTOM_CA_PATH | カスタム CA 証明書へのパス | いいえ |
RELAY_CA_BUNDLE_PATH | マージされた CA バンドルが書き込まれるパス | はい (カスタム CA を使用する場合) |
リレークライアントは、TLS 接続を確立する前に、カスタム CA をシステム証明書バンドルとマージします。両方の変数を一緒に設定する必要があります。
プロキシ
送信トラフィックをプロキシ経由でルーティングするには:
| 変数 | 目的 | Required |
|---|---|---|
HTTP_PROXY ] と [ HTTPS_PROXY | プロキシ URL | いいえ |
NO_PROXY | プロキシをバイパスするコンマ区切りのホスト名、ドメイン、または IP アドレス | いいえ |
手順 3: デプロイする
Podman
高可用性を実現するには、別々のノードで 2 つのコンテナーを異なる名前で実行します。<RELAY_ID> を Relay UI の実際の ID に置き換えます (たとえば、host1 で relay1-<RELAY_ID> を実行し、host2 でrelay2-<RELAY_ID>します)。
クイック スタート:
# 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
カスタム CA 証明書を使用する場合
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
開始コマンドのオプション:
| オプション | 説明 | 例 |
|---|---|---|
--config | インライン Base64 構成文字列 | --config "base64string..." |
--config-file | 構成ファイルへのパスです | --config-file /relay.config.b64enc |
--log-level | ログの詳細度: trace、 debug、 info、 warn、または error | --log-level debug |
--heartbeat-interval | ハートビート間隔 (秒) (最小: 10) | --heartbeat-interval 10 |
--reconnect-interval | 再接続間隔(秒)(最小:1800) | --reconnect-interval 1800 |
--health-addr | /healthzエンドポイントのバインド アドレスです。既定値は 0.0.0.0:9090です。無効化するには空の値を使用します | --health-addr=0.0.0.0:9090 |
Kubernetes
シークレットを作成します。
# 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"
StatefulSetをデプロイします。
ホスト名の制限が適用されている場合は、StatefulSetを使用します。StatefulSetは、安定した予測可能なホスト名(relay-client-0、 relay-client-1など)を提供し、Relayサービスはこれを使用してクライアントを識別および検証します。
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
デプロイを確認します。
kubectl get statefulset relay-client-<RELAY_ID>
kubectl get statefulset relay-client-<RELAY_ID>
操作
設定の詳細
構成ファイルには、Relay UI によって生成された Base64 でエンコードされた JSON 文字列が含まれている必要があります。起動時に、リレークライアントは構成を読み取り、デコードし、検証し、指定されたリレーサービスエンドポイントに接続します。
- 最初の実行: 構成は暗号化されてデータ ディレクトリに保存されます。
- 後続の実行: 暗号化された設定は自動的に復号され、使用されます。
- 構成ファイルの変更: 有効にするには、コンテナーの再起動が必要です。
ハートビート間隔
ハートビートは、アイドル状態の TCP 接続を維持します。ファイアウォール、プロキシ、またはネットワーク アドレス変換 (NAT) がアイドル状態の接続を 30 秒前に切断する場合は、間隔を短くします。
--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
再接続の間隔
プロアクティブ再接続は、固定スケジュールで接続を再確立します。プロキシまたはロード バランサーにアイドル接続タイムアウトがある環境で使用します。
--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)
正常性エンドポイント
--health-addr オプションは、Relay クライアント (26.4.2) 以降で使用できます。
コンテナー イメージでは、0.0.0.0:9090で既定で HTTP /healthz エンドポイントが有効になります。--health-addr=<address> を使用してバインド アドレスを変更するか、--health-addr= を使用してエンドポイントを無効にします。マニフェストの例の Kubernetes Readiness Probe は、このエンドポイントを使用します。
ログにアクセスする
# 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
コンテナログの保持は、Relayクライアントではなく、コンテナランタイムまたはKubernetesクラスタロギングポリシーによって制御されます。
セキュリティ
コンテナー マニフェストに次のセキュリティ設定を適用します。
readOnlyRootFilesystem: true— コンテナファイルシステムの変更を防ぎます。runAsNonRoot: true— プロセスを非 root ユーザーとして実行します。allowPrivilegeEscalation: false— 権限昇格を防止します。capabilities.drop: [ALL]— Linux のすべての機能をドロップします。privileged: false— 特権モードを無効にします。
リレーの構成は Kubernetes シークレットに保存し、ロールベースのアクセス制御 (RBAC) を使用してシークレット アクセスを制限します。Base64 の構成をコンテナー イメージに埋め込んだり、プレーンな環境変数として渡したりしないでください。
トラブルシューティング
| 症状 | 原因 | 解決方法 |
|---|---|---|
license agreement not accepted 起動時 | ライセンス フラグまたは変数が設定されていない | start コマンドに --accept-license-agreement を追加するか、 LICENSE_AGREEMENT=accept |
| 設定ファイルが見つからない | ボリュームのマウント パスまたはシークレットが正しくない | kubectl describe secret relay-config と kubectl describe pod <pod-name> を実行してマウントを確認します |
| 中継サービスに接続できない | ネットワークまたはファイアウォールの問題 | kubectl logs <pod-name> でポッド ログをチェックし、リレー クライアントのデプロイで必要な送信先を確認します |
| カスタム CA のマージに失敗 | CA 環境変数が両方とも設定されていない | RELAY_CUSTOM_CA_PATHとRELAY_CA_BUNDLE_PATHの両方を同時に設定する |
| ホスト名がリレー サービスで認識されない | Pod 名がランダムである (スタンドアロン Pod、StatefulSet ではない) | スタンドアロンのPodの代わりにStatefulSetを使用する |
| x509 証明書エラー | 無効またはアクセスできない CA 証明書 | 証明書の形式を openssl x509 -in custom-ca.crt -text -noout で検証し、ファイルのアクセス許可を確認します |