Freigeben über


Verwenden von Bridge to Kubernetes (VS Code)

Bridge to Kubernetes ermöglicht Ihnen das Ausführen und Debuggen von Code auf Ihrem Entwicklungscomputer, während der Kubernetes-Cluster weiterhin mit den restlichen Anwendungen oder Diensten verbunden ist. In dieser Anleitung erfahren Sie, wie Sie Datenverkehr zwischen Ihrem Kubernetes-Cluster und dem auf dem Entwicklungscomputer ausgeführten Code mit Bridge to Kubernetes umleiten.

Voraussetzungen

In diesem Artikel wird davon ausgegangen, dass Sie bereits über einen eigenen Cluster mit einer Microservicearchitektur verfügen und einen der Pods in Ihrem Cluster debuggen möchten. Informationen zur Verwendung von Bridge to Kubernetes mit einer vorhandenen Beispielanwendung finden Sie unter Verwenden von Bridge to Kubernetes mit einem Beispiel. Wenn Sie den Azure Kubernetes-Dienst verwenden und eine komplexere Beispielanwendung verwenden möchten, finden Sie weitere Informationen unter Bridge to Kubernetes (AKS).

Voraussetzungen

  • Ein Kubernetes-Cluster mit einer App, die Sie debuggen möchten.
  • Visual Studio Code unter macOS, Windows 10 oder höher oder Linux.

Herstellen einer Clusterverbindung und Debuggen eines Diensts

Es gibt verschiedene Möglichkeiten, den Debugging-Prozess mit Bridge to Kubernetes zu starten. Wenn Sie mit der Open Source-Kubernetes-Erweiterung beginnen, ohne Bridge to Kubernetes installiert zu haben, wechseln Sie zu Installieren und Verwenden des lokalen Tunneldebuggens. Wenn Sie bereits Bridge to Kubernetes installiert haben, fahren Sie mit den folgenden Schritten fort:

  1. Stellen Sie auf Ihrem Entwicklungscomputer sicher, dass der aktuelle Kontext auf den Cluster und Namespace festgelegt ist, in dem die Anwendung ausgeführt wird.

  2. Öffnen Sie den Arbeitsbereich für die App, die Sie in Visual Studio Code debuggen möchten. Stellen Sie in der Kubernetes-Erweiterungsansicht unter Clustersicher, dass Ihr Cluster und Namespace ausgewählt sind. Öffnen Sie die Befehlspalette (STRG+UMSCHALT+P oder CMD+UMSCHALT+P auf einem Mac) und führen Sie den Befehl Bridge to Kubernetes: Konfigurieren aus, um den Konfigurationsprozess zu starten.

  3. Wählen Sie den Kubernetes-Dienst aus, den Sie an Ihre lokale Version umleiten möchten.

    Wählen Sie den Dienst aus, mit dem eine Verbindung hergestellt werden soll

    Der gesamte Datenverkehr im Kubernetes-Cluster wird für Ihren Dienst an die Version Ihrer Anwendung umgeleitet, die auf dem Entwicklungscomputer ausgeführt wird. Bridge to Kubernetes leitet zudem den gesamten ausgehenden Datenverkehr der Anwendung zurück an den Kubernetes-Cluster.

    Wichtig

    Sie können nur Dienste umleiten, die über einen einzelnen Pod verfügen.

  4. Nachdem Sie Ihren Dienst ausgewählt haben, überspringen Sie den nächsten Abschnitt, und fahren Sie mit den Schritten unter Konfigurieren des Debuggers für lokales Tunneldebuggen mit Bridge to Kubernetes fort.

Installieren und Verwenden des Debuggens lokaler Tunnel

Führen Sie diese Schritte aus, um mit dem Debuggen lokaler Tunnel zu beginnen, wenn Sie die Open-Source-Kubernetes-Erweiterung installiert haben und einen Kubernetes-Cluster mit Diensten haben, die Sie debuggen möchten. Die Schritte in diesem Abschnitt führen Sie durch die Installation von Bridge to Kubernetes und starten den Konfigurationsprozess für das Debuggen lokaler Tunnel.

