Container-Windows-Agenten installieren

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

Wichtig!

  • Für Windows-Agenten muss ein ServiceManager mit den Berechtigungen des Systembenutzers ausgeführt werden, um Jobs und Dateiübertragungen ausführen zu können. Stellen Sie sicher, dass Sie den ServiceManager verwenden, der mit dem Systemkonto installiert wird.

  • Es ist nicht möglich, das Centralized Agent Upgrade (CAU) (CAU) zu verwenden, um Agenten in einem Container zu aktualisieren, weil der Agent nach dem Neustart eines Containers das Agenten-Image erneut verwendet und dadurch eine irrelevante CAU darstellt.

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

  • Binärdateien für den ServiceManager

  • 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.

Beispiel für Dockerfile

FROM mcr.microsoft.com/windows/server:ltsc2022

RUN echo on && \
    mkdir C:\\agent-windows  && \
    winrm set winrm/config/service/auth @{Basic="true"} && \
    winrm set winrm/config/service @{AllowUnencrypted="true"} && \
    net user Administrator Passw0rd /active:yes && \
    powershell -Command (New-ItemProperty 'HKLM:\\SYSTEM\\CurrentControlSet\\Services\\Tcpip6\\Parameters\\' -Name  'DisabledComponents' -Value '0xffffffff' -PropertyType 'DWord')

RUN powershell -Command \
		$ErrorActionPreference = 'Stop'; \
		$ProgressPreference = 'SilentlyContinue'; \
		[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Ssl3; \
		Invoke-WebRequest -UseBasicParsing -Uri "https://aka.ms/vs/15/release/vc_redist.x64.exe" -OutFile vc_redist.x64.exe; \
		Start-Process ./vc_redist.x64.exe -ArgumentList '/quiet' -Wait; \
		Remove-Item ./vc_redist.x64.exe -force

WORKDIR "C:\\agent-windows"

COPY Automation.Engine_Agent_Windows.zip .
COPY Automation.Engine_ServiceManager.zip .
COPY run.ps1 .

ENTRYPOINT [ "powershell.exe" ]
CMD [ "C:\\agent-windows\\run.ps1" ]

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.

Das Image starten

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

Beispiel - _start.bat

Stellen Sie sicher, dass die Definition der Variablen -v "%cd%\trustedcert": und -v "%cd%\security": auf die relevanten Zertifikate verweisen.

docker run -it ^
  --env-file env.file ^
  -p 21000:2300 ^
  -v "%cd%\trustedcert":"c:\agent-windows\trustedcert" ^
  -v "%cd%\security":"c:\agent-windows\security" ^
  agent-windows: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

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.ps1 entsprechen. Weitere Informationen finden Sie unter Agent Windows 64-bit - INI-Datei.

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

    Beispiel für die Datei run.ps1

    function unpackZipFile($sourceArchive, $destinationFolder, $subFolder) {
    	Expand-Archive -path $sourceArchive -destinationPath TMP_FOLD
    	New-Item $destinationFolder -itemType "directory"
    	Move-Item .\TMP_FOLD\$subFolder\* $destinationFolder
    	Remove-Item .\TMP_FOLD\ -recurse
    }
    
    function replaceInFile($filePath, $replacements) {
    	$result = Get-Content $filePath
    	foreach ($replacement in $replacements.getEnumerator()) {
    		$result = $result -replace $replacement.Name, $replacement.Value
    	}
    	Set-Content -Path $filePath -Value $result 
    }
    
    function prepareAgent {
    	$agentBasePath = ".\Automic\Agent\windows"
    	Write-Output "Unpacking Agent"
    	unpackZipFile -sourceArchive .\Automation.Engine_Agent_Windows.zip -destinationFolder "$agentBasePath\bin" -subFolder Agents\windows\x64
    	
    	New-Item "$agentBasePath\temp" -ItemType "directory"
    	
    	Write-Output "Adapting Agent's ini file"
    	replaceInFile -filePath "$agentBasePath\bin\UCXJWX6.ini" -replacements @{
    		"^NAME=.*" 			= "NAME=$env:automic_global_name";
    		"^SYSTEM=.*" 			= "SYSTEM=$env:automic_global_system";
    		"^connection=.*" 		= "connection=$env:automic_tcpip_connection";
    		"^trustedCertFolder=.*" 	= "trustedCertFolder=..\..\..\..\trustedcert";
    		"^agentSecurityFolder=.*" 	= "agentSecurityFolder=..\..\..\..\security";
    		"^InitialPackage=.*" 	  	= "InitialPackage=package";
    		"^;UC_EX_IP_ADDR=.*" 		= "UC_EX_IP_ADDR=$env:automic_variables_uc_ex_ip_addr";
    		"^;UC_EX_IP_PORT=.*" 		= "UC_EX_IP_PORT=$env:automic_variables_uc_ex_ip_port";
    		"^;UC_EX_JOB_MD_IP_ADDR=.*"	= "UC_EX_JOB_MD_IP_ADDR=$env:automic_variables_uc_ex_job_md_ip_addr";
    	}
    }
    
    function installAndStartServiceManager {
    	$smgrBasePath = ".\Automic\ServiceManager"
    	$smgrWorkdir = "$smgrBasePath\bin"
    
    	Write-Output "Unpacking Service Manager"
    	unpackZipFile -sourceArchive .\Automation.Engine_ServiceManager.zip -destinationFolder "$smgrWorkdir" -subFolder ServiceManager\windows\x64\
    	New-Item "$smgrBasePath\temp" -ItemType "directory"
    	
    	Write-Output "Create smc and smd file"
    	Set-Content -path "$smgrWorkdir\AUTOMIC.smd" -value "DEFINE Agent;*OWN\..\..\Agent\windows\bin\UCXJWX6.exe;*OWN\..\..\Agent\windows\bin"
    	Set-Content -path "$smgrWorkdir\AUTOMIC.smc" -value "WAIT 0`nCREATE Agent"  
    
    	Write-Output "Adapting Service Manager's ini file"
    	replaceInFile -filePath "$smgrWorkdir\ucybsmgr.ini" -replacements @{
    		"^\[Destination.*" 	= "[Destination AUTOMIC]";
    		"^cmdfile.*" 		= "cmdfile=*OWN\AUTOMIC.smc";
    		"^deffile.*" 		= "deffile=*OWN\AUTOMIC.smd";
    	}
    
    	Write-Output "Installing Service Manager"
    	$smgrExe = "$smgrWorkdir\ucybsmgr.exe"
    	Start-Process -FilePath $smgrExe -ArgumentList "-install AUTOMIC" -WorkingDirectory $smgrWorkdir -Wait -Verb RunAs
    
    	$serviceName = "UC4.ServiceManager.AUTOMIC"
    
    	Write-Output "Starting Service Manager"
    	Restart-Service -Name $serviceName -Force
    	Start-Sleep -Milliseconds 15000
    	$agentProcess = (get-process | Where-Object {$_.ProcessName -eq 'ucxjwx6'} | Select-Object Id, ProcessName)
    
    	if ($null -ne $agentProcess) {
    		Write-Output "Agent started:  $agentProcess"
    		$agentPID = $agentProcess.id
    		do {
    			$processStillActive = get-process | Where-Object {$_.ID -eq $agentPID}
    			Start-Sleep -Seconds $env:agent_liveness_check_intervall
    		} while ($null -ne $processStillActive)
    		Write-Output "Agent process shut down"
    	} else {
    		Write-Output "Failed to start agent - check log files for more information"
    	}
    }
    
    #### Main ####
    prepareAgent
    installAndStartServiceManager

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: