UiPath Documentation
test-cloud
latest
false
Guia do administrador do Test Cloud
Importante :
A localização de um conteúdo recém-publicado pode levar de 1 a 2 semanas para ficar disponível.

Implantação do cliente de Relay como um contêiner

Implante o cliente do UiPath Relay como uma imagem de contêiner usando o Podman, Docker ou Kubernetes para estabelecer túnel de saída seguros em ambientes em contêiner.

Execute o cliente do Relay como uma imagem de contêiner para estabelecer túneis de saída seguros para o Test Cloud a partir de ambientes conteinerizados. Antes de começar, configure um grupo do Relay e tenha a string de configuração do cliente pronta na IU do Relay.

Pré-requisitos​

  • Runtime de contêiner: Podman, Docker ou um cluster Kubernetes.
  • Imagem do contêiner do cliente de Relay: registry.uipath.com/relay-client:<tag>. Substitua <tag> por uma versão de relay da página de downloads do UiPath Customer Portal . A versão mínima compatível é 26.4.1 ou 26.4.3 para conexões baseadas em TCP, como SAP BAPI.
  • Um arquivo de configuração codificado em base64 gerado a partir da IU do Relay.
  • Aceitação do contrato de licença: defina LICENSE_AGREEMENT=accept como uma variável de ambiente ou anexe --accept-license-agreement ao comando de início.
  • (Opcional) Um certificado de CA personalizado se sua organização usar PKI empresarial.

Para requisitos de hardware e pré-requisitos de rede específicos da versão, consulte Implantar o cliente de Relay.

Importante:

Para conexões baseadas em TCP compatíveis, como SAP BAPI, você implanta o cliente de Relay junto com um segundo contêiner, o executor no local. Se você precisar de um, pule a etapa 3 e siga o SAP BAPI e outras conexões baseadas em TCP . Essa seção abrange o Docker e o Podman.

Etapa 1: obter a configuração​

  1. Abra o painel de interface gráfica do Relay.
  2. Crie ou copie sua configuração de relay.
  3. Crie um diretório no host para o arquivo de configuração. Qualquer diretório funciona; esta página usa /opt/uipath/relay/config como exemplo. No Windows, use um caminho do Windows, como C:\uipath\relay\config.
  4. Salve a string de configuração codificada em base64 da interface gráfica lá como relay.config.b64enc. Os comandos de implantação montam esse diretório no contêiner como /relay-config; substitua o caminho de exemplo pelo seu.

Etapa 2: configurar variáveis de ambiente​

Passe essas variáveis como sinalizadores -e com Podman ou Docker, ou como entradas env: no manifesto do Kubernetes, na etapa 3.

Certificado de CA personalizado​

Se sua organização usar uma CA corporativa ou autoassinada, defina as seguintes variáveis juntas antes de iniciar o contêiner:

VariávelFinalidadeRequired
RELAY_CUSTOM_CA_PATHCaminho para o certificado de CA personalizadoSim, se estiver usando CA personalizada
RELAY_CA_BUNDLE_PATHCaminho em que o pacote de CA mesclado é gravadoSim, se estiver usando CA personalizada

O cliente de Relay mescla a CA personalizada com o pacote de certificados do sistema antes de estabelecer quaisquer conexões TLS.

Proxy​

Para rotear o tráfego de saída por meio de um proxy:

VariávelFinalidadeRequired
HTTP_PROXY e HTTPS_PROXYURLDoProxyNão
NO_PROXYNomes de host, domínios ou endereços IP separados por vírgulas que ignoram o proxyNão

Etapa 3: implantar​

Substitua <RELAY_ID> pelo ID real da interface do usuário do relay. Para alta disponibilidade com o Docker ou o Podman, execute dois contêineres em nós separados com nomes distintos, por exemplo, relay1-<RELAY_ID> no host1 e relay2-<RELAY_ID> no host2. No Kubernetes, use duas réplicas com antivírus de pod, conforme no manifesto abaixo. Um início bem-sucedido registra All prerequisite checks passed.

Os comandos Podman e Docker abaixo são executados em primeiro plano com -it --rm, para que você possa assistir à primeira inicialização e o contêiner ser removido quando você o interromper. Para uma implantação de longa duração, substitua -it --rm por -d.

