Używanie mostka do platformy Kubernetes (VS Code)
Notatka
Most do Kubernetes zostanie wycofany 30 kwietnia 2025 r. Aby uzyskać szczegółowe informacje o wycofaniu i alternatywach typu open-source, zobacz GitHub issue .
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.
Przed rozpoczęciem
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ć narzędzia Bridge to Kubernetes z istniejącą przykładową aplikacją, zobacz Use Bridge to Kubernetes with a sample. Jeśli używasz usługi Azure Kubernetes i chcesz użyć bardziej złożonej przykładowej aplikacji, zobacz Bridge to Kubernetes (AKS).
Warunki wstępne
- Klaster Kubernetes z aplikacją, którą chcesz debugować.
- Visual Studio Code działający na macOS, Windows 10 lub nowszym, lub systemie Linux.
Nawiązywanie połączenia z klastrem i debugowanie 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 Install and use local tunnel debuging (Instalowanie i używanie lokalnego debugowania tunelu). Jeśli masz już zainstalowany program Bridge to Kubernetes, wykonaj następujące czynności:
Na komputerze dewelopera upewnij się, że bieżący kontekst jest ustawiony na klaster i przestrzeń nazw, w której działa aplikacja.
Otwórz obszar roboczy aplikacji, którą chcesz debugować w programie Visual Studio Code. W widoku rozszerzenia Kubernetes w obszarze Klastryupewnij 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: Skonfiguruj, aby rozpocząć proces konfiguracji.
Wybierz usługę Kubernetes, którą chcesz przekierować do wersji lokalnej.
Cały ruch w klastrze Kubernetes jest przekierowywany dla twojej usługi do wersji twojej aplikacji uruchomionej na twoim komputerze deweloperskim. Mostek do platformy Kubernetes kieruje również cały ruch wychodzący z aplikacji z powrotem do klastra Kubernetes.
Ważny
Można przekierowywać tylko usługi, które mają jeden pod.
Po wybraniu usługi pomiń następną sekcję i kontynuuj, wykonując kroki opisane w Konfigurowanie debugera na potrzeby debugowania tunelu lokalnego za pomocą narzędzia Bridge to Kubernetes.
Instalowanie i używanie debugowania tunelu lokalnego
Wykonaj następujące kroki, aby rozpocząć korzystanie z debugowania tunelu lokalnego, w przypadku posiadania zainstalowanego rozszerzenia open-source Kubernetes i klastra Kubernetes z usługami, które chcesz debugować. Kroki opisane w tej sekcji poprowadzą cię przez instalację Bridge to Kubernetes i rozpoczęcie konfiguracji do lokalnego debugowania tunelu.
Notatka
Rozszerzenie Kubernetes do VS Code udostępnia punkt wejścia interfejsu API, który umożliwia autorom rozszerzeń współtworzenie innych lokalnych rozwiązań tunelu z Marketplace programu VS Code. Bridge to 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: Debuguj (tunel lokalny).
Możesz też przejść do eksploratora klastra Kubernetes. Otwórz zasoby aktywnego klastra i znajdź usługę lub pod, który chcesz debugować, a następnie kliknij prawym przyciskiem myszy usługę i wybierz pozycję Debugowanie: 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.
Po zainstalowaniu rozszerzenia Bridge to Kubernetes następnym razem wybierzesz Debuguj: lokalny tunel, pominiesz krok instalacji i przejdziesz bezpośrednio do następnego kroku, Skonfigurować debuger na potrzeby lokalnego debugowania tunelu 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:
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.
Masz możliwość uruchamiania w trybie izolowanym lub w trybie nieizolowanym. Gdy działasz w trybie izolowanym, tylko twoje żądania są kierowane do lokalnego procesu; inni deweloperzy mogą używać klastra bez wpływu na nich. Jeśli nie uruchomisz izolowanego, cały ruch zostanie przekierowany do procesu lokalnego. Aby uzyskać więcej informacji na temat tej opcji, zobacz Wykorzystanie możliwości routingu do tworzenia w izolacji.
Wybierz ikonę Debuguj po lewej stronie i wybierz nowo dodaną konfigurację uruchamiania platformy Kubernetes, na przykład Launch via NPM with Kubernetes( u góry). Ta konfiguracja uruchamiania jest tworzona przez rozwiązanie Bridge to Kubernetes, jeśli wybierzesz tę opcję.
Notatka
Zostanie wyświetlony monit o zezwolenie na uruchomienie EndpointManager z podwyższonymi uprawnieniami i zmodyfikowanie pliku hosts.
Twój komputer deweloperski jest połączony, gdy pasek stanu programu VS Code zmieni kolor na pomarańczowy, a rozszerzenie Kubernetes pokazuje, że jesteś połączony.
Debugowanie
Po nawiązaniu połączenia komputera programistycznego, ruch jest przekierowywany do komputera dewelopera dla usługi, którą zastępujesz.
Notatka
Podczas kolejnych uruchomień nie zostanie wyświetlony monit o podanie nazwy usługi, portu, zadania uruchamiania ani o to, czy ma być uruchomiony w izolacji. Te wartości są zapisywane w .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 do platformy Kubernetes: Skonfiguruj. Możesz otworzyć .vscode/launch.json i .vscode/tasks.json, aby zobaczyć określone ustawienia konfiguracji, które program Bridge to Kubernetes dodaje do profilu uruchamiania.
Jeśli klaster używa gRPC C core, a implementacja gRPC korzysta z c-ares, to zmienna środowiskowa GRPC_DNS_RESOLVER z wartością native
zostanie dodana do twojego profilu uruchamiania. 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, zapoznaj się z tym problemem gRPC.
Ustawianie punktu przerwania
Ustaw punkt przerwania przy użyciu 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 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 w kodzie lokalnie, to czy są one widoczne dla innych użytkowników korzystających z klastra, zależy od tego, czy pracujesz w trybie izolacji, czy nie. Jeśli działasz w izolacji, możesz wprowadzić zmiany, które nie mają wpływu na innych użytkowników.
Edytuj kod, zapisz zmiany i naciśnij 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 debugowanie lub naciśnij Shift+F5, aby zatrzymać debuger.
Notatka
Domyślnie zatrzymanie zadania debugowania również rozłącza komputer deweloperów z klastra Kubernetes. Możesz zmienić to zachowanie, wyszukując Bridge to Kubernetes: Rozłącz po debugowaniu w ustawieniach programu Visual Studio Code i usuwając zaznaczenie obok opcji 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ć KubernetesLocalProcessConfig.yaml
, aby pobrać te pliki na komputer dewelopera. Aby uzyskać więcej informacji, zobacz Configure Bridge to Kubernetes.
Jeśli używasz klastra usługi AKS korzystającego z tożsamości zarządzanej, funkcji zabezpieczeń udostępnionej przez Microsoft Entra ID, zobacz Use managed identity with Bridge to Kubernetes, aby uzyskać informacje o tym, jak skonfigurować Bridge to Kubernetes dla tego scenariusza.
Korzystanie z rejestrowania i diagnostyki
Po połączeniu komputera deweloperskiego z klastrem Kubernetes, wynik rejestrowania jest zapisywany w oknie Bridge to Kubernetes.
Kliknij pasek stanu 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 katalogu Bridge to Kubernetes
w katalogu TEMP na Twoim komputerze deweloperskim. W Windows 10 znajduje się to w %TEMP%\Bridge to Kubernetes
. Na komputerze Mac katalog TEMP można znaleźć, uruchamiając 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 poprzez kierowanie żądań do twojej kopii każdej objętej usługi, a inne ruchy są kierowane normalnie. Aby uzyskać dostęp do lokalnego adresu URL punktu końcowego dla izolowanej aplikacji, uruchom debuger w trybie izolacji, otwórz menu Kubernetes-a na pasku stanu i wybierz wpis punktu końcowego. Więcej informacji na temat działania routingu w trybie izolacji można znaleźć na stronie How Bridge to Kubernetes Works.
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);
Notatka
Aby uniknąć wpływu na kod w każdym żądaniu, można utworzyć klasę dziedziczącą z System.Net.Http.DelegatingHandler i zastąpić metodę SendAsync
kodem podobnym do poprzedniego przykładu. Kod używający tej techniki można znaleźć w Internecie; jednym z przykładów jest poprawne propagowanie "kubernetes-route-as" w kontekście 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 coś się wielokrotnie nie udaje, 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 dostęp SSH lub uruchamianie jako użytkownik bez podwyższonych uprawnień, należy zaktualizować kod, aby używać zmiennych środowiskowych usługi Kubernetes, a także skonfigurować program VS Code do ich używania, zgodnie z opisem w temacie Service environment variables.
Następne kroki
Dowiedz się więcej o rozwiązaniu Bridge to Kubernetes w How Bridge to Kubernetes works.
Jeśli konieczne jest równoległe debugowanie wielu usług, zobacz Debugowanie wielu usług jednocześnie.