Używanie mostka do platformy Kubernetes (VS Code)

Rozwiązanie Bridge to Kubernetes umożliwia uruchamianie i debugowanie kodu na komputerze deweloperskim, a jednocześnie połączenie z klastrem Kubernetes z pozostałą częścią aplikacji lub usług. W tym przewodniku dowiesz się, jak za pomocą rozwiązania Bridge to Kubernetes przekierowywać ruch między klastrem Kubernetes i kodem uruchomionym na komputerze deweloperskim.

Zanim rozpoczniesz

W tym artykule założono, że masz już własny klaster z architekturą mikrousług i chcesz debugować jeden z zasobników w klastrze. Jeśli chcesz dowiedzieć się, jak używać rozwiązania Bridge do platformy Kubernetes z istniejącą przykładową aplikacją, zobacz Używanie mostu do platformy Kubernetes z przykładem. Jeśli używasz usługi Azure Kubernetes i chcesz użyć bardziej złożonej przykładowej aplikacji, zobacz Bridge to Kubernetes (AKS).

Wymagania wstępne

  • Klaster Kubernetes z aplikacją, którą chcesz debugować.
  • Program Visual Studio Code uruchomiony w systemie macOS, Windows 10 lub nowszym lub Linux.

Połączenie do klastra i debugowania usługi

Istnieje kilka różnych sposobów uruchamiania procesu debugowania za pomocą narzędzia Bridge to Kubernetes. Jeśli zaczynasz od rozszerzenia Kubernetes typu open source bez zainstalowanego rozwiązania Bridge to Kubernetes, przejdź do sekcji Instalowanie i używanie lokalnego debugowania tunelu. Jeśli masz już zainstalowany program Bridge to Kubernetes, wykonaj następujące czynności:

  1. Na komputerze dewelopera upewnij się, że bieżący kontekst jest ustawiony na klaster i przestrzeń nazw, w której działa aplikacja.

  2. Otwórz obszar roboczy aplikacji, którą chcesz debugować w programie Visual Studio Code. W widoku rozszerzenia Kubernetes w obszarze Klastry upewnij się, że wybrano klaster i przestrzeń nazw. Otwórz paletę poleceń (CTRL+SHIFT+P lub Cmd+Shift+P na komputerze Mac) i uruchom polecenie Bridge to Kubernetes: Konfiguruj, aby rozpocząć proces konfiguracji.

  3. Wybierz usługę Kubernetes, którą chcesz przekierować do wersji lokalnej.

    Wybierz usługę, z którymi chcesz nawiązać połączenie

    Cały ruch w klastrze Kubernetes jest przekierowywany do usługi do wersji aplikacji uruchomionej na komputerze dewelopera. Mostek do platformy Kubernetes kieruje również cały ruch wychodzący z aplikacji z powrotem do klastra Kubernetes.

    Ważne

    Można przekierowywać tylko usługi, które mają jeden zasobnik.

  4. Po wybraniu usługi pomiń następną sekcję i kontynuuj, wykonując kroki opisane w temacie Konfigurowanie debugera na potrzeby debugowania tunelu lokalnego za pomocą rozwiązania Bridge to Kubernetes.

Instalowanie i używanie debugowania tunelu lokalnego

Wykonaj następujące kroki, aby rozpocząć debugowanie tunelu lokalnego po zainstalowaniu rozszerzenia Kubernetes typu open source i utworzeniu klastra Kubernetes z usługami, które chcesz debugować. Kroki opisane w tej sekcji przejdą przez instalację rozwiązania Bridge to Kubernetes i uruchomienie procesu konfiguracji na potrzeby lokalnego debugowania tunelu.

Uwaga

Rozszerzenie Kubernetes dla programu VS Code udostępnia punkt wejścia interfejsu API, który umożliwia autorom rozszerzeń współtworzenie innych lokalnych rozwiązań tunelu z witryny MARKETPLACE programu VS Code. Mostek do platformy Kubernetes jest jedną z możliwych implementacji funkcji debugowania tunelu lokalnego.

Istnieją dwa sposoby rozpoczęcia korzystania z lokalnego debugowania tunelu w programie VS Code. Pierwszym sposobem jest otwarcie palety poleceń (CTRL+SHIFT+P lub Cmd+Shift+P na komputerze Mac) i wpisz Kubernetes: Debug (tunel lokalny).