Podman​

Início rápido:

podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --read-only-tmpfs \
  -v /opt/uipath/relay/config:/relay-config:ro,z \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc --accept-license-agreement
podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --read-only-tmpfs \
  -v /opt/uipath/relay/config:/relay-config:ro,z \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc --accept-license-agreement

Com um certificado de CA personalizado:

podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --read-only-tmpfs \
  -v /opt/uipath/relay/config:/relay-config:ro,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/relay.config.b64enc --accept-license-agreement
podman run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --read-only-tmpfs \
  -v /opt/uipath/relay/config:/relay-config:ro,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/relay.config.b64enc --accept-license-agreement

Docker​

Início rápido:

docker run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --tmpfs /tmp \
  -v /opt/uipath/relay/config:/relay-config:ro \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc --accept-license-agreement
docker run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --tmpfs /tmp \
  -v /opt/uipath/relay/config:/relay-config:ro \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc --accept-license-agreement

Com um certificado de CA personalizado:

docker run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --tmpfs /tmp \
  -v /opt/uipath/relay/config:/relay-config:ro \
  -v /tls/custom-ca.crt:/custom-ca.crt:ro \
  -v /tmp/writable:/writable \
  -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/relay.config.b64enc --accept-license-agreement
docker run -it --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> --rm \
  --read-only --tmpfs /tmp \
  -v /opt/uipath/relay/config:/relay-config:ro \
  -v /tls/custom-ca.crt:/custom-ca.crt:ro \
  -v /tmp/writable:/writable \
  -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/relay.config.b64enc --accept-license-agreement

Kubernetes​

Criar segredos:

# Configuration secret
kubectl create secret generic relay-config \
  --from-file=relay.conf=/opt/uipath/relay/config/relay.config.b64enc

# 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=/opt/uipath/relay/config/relay.config.b64enc

# 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"

Implante um StatefulSet:

Use um StatefulSet quando restrições de nome de host forem aplicadas. StatefulSets fornece nomes de host estáveis e previsíveis (relay-client-<RELAY_ID>-0, relay-client-<RELAY_ID>-1 e assim por diante), que o serviço de Relay usa para identificar e validar clientes.

O manifesto monta o segredo custom-ca e define as duas variáveis RELAY_*. Se você não usar uma CA personalizada, remova essas duas variáveis, a montagem de volume custom-ca e o volume custom-ca. A investigação de prontidão usa o ponto de extremidade de integridade, que requer o cliente de Relay 26.4.2 ou posterior.

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

Verifique a implantação:

kubectl get statefulset relay-client-<RELAY_ID>
kubectl get statefulset relay-client-<RELAY_ID>

Opções do comando Iniciar​

Isso se aplica a qualquer runtime.

OpçãoDescriptionExemplo
--configString de configuração base64 embutida--config "base64string..."
--config-fileCaminho para o arquivo de configuração--config-file /relay-config/relay.config.b64enc
--log-levelVerbo baixo do registro em log: trace, debug, info, warn ou error--log-level debug
--heartbeat-intervalIntervalo de pulsação em segundos (mínimo: 10)--heartbeat-interval 10
--reconnect-intervalIntervalo de reconexão em segundos (mínimo: 1800)--reconnect-interval 1800
--health-addrEndereço de vinculação para o ponto de extremidade /healthz . O padrão é 0.0.0.0:9090; use um valor vazio para desabilitá-lo--health-addr=0.0.0.0:9090
--enable-onprem-executorConecta-se ao contêiner Executor local na porta padrão 18080. Consulte SAP BAPI e outras conexões baseadas em TCP--enable-onprem-executor
--onprem-executor-listen-portConecta-se ao contêiner do executor local nesta porta, que deve corresponder ao SERVER_PORT do contêiner. Qualquer sinalizador habilita o executor--onprem-executor-listen-port 18080

SAP BAPI e outras conexões baseadas em TCP​

Importante:

Requer cliente de Relay 26.4.3 ou posterior. Esta seção abrange o Docker e o Podman.

