Hovedmenu
Devolutions-blog

Nyheder, opdateringer og indsigter fra Devolutions.

Devolutions PowerShell Universal reverse proxy illustration for the blog.

Reverse proxy i PowerShell Universal: host VS Code i browseren med YARP-integration

En gennemgang af YARP i PowerShell Universal, en Docker-instans af code-server knyttet til PSU-repositoriet, reverse proxy-ruter i appsettings.json med AdministratorRolePolicy og forbeholdene ved at eksponere en editor uden godkendelse.

PowerShell Universal har altid handlet om at bygge værktøjer med kode. Derfor er redigeringsoplevelsen noget, vi har brugt meget tid på. Det har givet funktioner som kodefuldførelse og PSScriptAnalyzer i administrationskonsollen og Universal-udvidelsen til VS Code.

I indlægget ser vi på, hvordan du tager værktøjet et skridt videre og hoster VS Code direkte i browseren ved hjælp af en ny funktion i PSU, der kommer i v4.2: reverse proxies.

YARP (Yet Another Reverse Proxy)

YARP er en teknologi, bygget på ASP.NET, der gør det muligt at fungere som proxy for lokale og fjerne webtjenester. Det betyder, at du kan bruge ét endpoint og én port til at vise et andet endpoint eller en anden port. Hvis du for eksempel har én tjeneste, der kører på port 5000, og en anden på port 8080, kan du sende trafik som proxy fra den første tjeneste til den anden via en konfigurerbar sti eller header.

Forestil dig for eksempel en webanmodning til den første tjeneste på følgende sti: http://localhost:5000/myservice/mypath. Med den rette YARP-konfiguration kan du videresende webanmodningen til tjenesten, der kører på 8080, til en sti som http://localhost:8080/mypath. Der er et væld af muligheder i YARP-konfigurationer til at transformere stier og headere, håndhæve godkendelse og samle endpoints i clusters.

YARP er integreret i PowerShell Universal v4.2 og begynder at blive udgivet i nightly builds i aften. Du kan også se den aktuelle dokumentation til YARP-pluginnet.

code-server

code-server er en open source-forgrening af VS Code, der kører i browseren, fra Coder. Forgreningen af VS Code er tværplatform og kører som en tjeneste med talrige konfigurationsmuligheder, fra porte til godkendelse. Den understøtter endda udvidelser.

Konfigurer code-server med PowerShell Universal

En nyttig udrulning af code-server er at bruge den som editor til dine konfigurationsfiler i PowerShell Universal. Typisk skal du, for at redigere filer eksternt, enten gøre det via Universal-administrationskonsollen eller med Universal-udvidelsen til VS Code. Begge muligheder har begrænsninger, så det er ret praktisk at have en fuld instans af VS Code, der kan tilgås eksternt.

Installer code-server

Først installerer og konfigurerer vi code-server. Det bør gøres på PSU-instansen, så den kan tilgås eksternt. Vi eksponerer den ikke faktisk eksternt, men bruger i stedet den nye reverse proxy i PSU, så vi kan håndhæve godkendelse og autorisation.

Fordi installationen af code-server ikke understøtter Windows direkte, bruger vi Docker.

Hent først Docker-imaget.

docker pull codercom/code-server:latest

Derefter kan du starte Docker-imaget og mappe repositoriemappen ind i containeren. Det giver adgang til PSU-konfigurationsfilerne.

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

Inde i Docker-containeren kan du slå godkendelse fra i filen /home/coder/.config/code-server/config.yaml. Vi bruger i stedet godkendelse fra PSU.

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

Når det er gjort, skal du genstarte containeren. Du bør kunne se din code-server ved at gå til http://localhost:8080 i browseren.

Konfiguration af reverse proxy i PSU

Dernæst skal vi konfigurere reverse proxyen i PSU. Det gøres i øjeblikket i filen appsettings.json. Du kan redigere filen i %ProgramData%\PowerShellUniversal.

Følgende konfiguration eksponerer code-server via stien /code på PSU-serveren. Bemærk, at jeg medtager AdministratorRolePolicy for at sikre, at kun administratorer kan tilgå stien.

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

Når det er gjort, starter du PowerShell Universal. Log ind ved at gå til http://localhost:5000/login. Gå til sidst til http://localhost:5000/code. Du ser VS Code køre i browseren, og repositoriemappen er tilgængelig. Herfra kan du installere udvidelser (for eksempel PowerShell) og begynde at administrere din PSU-instans.

code-server i browseren, der viser PowerShell Universal-repositoriet på localhost:5000/code.
VS Code i browseren via reverse proxyen i PowerShell Universal

Forbehold og et blik fremad

YARP-integrationen i PSU får langt bredere anvendelser end at hoste VS Code. Du kan videresende til alle slags API’er og håndhæve den samme godkendelse og autorisation i PSU, som du bruger til selve PSU. Vi undersøger stadig, hvordan funktionaliteten bedst eksponeres i PSU, så den kan ændre sig før udgivelsen.

Det er stadig et nightly build, og vi understøtter ikke funktionaliteten endnu. Du skal også være sikker på, at du forstår din code-server-implementering, så du ikke eksponerer en åben VS Code-instans for brugere uden godkendelse. Der kan oprettes terminaler, som giver fjernbrugere fuld kontrol over din PSU-server. Coder tilbyder et komplet teambaseret værktøj (Coder Enterprise) med flere funktioner, der er bedre egnet til den slags.

Skriv endelig med feedback eller spørgsmål i forummet.

Klar til at bygge? Download PowerShell Universal.