Hinweis

Die Kubernetes-Erweiterung für VS Code bietet einen API-Einstiegspunkt, mit dem Erweiterungsautoren andere lokale Tunnellösungen aus dem VS Code Marketplace beitragen können. Bridge to Kubernetes ist eine mögliche Implementierung der Funktion Lokales Tunnel Debuggen.

Es gibt zwei Möglichkeiten, mit der Verwendung des lokalen Tunneldebuggens in VS Code zu beginnen. Die erste Möglichkeit ist das Öffnen der Befehlspalette (STRG+UMSCHALT+P oder CMD+-UMSCHALT+P auf einem Mac) gefolgt von der Eingabe vonKubernetes: Debuggen (Lokaler Tunnel) .

Ein Screenshot, der den Befehl „Debuggen (Lokaler Tunnel) in VS Code zeigt

Navigieren Sie alternativ zum Kubernetes-Cluster-Explorer. Öffnen Sie die Ressourcen des aktiven Clusters, suchen Sie einen Dienst oder Pod, den Sie debuggen möchten. Klicken Sie dann mit der rechten Maustaste auf den Dienst, und wählen Sie Debuggen: Lokaler Tunnel aus.

Wenn an diesem Punkt keine VS Code-Erweiterung installiert ist, die lokale Debug-Funktionen bietet, werden Sie zum Marketplace umgeleitet, um eine Erweiterung auszuwählen, die lokales Debuggen ermöglicht. Wählen Sie die Bridge to Kubernetes-Erweiterung aus.

Ein Screenshot, der das Kontextmenü „Debuggen Lokaler Tunnel“ in VS Code zeigt

Nachdem die Bridge to Kubernetes Erweiterung installiert wurde, überspringen Sie bei der nächsten Auswahl von Debuggen: Lokaler Tunnel den Installationsschritt und fahren direkt mit dem nächsten Schritt Konfigurieren des Debuggers für das lokale Tunneldebuggen mit Bridge to Kubernetes fort.

Konfigurieren des Debuggers für das Lokale Tunneldebuggen mit Bridge to Kubernetes

Der erste Schritt beim Konfigurieren des Debuggers für das lokale Tunneldebuggen besteht darin, dass Sie aufgefordert werden, den TCP-Port einzugeben, den Ihre Anwendung für die lokale Ausführung verwendet:

Geben Sie die Portnummer ein

Wählen Sie eine Debug-Startkonfiguration aus, die Sie normalerweise verwenden, wenn Sie Ihre Anwendung lokal ausführen. Wenn Sie nicht über eine Startkonfiguration verfügen, können Sie entweder Bridge to Kubernetes eine erstellen lassen oder keine erstellen. In diesem Fall müssen Sie Ihre Anwendung oder Ihren Dienst manuell starten. Weitere Informationen zu den Startkonfigurationen.

Auswählen der Startkonfiguration des Debuggers

Sie haben die Möglichkeit, die Aufgabe isoliert oder nicht isoliert auszuführen. Wenn Sie die Aufgabe isoliert ausführen, werden nur Ihre Anforderungen an Ihren lokalen Prozess weitergeleitet. Andere Entwickler können den Cluster verwenden, ohne davon betroffen zu sein. Wenn Sie die Aufgabe nicht isoliert ausführen, wird der gesamte Datenverkehr an Ihren lokalen Prozess umgeleitet. Weitere Informationen zu dieser Option finden Sie unter Verwenden von Routingfunktionen für die Entwicklung in einer Isolation.

Auswählen der Isolation

Klicken Sie links auf das Symbol Debuggen und wählen Sie oben die neu hinzugefügte Kubernetes-Startkonfiguration aus, z. B. Starten über NPM mit Kubernetes . Diese Startkonfiguration wird von Bridge to Kubernetes erstellt, wenn Sie diese Option auswählen.