Para conexões baseadas em TCP compatíveis, como SAP BAPI, você executa dois contêineres no mesmo host:

  • Contêiner de cliente de Relay: abre a conexão de saída segura para a UiPath.
  • Contêiner de execução local: conecta-se ao seu sistema local e lida com a conexão baseada em TCP.

O contêiner do executor compartilha a rede do cliente de Relay, de modo que o cliente de Relay alcança o executor localhost em.

Pré-requisitos​

  • Imagem do contêiner do executor no local: registry.uipath.com/relay-onprem-executor:<tag>. Use o mesmo <tag> que a imagem do seu cliente de Relay. A versão mínima com suporte é 26.4.3.
  • As bibliotecas SAP JCo 3 sapjco3.jar, sapidoc3.jar e libsapjco3.so. Baixe-os no Portal de Suporte da SAP, que requer uma conta SAP; A UiPath não os envia.
    • sapjco3.jar e libsapjco3.so estão no pacote SAP Java Connector 3.1 para Linux em x86_64. A imagem do executor é linux/amd64, portanto, um pacote para qualquer outra plataforma não é carregado.
    • sapidoc3.jar no pacote SAP Java IDoc Class Library 3.1 separado.
  • O host de Relay pode resolver e alcançar o nome do host e a porta do sistema SAP.

Preparar as bibliotecas JCo​

As bibliotecas podem estar em qualquer diretório no host. Esta página usa /opt/uipath/relay/executor-deps como exemplo; o que importa é que o comando de implantação monte seu diretório em /opt/uipath/onprem-runtime/dep-libs dentro do contêiner do executor. Os comandos usam sudo porque /opt requer raiz no Linux; omita-o para um diretório seu.

  1. Crie o diretório:

    sudo mkdir -p /opt/uipath/relay/executor-deps
    sudo mkdir -p /opt/uipath/relay/executor-deps
    
  2. Copie os três arquivos para ele. Coloque-os diretamente no diretório, não em subdiretórios:

    sudo cp sapjco3.jar sapidoc3.jar libsapjco3.so /opt/uipath/relay/executor-deps/
    sudo cp sapjco3.jar sapidoc3.jar libsapjco3.so /opt/uipath/relay/executor-deps/
    
  3. Confirme se a biblioteca nativa é criada para x86-64:

    file /opt/uipath/relay/executor-deps/libsapjco3.so
    # Expect: ELF 64-bit LSB shared object, x86-64
    file /opt/uipath/relay/executor-deps/libsapjco3.so
    # Expect: ELF 64-bit LSB shared object, x86-64
    

    Se a saída dizer ARM aarch64 ou outra arquitetura, baixe o pacote Linux no x86_64 em vez disso. No Windows, onde file não está disponível, verifique o pacote do qual você extraiu: o correto é chamado sapjco3-linuxx86_64-<version>.

Implantar ambos os contêineres​

Execute os comandos nesta ordem: o cliente de Relay primeiro, depois o executor. O executor entra na rede do cliente de Relay, portanto, o cliente de Relay deve estar em execução quando o executor for iniciado.

AVISO:

Se você reiniciar ou recriar o cliente de Relay, o executor perderá sua rede e não se recuperará por conta própria. Reinicie o Executor posteriormente, conforme descrito em Reinicialização e atualização.

Antes de executar os comandos:

  • Substitua /opt/uipath/relay/config e /opt/uipath/relay/executor-deps pelos diretórios de host que você escolheu na Etapa 1 e Preparar as bibliotecas JCo. Mantenha os caminhos do lado do contêiner conforme mostrado.
  • Se você já iniciou um cliente de Relay na Etapa 3, pare e remova-o. Os argumentos de um contêiner em execução não podem ser alterados.
  • Se você usar uma CA personalizada ou um proxy, adicione as variáveis da etapa 2 e, para uma CA personalizada, as duas montagens de volume da etapa 3 ao comando do cliente de Relay. O cliente de Relay é o contêiner que se conecta à UiPath.
  • Não publique a porta do executor com -p. Apenas o cliente de Relay precisa alcançá-lo.

Habilite o executor no cliente de Relay com qualquer sinalizador:

BandeiraEfeito
--enable-onprem-executorConecta-se ao Executor na porta padrão 18080
--onprem-executor-listen-port <port>Conecta-se ao executor em <port>. Deve corresponder a SERVER_PORTdo contêiner do executor

Os outros sinalizadores de executor, --onprem-executor-java-home e --onprem-executor-dep-dir, não têm efeito em um contêiner: a imagem do executor inclui seu próprio runtime Java e lê suas bibliotecas a partir de /opt/uipath/onprem-runtime/dep-libs.

Podman​
# 1. Relay client. It owns the network namespace that the executor joins.
podman run -d --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> \
  --read-only --read-only-tmpfs \
  -v /opt/uipath/relay/config:/relay-config:ro,z \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc \
  --accept-license-agreement \
  --onprem-executor-listen-port 18080

# 2. On-prem executor. SERVER_ADDRESS=127.0.0.1 restricts it to loopback,
#    which is where the Relay client reaches it. Without it, the executor
#    image listens on all interfaces of the shared namespace.
podman run -d --name relay-executor-<RELAY_ID> \
  --network container:relay1-<RELAY_ID> \
  -e SERVER_ADDRESS=127.0.0.1 \
  -e SERVER_PORT=18080 \
  -v /opt/uipath/relay/executor-deps:/opt/uipath/onprem-runtime/dep-libs:ro,z \
  registry.uipath.com/relay-onprem-executor:<tag>
# 1. Relay client. It owns the network namespace that the executor joins.
podman run -d --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> \
  --read-only --read-only-tmpfs \
  -v /opt/uipath/relay/config:/relay-config:ro,z \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc \
  --accept-license-agreement \
  --onprem-executor-listen-port 18080

# 2. On-prem executor. SERVER_ADDRESS=127.0.0.1 restricts it to loopback,
#    which is where the Relay client reaches it. Without it, the executor
#    image listens on all interfaces of the shared namespace.
podman run -d --name relay-executor-<RELAY_ID> \
  --network container:relay1-<RELAY_ID> \
  -e SERVER_ADDRESS=127.0.0.1 \
  -e SERVER_PORT=18080 \
  -v /opt/uipath/relay/executor-deps:/opt/uipath/onprem-runtime/dep-libs:ro,z \
  registry.uipath.com/relay-onprem-executor:<tag>

Ou crie um pod do Podman e execute ambos os contêineres nele com --pod. O contêiner infraestrutura do pod possui o namespace da rede, então qualquer um dos contêineres pode reiniciar por conta própria.

Docker​
# 1. Relay client. It owns the network namespace that the executor joins.
docker run -d --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> \
  --read-only --tmpfs /tmp \
  -v /opt/uipath/relay/config:/relay-config:ro \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc \
  --accept-license-agreement \
  --onprem-executor-listen-port 18080

# 2. On-prem executor. SERVER_ADDRESS=127.0.0.1 restricts it to loopback,
#    which is where the Relay client reaches it. Without it, the executor
#    image listens on all interfaces of the shared namespace.
docker run -d --name relay-executor-<RELAY_ID> \
  --network container:relay1-<RELAY_ID> \
  -e SERVER_ADDRESS=127.0.0.1 \
  -e SERVER_PORT=18080 \
  -v /opt/uipath/relay/executor-deps:/opt/uipath/onprem-runtime/dep-libs:ro \
  registry.uipath.com/relay-onprem-executor:<tag>
# 1. Relay client. It owns the network namespace that the executor joins.
docker run -d --name relay1-<RELAY_ID> --hostname relay1-<RELAY_ID> \
  --read-only --tmpfs /tmp \
  -v /opt/uipath/relay/config:/relay-config:ro \
  registry.uipath.com/relay-client:<tag> \
  start --config-file /relay-config/relay.config.b64enc \
  --accept-license-agreement \
  --onprem-executor-listen-port 18080

