Container-UNIX-Agenten installieren

Als Administrator richten Sie Ihr System so ein, dass ein UNIX-Agent in einem Container ausgeführt wird, indem Sie ein Docker-Image erstellen und ausführen, das einen UNIX-Agenten hosten soll.

Die Broadcom Software Academy enthält Beispiele zum Bereitstellen eines Automic Automation Java-, Windows- oder UNIX-Agenten in einem Container. Um auf diese zusätzlichen Informationen zuzugreifen, wählen Sie den entsprechenden Link aus:

Diese Seite beinhaltet Folgendes:

Voraussetzungen

Stellen Sie sicher, dass alle Ressourcen, die von den Agenten beim Erstellen benötigt werden, zur Build-Zeit zur Verfügung stehen. Dabei handelt es sich um:

  • Basis-Image

  • Binärdateien für den Agenten

  • INI-Dateien

Hinweis: Das Image sollte generisch sein, damit es für mehrere Instanzen wiederverwendet werden kann. Deshalb wird empfohlen, nur Ressourcen hinzufügen, die sich für mehrere Instanzen nicht ändern. Stellen Sie sicher, dass Sie keine instanzspezifische Konfiguration hinzufügen.

Eine Verbindung zur Automation Engine herstellen

Die Automation Engine und die Windows-, UNIX- und Java-Agenten kommunizieren unter Verwendung von TLS/SSL. Diese Agenten richten eine Verbindung zum Java-Kommunikationsprozess (JCP) ein, der vertrauenswürdige Zertifikate verwendet, um ihre Identität gegenüber anderen Kommunikationspartnern nachzuweisen.

Wichtig! Sie sollten mit TLS/SSL und der Zertifikatimplementierung vertraut sein, bevor Sie die entsprechende Komponente installieren bzw. aktualisieren. Weitere Informationen finden Sie hier:

Wenn Sie von einer Zertifizierungsstelle signierte Zertifikate verwendet haben, werden die Zertifikate standardmäßig im entsprechenden Java- oder Betriebssystemspeicher gespeichert: dem Java Trust Store für Java-Komponenten und Java-Agenten, dem Windows-Betriebssystemspeicher für Windows-Agenten und dem TLS/SSL-Speicher für UNIX-Agenten. In diesem Fall müssen Sie nur prüfen, ob die Root-Zertifikate bereits im jeweiligen Speicher sind.

Wenn sich die relevanten Zertifikate nicht dort befinden und Sie sie importieren möchten, können Sie für diesen Zweck für das Betriebssystem oder Java spezifische Tools verwenden, wie zum Beispiel Keytool, cert-manager, OpenSSL usw. Weitere Informationen zur Verwendung dieser Tools finden Sie in der entsprechenden Produktdokumentation.

Wenn Sie nicht den Standardspeicherort für die oben aufgeführten Komponenten und Agenten verwenden möchten, stellen Sie sicher, dass Sie die Parameter trustedCertFolder=, agentSecurityFolder= und keyPassword= (falls zutreffend) in der entsprechenden Konfigurationsdatei (INI) verwenden, um den Pfad zum Ordner zu definieren, in dem die vertrauenswürdigen Zertifikate gespeichert sind.

Wichtig! TLS/SSL-Agenten (in Containern und vor Ort) sowie das TLS Gateway, wenn sie für die Automic Automation Kubernetes Edition verwendet werden, stellen eine Verbindung zu einem Ingress-/HTTPS-Load-Balancer her, der zur Authentifizierung ein Zertifikat anfordert.

Stellen Sie sicher, dass die Adresse des Load Balancers auf beiden Seiten definiert ist: in der Automation Engine und auf dem Agenten/TLS Gateway, und dass Ihr HTTPS-Load-Balancer die erforderlichen Zertifikate zur Nutzung besitzt. Weitere Informationen finden Sie unter Eine Verbindung zum AWI, die JCP- und REST-Prozesse über einen Ingress herstellen.

Container konfigurieren