Auswählen eines Startprofils zum Debuggen

Hinweis

Sie werden aufgefordert, die Ausführung von EndpointManager mit erhöhten Rechten zuzulassen und zu erlauben, dass Ihre Hostdatei geändert wird.

Ihr Entwicklungscomputer ist verbunden, wenn die VS Code Statusleiste in orange angezeigt wird und die Kubernetes-Erweiterung anzeigt, dass Sie verbunden sind.

Debuggen mit Bridge to Kubernetes

Sobald Ihr Entwicklungscomputer verbunden ist, wird Datenverkehr für den Dienst, den Sie ersetzen, an den Entwicklungscomputer umgeleitet.

Hinweis

Bei nachfolgenden Starts werden Sie nicht zur Eingabe des Dienstnamens, des Ports, der Startaufgabe oder der Angabe, ob isoliert ausführen werden soll, aufgefordert. Diese Werte werden in .vscode/tasks.json gespeichert. Sie können diese Einstellungen später ändern. Dazu öffnen Sie die Befehlspalette (STRG+UMSCHALT+P oder CMD+UMSCHALT+P auf einem Mac) und führen Sie den Befehl Bridge to Kubernetes: Konfigurieren aus. Sie können .vscode/launch.jsauf und .vscode/tasks.jsauf öffnen, um die spezifischen Konfigurationseinstellungen anzuzeigen, die ihrem Startprofil von Bridge to Kubernetes hinzugefügt werden.

Wenn Ihr Cluster gRPC C Core verwendet, eine Implementierung von gRPC, die c-aresverwendet, wird Ihrem Startprofil GRPC_DNS_RESOLVER eine Umgebungsvariable mit dem Wert native hinzugefügt. Diese Variable gibt an, eine Problemumgehung zu verwenden, um eine Verzögerung von 2 Minuten beim Herstellen der Verbindung zu vermeiden. Weitere Informationen finden Sie in gRPC-Problem.

Festlegen eines Haltepunkts

Legen Sie einen Haltepunkt mit F9 fest, oder wählen Sie Ausführen und dann Haltepunkt umschalten aus.

Rufen Sie die öffentliche URL auf, um zur Beispielanwendung zu navigieren. Wenn ihr Code den Breakpoint erreicht, sollte er im Debugger geöffnet werden. Drücken Sie zum Fortsetzen des Diensts STRG+F5 oder wählen Sie Ausführen und dann Weiter aus. Wechseln Sie wieder zum Browser, und überprüfen Sie, ob ein Platzhalterbild für das Fahrrad angezeigt wird.

Aktualisieren Ihrer Anwendung

Wenn Sie Codeänderungen lokal vornehmen, hängt es davon ab, ob sie für andere Benutzer des Clusters sichtbar sind oder nicht, ob Sie isoliert arbeiten oder nicht. Wenn Sie isoliert ausführen, können Sie Änderungen vornehmen, die sich nicht auf andere Benutzer auswirken.

Bearbeiten sie Ihren Code, speichern Sie ihre Änderungen und drücken Sie STRG+UMSCHALT+F5 (⇧⌘F5 auf einem Mac) oder wählen Sie Ausführen und dann Debuggen neu starten aus. Nachdem Sie die Verbindung wiederhergestellt haben, aktualisieren Sie Ihren Browser, und überprüfen Sie Ihre Änderungen.

Wählen SieAusführen und dann Debuggen beenden aus, oder drücken Sie UMSCHALT+F5, um den Debugger zu beenden.

Hinweis

Wenn Sie den Debugtask anhalten, wird standardmäßig auch Ihr Entwicklungscomputer vom Kubernetes-Cluster getrennt. Sie können dieses Verhalten ändern, indem Sie in den Visual Studio Code-Einstellungen nach Bridge to Kubernetes: Trennen nach dem Debuggen suchen und das Häkchen neben Automatisch trennen wenn das Debuggen anhält entfernen. Wenn Sie diese Einstellung geändert haben, bleibt Ihr Entwicklungscomputer verbunden, wenn Sie das Debuggen beenden und starten. Um Ihren Entwicklungscomputer vom Cluster zu trennen, klicken Sie auf der Statusleiste auf die Bridge to Kubernetes Erweiterung und wählen Sie dann die Aktuelle Sitzung trennen aus.

Zusätzliche Konfiguration

Bridge to Kubernetes kann die Weiterleitung des Datenverkehrs und die Replikation von Umgebungsvariablen ohne weitere Konfiguration verarbeiten. Wenn Sie Dateien herunterladen müssen, die in den Container im Kubernetes-Cluster eingebunden sind, z. B. eine ConfigMap-Datei, können Sie eine KubernetesLocalProcessConfig.yaml-Datei erstellen, um diese Dateien auf den Entwicklungscomputer herunterzuladen. Weitere Informationen hierzu finden Sie im Abschnitt zur Konfiguration von Bridge to Kubernetes.

Wenn Sie ein AKS-Cluster verwenden, das eine verwaltete Identität verwendet, eine von Microsoft Entra ID bereitgestellte Sicherheitsfunktion, finden Sie unter Verwenden einer verwalteten Identität mit Bridge to Kubernetes Informationen zum Konfigurieren von Bridge to Kubernetes für dieses Szenario.

Verwenden der Protokollierung und Diagnose

Die Protokollierungsausgabe wird in das Fenster Bridge to Kubernetes geschrieben, nachdem Ihr Entwicklungscomputer mit Ihrem Kubernetes-Cluster verbunden wurde.

Klicken Sie auf die Kubernetes-Statusleiste und wählen Sie Verbindungsdiagnoseinformationen anzeigen. Mit diesem Befehl werden die aktuellen Umgebungsvariablen und DNS-Einträge in der Protokollierungsausgabe ausgegeben.

Darüber hinaus finden Sie die Diagnoseprotokolle auf Ihrem Entwicklungscomputer in dem Bridge to Kubernetes Verzeichnis im Unterverzeichnis „TEMP“. Unter Windows 10 finden Sie es in %TEMP%\Bridge to Kubernetes. Auf einem Mac finden Sie das TEMP-Verzeichnis, indem Sie echo $TMPDIR in einem Terminalfenster ausführen. Unter Linux finden Sie es in /tmp/Bridge to Kubernetes.

Ausführen im Isolationsmodus

Mit Bridge to Kubernetes können Sie auch eine isolierte Version der Dienste einrichten, an denen Sie arbeiten. Das bedeutet, dass andere, die den Cluster verwenden, von Ihren Änderungen nicht betroffen sind. Dieser Isolationsmodus wird erreicht, indem Sie Ihre Anforderungen an Ihre Kopie des jeweiligen betroffenen Diensts weiterleiten, während der gesamte andere Datenverkehr normal weiter verläuft. Um auf die URL des lokalen Endpunkts für die isolierte App zuzugreifen, starten Sie den Debugger im Isolationsmodus, öffnen Sie das Kubernetes-Menü in der Statusleiste, und wählen Sie den Endpunkteintrag aus. Weitere Informationen zur Funktionsweise des Routings im Isolationsmodus finden Sie unter Funktionsweise von Bridge to Kubernetes.

Headerweitergabe

Um Bridge to Kubernetes so zu verwenden, wie es entworfen wurde, müssen Sie sicherstellen, dass Sie den Bridge to Kubernetes-Header von eingehenden Anforderungen an alle Anforderungen verteilen, die Ihre Dienste an andere Dienste im Cluster richten. Alle HTTP-Anforderungs-APIs bieten unabhängig von der Sprache eine Framework spezifische Möglichkeit das zu tun. Für .NET-Code in C# können Sie beispielsweise Code ähnlich dem folgenden verwenden:

var request = new HttpRequestMessage();
request.RequestUri = new Uri("http://mywebapi/api/values/1");
if (this.Request.Headers.ContainsKey("kubernetes-route-as"))
{
    // Propagate the dev space routing header
    request.Headers.Add("kubernetes-route-as", this.Request.Headers["kubernetes-route-as"] as IEnumerable<string>);
}
var response = await client.SendAsync(request);

Hinweis

Um zu vermeiden, dass Code bei jeder Anforderung beeinträchtigt wird, können Sie eine Klasse erstellen, die von dem System.Net.Http.DelegatingHandler erbt, und die SendAsync-Methode mit Code überschreiben, der dem vorherigen Beispiel ähnelt. Sie finden Code mithilfe dieser Technik im Web. Ein Beispiel ist die ordnungsgemäße Verteilung von „kubernetes-route-as“ in Bridge to Kubernetes.

Für Node.js-Dienste können Sie Code ähnlich dem folgenden Beispiel verwenden, der dem Todo-App-Beispiel im Bridge to Kubernetes-Repository entnommen wurde:

    server.get("/api/stats", function (req, res) {
        var options = {
            host: process.env.STATS_API_HOST,
            path: '/stats',
            method: 'GET'
        };
        const val = req.get('kubernetes-route-as');
        if (val) {
            console.log('Forwarding kubernetes-route-as header value - %s', val);
            options.headers = {
                'kubernetes-route-as': val
            }
        }
        var req = http.request(options, function(statResponse) {
            res.setHeader('Content-Type', 'application/json');
            var responseString = '';
            //another chunk of data has been received, so append it to `responseString`
            statResponse.on('data', function (chunk) {
                responseString += chunk;
            });
            statResponse.on('end', function () {
                res.send(responseString);
            });
        });

        req.on('error', function(e) {
            console.log('problem with request: ' + e.message);
          });

          req.end();
    });

Kommunizieren mit anderen Diensten

Wenn Sie mit einem anderen Dienst im gleichen Kubernetes-Cluster kommunizieren, z. B. mit einer HTTP-Anforderung, verwenden Sie in der Regel den hartcodierten Dienstnamen in der URL für die Anforderung. Dies funktioniert jedoch in einigen Szenarien nicht, z. B. bei Verwendung von Remote-SSH, WSL und Codespaces. In diesem Artikel wird beschrieben, wie Sie die Umgebungsvariablen des Kubernetes-Diensts verwenden, um die Verbindungs-URL für diese Szenarien anzugeben.

Problembehandlung

Wenn beim Aktivieren der Bridge to Kubernetes-Erweiterung dieser Fehler auftritt:

„Fehler beim Aktualisieren von Abhängigkeiten: Die maximale Anzahl von Wiederholungen wurde überschritten“

Versuchen Sie zunächst, die Aktivierung mithilfe der Schaltfläche erneut zu starten. Wenn dies wiederholt nicht erfolgreich ist, finden Sie weitere Informationen unter https://github.com/microsoft/mindaro/issues/32.

Wenn Sie Bridge to Kubernetes in einer SSH-Remotesitzung verwenden, kann das Problem bei einem EndpointManager-Fehler darin bestehen, dass Bridge to Kubernetes die Hostdatei aufgrund eines Berechtigungsproblems nicht ändern kann. Um Remote-SSH zu aktivieren oder als Benutzer ohne erhöhte Rechte auszuführen, sollten Sie Ihren Code aktualisieren, um Umgebungsvariablen des Kubernetes-Diensts zu verwenden und VS Code für deren Verwendung konfigurieren, wie im Thema Dienstumgebungsvariablen beschrieben.

Nächste Schritte

Weitere Informationen zu Bridge to Kubernetes finden Sie unter Funktionsweise von Bridge to Kubernetes.

Wenn Sie mehrere Dienste gleichzeitig debuggen müssen, finden Sie weitere Informationen unter Gleichzeitiges Debuggen mehrerer Dienste.

Informationen zu den derzeit unterstützten Features und eine zukünftige Roadmap für Bridge to Kubernetes finden Sie unter Bridge to Kubernetes-Roadmap.