# 2. On-prem executor. SERVER_ADDRESS=127.0.0.1 restricts it to loopback,
#    which is where the Relay client reaches it. Without it, the executor
#    image listens on all interfaces of the shared namespace.
docker run -d --name relay-executor-<RELAY_ID> \
  --network container:relay1-<RELAY_ID> \
  -e SERVER_ADDRESS=127.0.0.1 \
  -e SERVER_PORT=18080 \
  -v /opt/uipath/relay/executor-deps:/opt/uipath/onprem-runtime/dep-libs:ro \
  registry.uipath.com/relay-onprem-executor:<tag>

Verificar​

Leia os logs com os comandos para seu runtime:

RuntimeLogs do cliente de RelayLogs do executor
Podmanpodman logs relay1-<RELAY_ID>podman logs relay-executor-<RELAY_ID>
Dockerdocker logs relay1-<RELAY_ID>docker logs relay-executor-<RELAY_ID>
  1. Nos logs do cliente de Relay, confirme a linha de pré-requisito On-prem executor checks: OK.
  2. Nos mesmos logs, localize o endpoint do executor, chamado relay1-<RELAY_ID>-system-onprem-executor-<id>, e confirme se ele chega a health check success.
  3. Nos logs do executor,Started OnPremRuntimeApplication confirme.
  4. Execute uma chamada de teste do conector que usa esse ponto de extremidade para confirmar se o caminho completo funciona.
Observação:

Enquanto o contêiner do executor ainda estiver iniciando, a etapa 2 pode mostrar um health check failed: dial tcp [::1]:18080: connect: connection refused primeiro. Isso é esperado e eliminado na próxima verificação, cerca de 10 segundos depois, sem reiniciar o cliente de Relay.

Para problemas, consulte Solução de problemas nesta página primeiro, em seguida, Problemas do executor no local.

Reinicialização e atualização​

Você pode reiniciar ou atualizar o executor por conta própria. Se você reiniciar ou recriar o cliente do Relay, reinicie ou recrie o executor posteriormente: o executor é executado dentro da rede do cliente do Relay, e reiniciar ou recriar o cliente do Relay substitui essa rede, portanto, o contêiner do executor existente não pode se recuperar por conta própria. Use a mesma <tag> para ambas as imagens ao atualizar. Para o Podman, substitua docker por podman.

TarefaO que fazer
Reinicie o executordocker restart relay-executor-<RELAY_ID>. O cliente de Relay continua em execução
Atualizar o executordocker rm -f relay-executor-<RELAY_ID>, em seguida, execute o comando do executor novamente com o novo <tag>
Reiniciar o cliente do Relaydocker restart relay1-<RELAY_ID>, então docker restart relay-executor-<RELAY_ID>
Atualizar o cliente de RelayRemova os dois contêineres e, em seguida, execute os dois comandos novamente com o novo <tag>, cliente de Relay primeiro. Um cliente de Relay recriado é um novo contêiner. Portanto, o executor também deve ser recriado

Operações​

Configuration details​

O arquivo de configuração deve conter a string JSON codificada em base64 gerada pela interface gráfica do Relay. Na inicialização, o cliente de Relay lê a configuração, decodifica-a, valida-a e conecta-se ao ponto de extremidade do serviço de Relay especificado.

  • Primeira execução: a configuração é armazenada criptografada no diretório de dados.
  • Execuções subsequentes: a configuração criptografada é automaticamente descriptografada e usada.
  • Alterações no arquivo de configuração: exigem uma reinicialização do contêiner para entrar em vigor.

Intervalo de pulsação​

A pulsação mantém as conexões TCP ociosas ativas. Reduza o intervalo se seu firewall, proxy ou tradução de endereço de rede (NAT) eliminar conexões inativas antes de 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 reconexão​

A reconexão proativa restaura a conexão em um cronograma fixo. Use isso em ambientes em que um proxy ou balanceador de carga tem um tempo limite de conexão ociosa:

--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)

Ponto de extremidade de integridade​

Observação:

A --health-addr está disponível com o cliente de Relay 26.4.2 e posterior.

A imagem do contêiner habilita um ponto de extremidade /healthz HTTP por padrão em 0.0.0.0:9090. Use --health-addr=<address> para alterar o endereço de vínculo ou --health-addr= para desabilitar o ponto de extremidade. A investigação de prontidão do Kubernetes no manifesto de exemplo usa esse ponto de extremidade.