Sie passen die Containerkonfiguration für einen bestimmten Container (Instanz eines Images) zur Laufzeit an. Sie können den Agenten entweder im privilegierten (root)- oder im nicht privilegierten Modus ausführen.

Das Image starten

Sie können ein einfaches Docker-Script verwenden, um das Image zu starten.

Beispiel - _start.sh

Stellen Sie sicher, dass die Definition der Variablen -v ${PWD}/security: und -v ${PWD}/trustedcert: auf die relevanten Zertifikate verweisen.

#!/bin/sh

# add '--entrypoint bash' for debugging
docker run -it \
    --env-file env.file \
    -p 21000:2300 \
    -v ${PWD}/security:/opt/agent-unix/bin/security \
    -v ${PWD}/trustedcert:/opt/agent-unix/trustedcert \
    -v ${PWD}/package:/opt/agent-unix/bin/package \
    agent-unix:21.0

Die Datei env.file enthält die folgenden Informationen:

automic_global_name=Linux-Docker-V210
automic_global_system=AUTOMIC
automic_global_logging=CON:
automic_tcpip_connection_DNS=myAEServer.local:8443
automic_tcpip_connection=1.2.3.4:8443
automic_variables_uc_ex_ip_addr=192.168.1.2
automic_variables_uc_ex_ip_port=12300
automic_variables_uc_ex_job_md_ip_addr=localhost
not_used_automic_misc_msgtostdout=yes
automic_keypass=changeit

Sie können auch k8s-Scripts verwenden, um das Image zu starten.

Beispiel k8s deployment.yaml

Stellen Sie sicher, dass die Definition der Parameter - name: security-volume und - name: trustedcert-volume auf die relevanten Zertifikate verweisen.

Hinweis: Dieses Beispiel verwendet PVCs zum Mounten der Zertifikate usw. In diesem Fall müssen Sie die PV und PVCs erstellen, bevor Sie die Agenten bereitstellen, und sie entsprechend konfigurieren.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: docker-linux
  labels:
    app: agent-unix
spec:
  replicas: 1
  selector:
    matchLabels:
      app: agent-unix
  template:
    metadata:
      labels:
        app: agent-unix
    spec:
      containers:
      - name: agent-unix
        image: agent-unix:21.0
        imagePullPolicy: Never
        ports:
        - containerPort: 2300
          hostPort: 21000
        envFrom:
          - configMapRef:
              name: docker-linux-config
        volumeMounts:
          - name: security-volume
            mountPath: /opt/agent-unix/bin/security
          - name: trustedcert-volume
            mountPath: /opt/agent-unix/trustedcert
      volumes:
      - name: security-volume
        persistentVolumeClaim:
          claimName: pvc-securityfolder
      - name: trustedcert-volume
        persistentVolumeClaim:
          claimName: pvc-trustedcertfolder

Die configmap enthält die folgenden Informationen:

TheapiVersion: v1
kind: ConfigMap
metadata:
  name: k8s-linux-config
data:
  automic_global_name: linux-k8s-v210
  automic_global_system: AUTOMIC
  automic_tcpip_connection_DNS: myAEServer.local:8443
  automic_tcpip_connection: 1.2.3.4:8443
  automic_authorization_keypassword: changeit
  automic_misc_msgtostdout: "yes"
  automic_variables_uc_ex_ip_addr: 192.168.1.2
  automic_variables_uc_ex_ip_port: "22300"
  automic_variables_uc_ex_job_md_ip_addr: localhost

Konfigurieren des Agenten