Zrzut ekranu przedstawiający polecenie debugowania (tunel lokalny) w programie VS Code

Możesz też przejść do eksploratora klastra Kubernetes. Otwórz zasoby aktywnego klastra i znajdź usługę lub zasobnik, którą chcesz debugować, a następnie kliknij prawym przyciskiem myszy usługę i wybierz pozycję Debuguj: tunel lokalny.

Jeśli na tym etapie nie masz zainstalowanego rozszerzenia programu VS Code, które oferuje możliwości lokalnego debugowania, nastąpi przekierowanie do witryny Marketplace w celu wybrania rozszerzenia, które zapewnia debugowanie lokalne. Wybierz rozszerzenie Bridge to Kubernetes.

Zrzut ekranu przedstawiający menu kontekstowe Debugowanie tunelu lokalnego w programie VS Code

Po zainstalowaniu rozszerzenia Bridge to Kubernetes następnym razem, gdy wybierzesz pozycję Debuguj: tunel lokalny, pominiesz krok instalacji i przejdziesz bezpośrednio do następnego kroku, Skonfiguruj debuger na potrzeby debugowania tunelu lokalnego za pomocą narzędzia Bridge to Kubernetes.

Konfigurowanie debugera na potrzeby lokalnego debugowania tunelu za pomocą rozwiązania Bridge to Kubernetes

Pierwszym krokiem konfigurowania debugera na potrzeby lokalnego debugowania tunelu jest wyświetlenie monitu o wprowadzenie portu TCP używanego przez aplikację do uruchamiania lokalnego:

Wprowadź numer portu

Wybierz konfigurację uruchamiania debugowania, która jest zwykle używana podczas lokalnego uruchamiania aplikacji. Jeśli nie masz konfiguracji uruchamiania, możesz zezwolić na utworzenie aplikacji Bridge to Kubernetes lub nie utworzyć jej, w tym przypadku musisz ręcznie uruchomić aplikację lub usługę. Dowiedz się więcej na stronie Uruchamianie konfiguracji.

Wybieranie konfiguracji uruchamiania debugera

Masz możliwość uruchamiania izolowanego lub nie izolowanego. W przypadku uruchomienia izolowanego żądania są kierowane tylko do procesu lokalnego; inni deweloperzy mogą używać klastra bez wpływu. Jeśli nie uruchomisz izolowanego, cały ruch zostanie przekierowany do procesu lokalnego. Aby uzyskać więcej informacji na temat tej opcji, zobacz Używanie funkcji routingu do opracowywania w izolacji.

Wybierz izolację

Wybierz ikonę Debuguj po lewej stronie i wybierz nowo dodaną konfigurację uruchamiania platformy Kubernetes, na przykład Uruchom za pomocą narzędzia NPM z platformą Kubernetes u góry. Ta konfiguracja uruchamiania jest tworzona przez rozwiązanie Bridge to Kubernetes, jeśli wybierzesz tę opcję.

Wybieranie profilu uruchamiania debugowania

Uwaga

Zostanie wyświetlony monit o zezwolenie programowi EndpointManager na uruchomienie podwyższonego poziomu uprawnień i zmodyfikowanie pliku hostów.

Komputer deweloperów jest połączony, gdy pasek stanu programu VS Code zmieni kolor pomarańczowy, a rozszerzenie Kubernetes pokazuje, że masz połączenie.

Debugowanie za pomocą rozwiązania Bridge to Kubernetes

Po nawiązaniu połączenia komputera programistycznego ruch rozpoczyna przekierowywanie do komputera dewelopera dla usługi, którą zastępujesz.

Uwaga

Podczas kolejnych uruchomień nie zostanie wyświetlony monit o podanie nazwy usługi, portu, zadania uruchamiania ani tego, czy ma zostać uruchomiony izolowany. Te wartości są zapisywane w pliku .vscode/tasks.json. Aby zmienić te ustawienia później, otwórz paletę poleceń (CTRL+SHIFT+P lub Cmd+Shift+P na komputerze Mac) i uruchom polecenie Bridge to Kubernetes: Configure. Możesz otworzyć plik vscode/launch.json i .vscode/tasks.json , aby wyświetlić określone ustawienia konfiguracji, które program Bridge to Kubernetes dodaje do profilu uruchamiania.

Jeśli klaster używa rdzenia GRPC C, implementacja gRPC używająca c-ares, zmienna środowiskowa jest dodawana do profilu uruchamiania, GRPC_DNS_RESOLVER z wartością native. Ta zmienna określa, aby użyć obejścia, aby uniknąć 2-minutowego opóźnienia podczas nawiązywania połączenia. Aby uzyskać więcej informacji, zobacz ten problem z gRPC.

Ustawianie punktu przerwania

Ustaw punkt przerwania za pomocą klawisza F9 lub wybierz pozycję Uruchom, a następnie przełącz punkt przerwania.

Przejdź do przykładowej aplikacji, otwierając publiczny adres URL. Gdy kod osiągnie punkt przerwania, powinien zostać otwarty w debugerze. Aby wznowić działanie usługi, naciśnij klawisze Ctrl+F5 lub wybierz pozycję Uruchom, a następnie kontynuuj. Wróć do przeglądarki i sprawdź, czy zobaczysz obraz zastępczy roweru.

Aktualizowanie aplikacji

Jeśli wprowadzasz zmiany kodu lokalnie, niezależnie od tego, czy są one widoczne dla innych użytkowników korzystających z klastra, zależy od tego, czy jest uruchomiony izolowany, czy nie. Jeśli uruchamiasz izolację, możesz wprowadzić zmiany, które nie mają wpływu na innych użytkowników.

Edytuj kod, zapisz zmiany i naciśnij klawisze Ctrl+Shift+F5 (⇧★F5 na komputerze Mac) lub wybierz pozycję Uruchom, a następnie uruchom ponownie debugowanie. Po ponownym połączeniu odśwież przeglądarkę i zweryfikuj zmiany.

Wybierz pozycję Uruchom, a następnie zatrzymaj debuger lub naciśnij klawisze Shift+F5, aby zatrzymać debuger.

Uwaga

Domyślnie zatrzymanie zadania debugowania również rozłącza komputer deweloperów z klastra Kubernetes. To zachowanie można zmienić, wyszukując pozycję Bridge to Kubernetes: Rozłącz po debugowaniu w ustawieniach programu Visual Studio Code i usuwając zaznaczenie obok pozycji Rozłącz automatycznie po zatrzymaniu debugowania. Po zaktualizowaniu tego ustawienia komputer deweloperzy pozostanie połączony po zatrzymaniu i rozpoczęciu debugowania. Aby odłączyć komputer deweloperski od klastra, kliknij rozszerzenie Bridge to Kubernetes na pasku stanu, a następnie wybierz pozycję Rozłącz bieżącą sesję.

Dodatkowa konfiguracja

Rozwiązanie Bridge to Kubernetes może obsługiwać routing ruchu i replikowanie zmiennych środowiskowych bez dodatkowej konfiguracji. Jeśli musisz pobrać pliki zainstalowane w kontenerze w klastrze Kubernetes, takie jak plik ConfigMap, możesz utworzyć element , KubernetesLocalProcessConfig.yaml aby pobrać te pliki na komputer deweloperów. Aby uzyskać więcej informacji, zobacz Konfigurowanie mostka na platformie Kubernetes.

Jeśli używasz klastra usługi AKS korzystającego z tożsamości zarządzanej, funkcji zabezpieczeń udostępnionej przez identyfikator entra firmy Microsoft, zobacz Używanie tożsamości zarządzanej z mostkiem na platformie Kubernetes, aby uzyskać informacje o sposobie konfigurowania rozwiązania Bridge to Kubernetes na potrzeby tego scenariusza.

Korzystanie z rejestrowania i diagnostyki

Dane wyjściowe rejestrowania są zapisywane w oknie Bridge to Kubernetes po połączeniu komputera deweloperskiego z klastrem Kubernetes.

Kliknij pasek stanu platformy Kubernetes i wybierz pozycję Pokaż informacje diagnostyczne połączenia. To polecenie wyświetla bieżące zmienne środowiskowe i wpisy DNS w danych wyjściowych rejestrowania.

Ponadto dzienniki diagnostyczne można znaleźć w Bridge to Kubernetes katalogu w katalogu TEMP komputera deweloperskiego. W systemie Windows 10 jest to system %TEMP%\Bridge to Kubernetes. Na komputerze Mac katalog TEMP można znaleźć, uruchamiając polecenie echo $TMPDIR w oknie terminalu. W systemie Linux jest to /tmp/Bridge to Kubernetes.

