UiPath Documentation
test-cloud
latest
false
重要 :
このコンテンツの一部は機械翻訳によって処理されており、完全な翻訳を保証するものではありません。 新しいコンテンツの翻訳は、およそ 1 ~ 2 週間で公開されます。

Test Cloud 管理ガイド

Relay クライアントをコンテナとしてデプロイする

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: 構成を取得する

  1. Relay UI ダッシュボードを開きます。
  2. リレー構成を作成またはコピーします。
  3. 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ログの詳細度: tracedebuginfowarn、または 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-0relay-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-configkubectl describe pod <pod-name> を実行してマウントを確認します
中継サービスに接続できないネットワークまたはファイアウォールの問題kubectl logs <pod-name> でポッド ログをチェックし、リレー クライアントのデプロイで必要な送信先を確認します
カスタム CA のマージに失敗CA 環境変数が両方とも設定されていないRELAY_CUSTOM_CA_PATHRELAY_CA_BUNDLE_PATHの両方を同時に設定する
ホスト名がリレー サービスで認識されないPod 名がランダムである (スタンドアロン Pod、StatefulSet ではない)スタンドアロンのPodの代わりにStatefulSetを使用する
x509 証明書エラー無効またはアクセスできない CA 証明書証明書の形式を openssl x509 -in custom-ca.crt -text -noout で検証し、ファイルのアクセス許可を確認します

このページは役に立ちましたか?

接続

ヘルプ リソース サポート

学習する UiPath アカデミー

質問する UiPath フォーラム

最新情報を取得