Es gibt mehrere Bereiche, die für die erfolgreiche Konfiguration der Agenten relevant sind:

  1. Falls noch nicht geschehen, konfigurieren Sie das JCP-Zertifikat.

    Stellen Sie sicher, dass der Agent dem JCP vertraut. Wenn Sie kein öffentliches vertrauenswürdiges Zertifikat verwenden, fügen Sie das relevante Zertifikat dem TrustedCertFolder hinzu. Weitere Informationen finden Sie unter Verbindungen zur AE sichern (TLS/SSL).

  2. Konfigurieren Sie das Agenten-Zertifikat.

    Der Agent verwendet die Dateien (private Schlüssel, signierte Zertifikate und Stammzertifikate), die in seinem security-Ordner gespeichert sind, um sich bei der Automation Engine zu authentifizieren. Sie müssen diesen Ordner auf einem Datenträger beibehalten. Andernfalls geht das Zertifikat (und damit der private Schlüssel) verloren und die Automation Engine erkennt den Agenten nicht und weist ihn ab. Weitere Informationen finden Sie unter Hinweise zu TLS-/SSL-Zertifikaten.

  3. Authentifizieren Sie den Agenten.

    Wenn Sie die Authentifizierungsmethoden LOCAL oder LOCAL_REMOTE verwenden, benötigen Sie für den ersten Start ein Authentifizierungspaket. Weitere Informationen finden Sie unter Agenten-Authentifizierung und Ändern der Authentifizierungsmethode.

    Die einfachste Methode, das Authentifizierungspaket für den ersten Start zu aktivieren, ist es, ein Volume festzulegen und es im Parameter InitialPackage= der INI-Datei zu definieren.

  1. Konfigurieren Sie die INI-Datei.

    Es wird empfohlen, Umgebungsvariablen zu verwenden, um die INI-Datei zu konfigurieren. Sie können dies tun, indem Sie die Parameter definieren, die den INI-Dateieinstellungen in der Datei run.sh entsprechen. Weitere Informationen finden Sie in der INI-Datei des Agent Unix.

    Sie können der INI-Datei auch einen Datenträger zur Verfügung stellen, der beim Starten eines Agenten übergeben wird.

    Außerdem können Sie den Agenten entweder im privilegierten (root)- oder im nicht privilegierten Modus ausführen.

    • Ausführen des Agenten im privilegierten Modus (Root)

      Beispiel für Dockerfile

      FROM ubuntu:20.04 
      													 
      													 RUN mkdir /opt/agent-unix 
      													 COPY ucxjlx6.tar.gz /opt/agent-unix 
      													 
      													 WORKDIR /opt/agent-unix 
      													 RUN tar -xzf ucxjlx6.tar.gz 
      													 
      													 WORKDIR /opt/agent-unix/bin 
      													 COPY --chmod=0755 run.sh .  
      													 
      													 ENTRYPOINT [ "/opt/agent-unix/bin/run.sh" ]

      Beispiel run.sh-Datei im privilegierten Modus (Root)

      #!/bin/bash
      
      terminate() {
      	echo $0: trapped signal
      	if [ ! -z "$PID" ]; then
      		echo $0: will kill agent
      		kill $PID
      	fi
      	echo $0: exiting
      	exit 0
      }
      
      echo $0: will trap SIGINT and SIGTERM
      trap 'kill ${!}; terminate' INT TERM
      
      echo "1. adopt agent configuration"
      mv ucxjxxx.ori.ini ucxjlx6.ini 
      sed -i "s/^name.*=.*/name=$automic_global_name/g" ucxjlx6.ini
      sed -i "s/^system.*=.*/system=$automic_global_system/g" ucxjlx6.ini
      sed -i "s/^MsgToStdout.*=.*/MsgToStdout=$automic_misc_msgtostdout/g" ucxjlx6.ini
      sed -i "s/^connection.*=.*/connection=$automic_tcpip_connection/g" ucxjlx6.ini
      sed -i "s/^keyPassword.*=.*/keyPassword=$automic_authorization_keypassword/g" ucxjlx6.ini
      
      sed -i "s#^trustedCertFolder.*=.*#trustedCertFolder=../trustedcert#g" ucxjlx6.ini
      sed -i "s#^initialPackage.*=.*#initialPackage=./package#g" ucxjlx6.ini
      
      sed -i "/^\[VARIABLES\].*/a UC_EX_IP_ADDR=$automic_variables_uc_ex_ip_addr" ucxjlx6.ini
      sed -i "/^\[VARIABLES\].*/a UC_EX_IP_PORT=$automic_variables_uc_ex_ip_port" ucxjlx6.ini
      sed -i "/^\[VARIABLES\].*/a UC_EX_JOB_MD_IP_ADDR=$automic_variables_uc_ex_job_md_ip_addr" ucxjlx6.ini
      
      echo "2. create user"
      useradd -m execuser
      echo execuser:agentpw | chpasswd
      
      echo "3. start agent"
      ./ucxjlx6 &
      PID=$!
      wait $PID

    • Ausführen des Agenten im nicht privilegierten Modus

      Beispiel für Dockerfile

      FROM ubuntu:20.04
      
      RUN mkdir /opt/agent-unix
      COPY ucxjlx6.tar.gz /opt/agent-unix
      
      WORKDIR /opt/agent-unix
      RUN tar -xzf ucxjlx6.tar.gz
      
      # create agentuser with id 1001
      RUN useradd -m agentuser -u 1001 
      RUN echo agentuser:agentpw | chpasswd
      # change to user 1001 aka agentuser
      USER 1001
      RUN chown -R 1001:0 /opt/agent-unix && chmod -R g=u /opt/agent-unix
      
      WORKDIR /opt/agent-unix/bin
      COPY --chmod=0755 run.sh .

      Beispiel run.sh-Datei in nicht privilegiertem Modus

      #!/bin/bash
      
      terminate() {
      	echo $0: trapped signal
      	if [ ! -z "$PID" ]; then
      		echo $0: will kill agent
      		kill $PID
      	fi
      	echo $0: exiting
      	exit 0
      }
      
      echo $0: will trap SIGINT and SIGTERM
      trap 'kill ${!}; terminate' INT TERM
      
      echo "1. adopt agent configuration"
      mv ucxjxxx.ori.ini ucxjlx6.ini 
      sed -i "s/^name.*=.*/name=$automic_global_name/g" ucxjlx6.ini
      sed -i "s/^system.*=.*/system=$automic_global_system/g" ucxjlx6.ini
      sed -i "s/^MsgToStdout.*=.*/MsgToStdout=$automic_misc_msgtostdout/g" ucxjlx6.ini
      sed -i "s/^connection.*=.*/connection=$automic_tcpip_connection/g" ucxjlx6.ini
      sed -i "s/^keyPassword.*=.*/keyPassword=$automic_authorization_keypassword/g" ucxjlx6.ini
      
      sed -i "s#^trustedCertFolder.*=.*#trustedCertFolder=../trustedcert#g" ucxjlx6.ini
      sed -i "s#^initialPackage.*=.*#initialPackage=./package#g" ucxjlx6.ini
      
      sed -i "/^\[VARIABLES\].*/a UC_EX_IP_ADDR=$automic_variables_uc_ex_ip_addr" ucxjlx6.ini
      sed -i "/^\[VARIABLES\].*/a UC_EX_IP_PORT=$automic_variables_uc_ex_ip_port" ucxjlx6.ini
      sed -i "/^\[VARIABLES\].*/a UC_EX_JOB_MD_IP_ADDR=$automic_variables_uc_ex_job_md_ip_addr" ucxjlx6.ini
      
      echo "2. start agent"
      ./ucxjlx6 &
      PID=$!
      wait $PID

Das Netzwerk konfigurieren

Der Listener-Port des Agenten muss für andere Agenten verfügbar sein, um Dateiübertragungen zu aktivieren. Aus diesem Grund muss der Port mit den Funktionen von Docker oder Kubernetes verfügbar sein. Der Job Messenger muss weiterhin eine Verbindung direkt zum Agenten innerhalb des Containers herstellen.

Die folgenden Einstellungen müssen in der INI-Datei definiert werden:

  • UC_EX_IP_ADDR muss auf die externe IP oder den Hostnamen gesetzt werden.

  • UC_EX_IP_PORT muss auf den externen Port gesetzt werden.

  • UC_EX_JOB_MD_IP_ADDRmuss auf localhost gesetzt werden

Wichtig! Stellen Sie sicher, dass die erforderlichen Hostnamen innerhalb des Clusters auflösbar sind, indem Sie entweder ein DNS oder Dienste mit ExternalName konfigurieren.

Siehe auch: