MAIN MENU
Devolutions Blog

Ankündigungen, Aktualisierungen und Einsichten von Devolutions

Devolutions PowerShell Universal reverse proxy illustration for the blog.

PowerShell Universal Reverse Proxy: VS Code im Browser hosten mit YARP-Integration

Dieser Beitrag führt durch YARP in PowerShell Universal, eine Docker code-server-Instanz mit gemapptem PSU-Repository, Reverse-Proxy-Routen in appsettings.json mit AdministratorRolePolicy und die Risiken eines unauthentifizierten Editors.

PowerShell Universal dreht sich seit jeher darum, Tools mit Code zu bauen. Deshalb haben wir der Bearbeitungserfahrung viel Zeit gewidmet. Daraus entstanden Funktionen wie Codevervollständigung und PSScriptAnalyzer in der Admin-Konsole sowie die Universal-Erweiterung für VS Code.

In diesem Beitrag zeigen wir, wie Sie das Tooling einen Schritt weiterführen und VS Code direkt im Browser hosten, mit einer neuen PSU-Funktion in v4.2: Reverse Proxys.

YARP (Yet Another Reverse Proxy)

YARP ist eine Technologie, aufgebaut auf ASP.NET, die das Proxien zu lokalen und entfernten Webdiensten ermöglicht. Damit können Sie einen einzelnen Endpunkt und Port nutzen, um einen anderen Endpunkt oder Port bereitzustellen. Läuft beispielsweise ein Dienst auf Port 5000 und ein anderer auf Port 8080, können Sie vom ersten zum zweiten über einen konfigurierbaren Pfad oder Header proxien.

Stellen Sie sich zum Beispiel eine Webanfrage an den ersten Dienst unter folgendem Pfad vor: http://localhost:5000/myservice/mypath. Mit der richtigen YARP-Konfiguration leiten Sie diese Anfrage an den Dienst auf 8080 weiter, etwa an http://localhost:8080/mypath. YARP-Konfigurationen bieten zahlreiche Optionen, um Pfade und Header zu transformieren, Authentifizierung durchzusetzen und Endpunkte zu clustern.

YARP wurde in PowerShell Universal v4.2 integriert und wird heute Abend in Nightly Builds ausgeliefert. Die aktuelle YARP-Plugin-Dokumentation finden Sie ebenfalls hier.

code-server

code-server ist ein Open-Source-Fork von VS Code, der im Browser läuft, von Coder. Dieser Fork von VS Code ist plattformübergreifend und läuft als Dienst mit zahlreichen Konfigurationsoptionen, von Ports bis zur Authentifizierung. Er unterstützt sogar Erweiterungen.

code-server mit PowerShell Universal konfigurieren

Ein sinnvoller Einsatz von code-server ist der als Editor für Ihre PowerShell Universal-Konfigurationsdateien. Zum Remote-Bearbeiten von Dateien müssten Sie sonst die Universal-Admin-Konsole oder die Universal-VS-Code-Erweiterung nutzen. Beide Optionen haben Einschränkungen, daher ist eine vollständige VS-Code-Instanz mit Remotezugriff sehr praktisch.

code-server installieren

Zuerst installieren und konfigurieren wir code-server. Das sollte auf der PSU-Instanz geschehen, damit der Remotezugriff möglich ist. Wir geben es nicht wirklich remote frei, sondern nutzen den neuen PSU-Reverse-Proxy, um Authentifizierung und Autorisierung durchzusetzen.

Weil die code-server-Installation Windows nicht direkt unterstützt, verwenden wir Docker.

Zuerst ziehen Sie das Docker-Image.

docker pull codercom/code-server:latest

Als Nächstes können Sie das Docker-Image starten und das Repository-Verzeichnis in den Container mappen. So erhalten Sie Zugriff auf die PSU-Konfigurationsdateien.

docker run --name code-server -p 127.0.0.1:8080:8080 `
    -v /c/ProgramData/UniversalAutomation/Repository:/home/coder/project `
    -e "DOCKER_USER=$ENV:USERNAME" `
    codercom/code-server:latest

Im Docker-Container können Sie die Authentifizierung in der Datei /home/coder/.config/code-server/config.yaml deaktivieren. Wir nutzen stattdessen die PSU-Authentifizierung.

bind-addr: 127.0.0.1:8080
auth: none
cert: false

Danach müssen Sie den Container neu starten. Sie sollten code-server unter http://localhost:8080 im Browser sehen können.

PSU-Reverse-Proxy-Konfiguration

Als Nächstes konfigurieren wir den PSU-Reverse-Proxy. Das geschieht derzeit in der Datei appsettings.json. Sie können die Datei unter %ProgramData%\PowerShellUniversal bearbeiten.

Die folgende Konfiguration stellt code-server über den Pfad /code im PSU-Server bereit. Beachten Sie, dass ich AdministratorRolePolicy einbinde, damit nur Administratoren auf diesen Pfad zugreifen können.

{
    "ReverseProxy": {
        "Routes": {
            "route1": {
                "ClusterId": "cluster1",
                "AuthorizationPolicy": "AdministratorRolePolicy",
                "Match": {
                    "Path": "/code/{**catch-all}"
                },
                "Transforms": [
                    {
                        "PathRemovePrefix": "/code"
                    }
                ]
            }
        },
        "Clusters": {
            "cluster1": {
                "Destinations": {
                    "destination1": {
                        "Address": "http://localhost:8080"
                    }
                }
            }
        }
    }
}

Wenn das erledigt ist, starten Sie PowerShell Universal. Melden Sie sich unter http://localhost:5000/login an. Navigieren Sie anschließend zu http://localhost:5000/code. Sie sehen VS Code im Browser, und der Repository-Ordner ist zugänglich. Von hier aus können Sie Erweiterungen (wie PowerShell) installieren und Ihre PSU-Instanz verwalten.

code-server in the browser showing the PowerShell Universal repository at localhost:5000/code.
VS Code im Browser über den PowerShell Universal-Reverse-Proxy

Hinweise und Ausblick

Die YARP-Integration in PSU wird deutlich weiter reichen als das Hosten von VS Code. Sie können zu allerlei APIs weiterleiten und dieselbe PSU-Authentifizierung und -Autorisierung durchsetzen, die Sie für PSU selbst nutzen. Wir prüfen noch, wie wir diese Funktion in PSU am besten bereitstellen, daher kann sie sich vor der Veröffentlichung ändern.

Das ist noch ein Nightly Build, und wir unterstützen diese Funktion noch nicht. Sie müssen Ihre code-server-Implementierung auch verstehen, damit Sie keine offene VS-Code-Instanz ohne Authentifizierung für Benutzer freigeben. Terminals können erstellt werden und geben Remotebenutzern die volle Kontrolle über Ihren PSU-Server. Coder bietet ein vollständiges Team-Tool (Coder Enterprise) mit mehr Funktionen, das für diesen Einsatz besser geeignet ist.

Bitte senden Sie Feedback oder Fragen in den Foren.

Bereit zum Bauen? PowerShell Universal herunterladen.