Uruchamianie w trybie izolacji

Za pomocą rozwiązania Bridge to Kubernetes możesz również skonfigurować izolowana wersję usług, nad którymi pracujesz, co oznacza, że zmiany nie będą miały wpływu na inne osoby korzystające z klastra. Ten tryb izolacji jest osiągany przez kierowanie żądań do kopii każdej usługi, której dotyczy problem, ale zwykle rozsyłanie całego innego ruchu. Aby uzyskać dostęp do lokalnego adresu URL punktu końcowego dla izolowanej aplikacji, uruchom debuger w trybie izolacji, otwórz menu Kubernetes na pasku stanu i wybierz wpis punktu końcowego. Więcej informacji o sposobie działania routingu w trybie izolacji można znaleźć w artykule How Bridge to Kubernetes Works (Jak działa most do rozwiązania Kubernetes).

Propagacja nagłówka

Aby użyć rozwiązania Bridge to Kubernetes w sposób, w jaki został zaprojektowany, należy rozpropagować nagłówek Bridge to Kubernetes z żądań przychodzących do wszystkich żądań wysyłanych przez usługi do innych usług w klastrze. Wszystkie interfejsy API żądań HTTP, niezależnie od języka, zapewniają pewien specyficzny dla platformy sposób, aby to zrobić. Na przykład w przypadku kodu platformy .NET w języku C#można użyć kodu podobnego do następującego:

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);

Uwaga

Aby uniknąć wpływu na kod w każdym żądaniu, można utworzyć klasę dziedziczącą z programu System.Net.Http.DelegatingHandler i zastąpić SendAsync metodę kodem podobnym do poprzedniego przykładu. Kod można znaleźć przy użyciu tej techniki w Internecie; jednym z przykładów jest prawidłowa propagacja "kubernetes-route-as" w rozwiązaniu Bridge to Kubernetes.

W przypadku usług Node.js można użyć kodu podobnego do poniższego, pobranego z przykładu todo-app w repozytorium Bridge to Kubernetes:

    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();
    });

Komunikacja z innymi usługami

Gdy komunikujesz się z inną usługą w tym samym klastrze Kubernetes, na przykład przy użyciu żądania HTTP, zazwyczaj używasz zakodowanej na stałe nazwy usługi w adresie URL żądania, ale nie będzie to działać w niektórych scenariuszach, takich jak w przypadku korzystania z zdalnych protokołów SSH, WSL i Codespaces. W tym artykule opisano sposób używania zmiennych środowiskowych usługi Kubernetes w celu określenia adresu URL połączenia dla tych scenariuszy.

Rozwiązywanie problemów

Jeśli wystąpi ten błąd podczas aktywowania rozszerzenia Bridge to Kubernetes:

"Nie można zaktualizować zależności: przekroczono maksymalną liczbę ponownych prób"

Najpierw ponów próbę aktywacji przy użyciu przycisku . Jeśli wielokrotnie nie powiedzie się, zobacz https://github.com/microsoft/mindaro/issues/32.

Jeśli używasz rozwiązania Bridge to Kubernetes w zdalnej sesji SSH, jeśli program EndpointManager ulegnie awarii, problem może być taki, że rozwiązanie Bridge to Kubernetes nie może zmodyfikować pliku hostów z powodu problemu z uprawnieniami. Aby włączyć zdalny protokół SSH lub uruchomiony jako użytkownik niebędący podwyższonym poziomem uprawnień, należy zaktualizować kod, aby używać zmiennych środowiskowych usługi Kubernetes i skonfigurować program VS Code do ich używania, zgodnie z opisem w temacie Zmienne środowiskowe usługi.

Następne kroki

Dowiedz się więcej o rozwiązaniu Bridge to Kubernetes na stronie How Bridge to Kubernetes works (Jak działa most na platformie Kubernetes).

Jeśli musisz jednocześnie debugować wiele usług, zobacz Debugowanie wielu usług jednocześnie.

Informacje na temat aktualnie obsługiwanych funkcji i przyszłego planu działania dotyczącego rozwiązania Bridge to Kubernetes można znaleźć w artykule Bridge to Kubernetes roadmap (Harmonogram działania bridge to Kubernetes).