Como acessar os logs​

# Podman
podman logs -f relay1-<RELAY_ID>

# Docker
docker logs -f relay1-<RELAY_ID>

# Kubernetes (current run)
kubectl logs -f relay-client-<RELAY_ID>-0

# Kubernetes (previous run, if the container restarted)
kubectl logs relay-client-<RELAY_ID>-0 --previous
# Podman
podman logs -f relay1-<RELAY_ID>

# Docker
docker logs -f relay1-<RELAY_ID>

# Kubernetes (current run)
kubectl logs -f relay-client-<RELAY_ID>-0

# Kubernetes (previous run, if the container restarted)
kubectl logs relay-client-<RELAY_ID>-0 --previous

A retenção de log do contêiner é controlada por seu runtime de contêiner ou política de registro em log do cluster Kubernetes, não pelo cliente de Relay.

Segurança​

Aplique as seguintes configurações de segurança no manifesto do seu contêiner:

  • readOnlyRootFilesystem: true: impede a modificação do sistema de arquivos do contêiner.
  • runAsNonRoot: trueexecuta o processo como um usuário não raiz.
  • allowPrivilegeEscalation: false: impede o escalonamento de privilégios.
  • capabilities.drop: [ALL]: encerra todos os recursos do Linux.
  • privileged: false: desabilita o modo privilegiado.

Armazene a configuração de relay em segredos do Kubernetes e use o controle de acesso baseado em funções (RBAC) para restringir o acesso ao segredo. Não incorpore a configuração base64 na imagem do contêiner nem a passe como uma variável de ambiente simples.

Solução de problemas​

ProblemaCausaResolution
license agreement not accepted Na inicializaçãoSinalizador de licença ou variável não definidoAdicione --accept-license-agreement ao comando Iniciar ou defina LICENSE_AGREEMENT=accept
Arquivo de configuração não encontradoCaminho ou segredo de montagem de volume incorretoExecute kubectl describe secret relay-config e kubectl describe pod <pod-name> para verificar montagens
Não é possível conectar ao serviço de relayProblema de rede ou firewallVerifique os logs do pod com kubectl logs <pod-name> e os destinos de saída necessários em Implantação do cliente de Relay
Falha na mesclagem da CA personalizadaVariáveis de ambiente de CA não definidasDefinir RELAY_CUSTOM_CA_PATH e RELAY_CA_BUNDLE_PATH juntos
Nome do host não reconhecido pelo serviço de relayO nome do pod é aleatório (Pod independente, não StatefulSet)Use um StatefulSet em vez de um pod independente
erros de certificado x509Certificado de CA inválido ou inacessívelVerifique o formato do certificado com openssl x509 -in custom-ca.crt -text -noout e verifique as permissões do arquivo
O ponto de extremidade do executor nunca atinge health check successO contêiner do executor não compartilha o namespace da rede do cliente de Relay ou --onprem-executor-listen-port não corresponde ao SERVER_PORTdo executorInicie o executor com --network container:relay1-<RELAY_ID> e defina ambas as portas com o mesmo valor
Depois de reiniciar um contêiner, o outro perde todo o acesso à rede e não se recupera--network container:Com, a rede do contêiner que está se associando é perdida quando o contêiner proprietário é reiniciado. Um pod Podman não é afetado, porque seu contêiner de infraestrutura tem o namespaceInicie o cliente de Relay primeiro para que ele possua o namespace. Após qualquer reinicialização do cliente de Relay, reinicie o contêiner do executor também
O Executor não pode encontrar as bibliotecas JCoOs arquivos estão em um subdiretório do volume montado ou o volume está montado no caminho erradoInstale um diretório que contenha os arquivos diretamente, sem subdiretórios, em /opt/uipath/onprem-runtime/dep-libs

Para problemas de executor que não são específicos de contêineres, como uma biblioteca nativa JCo criada para a arquitetura errada, consulte Problemas de executor local.

Esta página foi útil?

Conectar

Precisa de ajuda? Suporte

Quer aprender? Academia UiPath

Tem perguntas? Fórum do UiPath

Fique por dentro das novidades