Použití mostu na Kubernetes (VS Code)

Přemostit na Kubernetes umožňuje spouštět a ladit kód na vývojovém počítači, zatímco stále je připojený ke clusteru Kubernetes se zbytkem vaší aplikace nebo služeb. V této příručce se dozvíte, jak pomocí přemostit do Kubernetes přesměrovat provoz mezi clusterem Kubernetes a kódem spuštěným na vývojovém počítači.

Než začnete

Tento článek předpokládá, že už máte vlastní cluster s architekturou mikroslužeb a chcete ladit jeden z podů v clusteru. Pokud se chcete naučit používat Bridge to Kubernetes s existující ukázkovou aplikací, přečtěte si téma Použití mostu na Kubernetes s ukázkou. Pokud používáte službu Azure Kubernetes a chcete použít složitější ukázkovou aplikaci, přečtěte si téma Přemístit na Kubernetes (AKS).

Požadavky

  • Cluster Kubernetes s aplikací, kterou chcete ladit.
  • Visual Studio Code běžící na macOS, Windows 10 nebo novějším nebo Linuxu

Připojení ke clusteru a ladění služby

Existuje několik různých způsobů spuštění procesu ladění pomocí bridge to Kubernetes. Pokud začínáte z opensourcového rozšíření Kubernetes bez nainstalovaného přemístit na Kubernetes, přejděte do části Instalace a použití ladění místního tunelu. Pokud už máte most na Kubernetes nainstalovaný, pokračujte následujícími kroky:

  1. Na vývojovém počítači se ujistěte, že je váš aktuální kontext nastavený na cluster a obor názvů, ve kterém je vaše aplikace spuštěná.

  2. Otevřete pracovní prostor aplikace, kterou chcete ladit v editoru Visual Studio Code. V zobrazení rozšíření Kubernetes v části Clustery se ujistěte, že je vybraný váš cluster a obor názvů. Otevřete paletu příkazů (CTRL+SHIFT+P nebo Cmd+Shift+P na Macu) a spusťte příkazOvý most na Kubernetes: Nakonfigurujte spuštění procesu konfigurace.

  3. Zvolte službu Kubernetes, kterou chcete přesměrovat na místní verzi.

    Vyberte službu, ke které se chcete připojit.

    Veškerý provoz v clusteru Kubernetes se přesměruje pro vaši službu na verzi vaší aplikace spuštěné ve vývojovém počítači. Přemostění na Kubernetes také směruje veškerý odchozí provoz z aplikace zpět do clusteru Kubernetes.

    Důležité

    Služby, které mají jeden pod, můžete přesměrovat pouze.

  4. Jakmile vyberete službu, přeskočte další část a pokračujte podle kroků v části Konfigurace ladicího programu pro ladění místního tunelu pomocí mostu na Kubernetes.

Instalace a použití ladění místního tunelu

Pokud máte nainstalované opensourcové rozšíření Kubernetes a máte cluster Kubernetes se službami, které chcete ladit, začněte pomocí těchto kroků používat ladění místního tunelu. Kroky v této části vás provedou instalací Bridge to Kubernetes a spustí proces konfigurace pro ladění místního tunelu.

Poznámka:

Rozšíření Kubernetes pro VS Code poskytuje vstupní bod rozhraní API, který autorům rozšíření umožňuje přispívat dalšími řešeními místního tunelu z marketplace VS Code. Přemostění na Kubernetes je jednou z možných implementací funkce Ladění místního tunelu.

V nástroji VS Code můžete začít používat ladění místního tunelu dvěma způsoby. Prvním způsobem je otevřít paletu příkazů (CTRL+SHIFT+P nebo Cmd+Shift+P na Macu) a zadat Kubernetes: Debug (místní tunel).

Snímek obrazovky s příkazem Debug (Local Tunnel) v editoru VS Code

Případně přejděte do Průzkumníka clusteru Kubernetes. Otevřete prostředky aktivního clusteru a vyhledejte službu nebo pod, který chcete ladit, a potom klikněte pravým tlačítkem na službu a vyberte Ladit: Místní tunel.

Pokud v tomto okamžiku nemáte nainstalované žádné rozšíření VS Code, které nabízí možnosti místního ladění, budete přesměrováni na Marketplace a vybrat rozšíření, které poskytuje místní ladění. Vyberte rozšíření Bridge to Kubernetes.

Snímek obrazovky s místní nabídkou ladění místního tunelu ve VS Code

Až se rozšíření Bridge to Kubernetes nainstaluje, příště zvolíte Ladění: Místní tunel, přeskočíte krok instalace a přejdete přímo k dalšímu kroku a nakonfigurujete ladicí program pro ladění místního tunelu pomocí bridge to Kubernetes.

Konfigurace ladicího programu pro ladění místního tunelu pomocí bridge to Kubernetes

Prvním krokem při konfiguraci ladicího programu pro ladění místního tunelu je, že se zobrazí výzva k zadání portu TCP, který vaše aplikace používá ke spuštění místně:

Zadejte číslo portu.

Zvolte konfiguraci spuštění ladění, kterou obvykle používáte při místním spuštění aplikace. Pokud nemáte konfiguraci spuštění, můžete ji buď nechat přemostěním na Kubernetes vytvořit, nebo ji nevytvoříte, v takovém případě budete muset aplikaci nebo službu spustit ručně. Další informace najdete v části Spouštěcí konfigurace.

Volba konfigurace spuštění ladicího programu

Máte možnost spustit izolovanou nebo neizolovanou. Pokud spustíte izolovanou službu, směrují se do místního procesu pouze vaše požadavky; ostatní vývojáři můžou cluster používat bez ovlivnění. Pokud nespustíte izolovaný provoz, veškerý provoz se přesměruje do místního procesu. Další informace o této možnosti naleznete v tématu Použití možností směrování pro vývoj v izolaci.

Volba izolace

Na levé straně vyberte ikonu Ladění a nahoře vyberte nově přidanou konfiguraci spuštění Kubernetes, jako je spuštění přes NPM s Kubernetes. Pokud zvolíte tuto možnost, vytvoří se tato konfigurace spuštění přes Bridge do Kubernetes.

Volba profilu spuštění ladění

Poznámka:

Zobrazí se výzva, abyste koncovému správci povolili spuštění souboru hostitelů se zvýšenými oprávněními a úpravě souboru hostitelů.

Váš vývojový počítač je připojený, když stavový řádek VS Code změní oranžovou barvu a rozšíření Kubernetes ukazuje, že jste připojení.

Ladění s využitím mostu na Kubernetes

Po připojení vývojového počítače se provoz začne přesměrováovat do vývojového počítače pro službu, kterou nahrazujete.

Poznámka:

Při dalších spuštěních se nezobrazí výzva k zadání názvu služby, portu, spouštěcí úlohy nebo jestli se má spustit izolovaně. Tyto hodnoty jsou uloženy v .vscode/tasks.json. Pokud chcete tato nastavení později změnit, otevřete paletu příkazů (CTRL+SHIFT+P nebo Cmd+Shift+P na Macu) a spusťte příkazOvý most na Kubernetes: Konfigurovat. Můžete otevřít .vscode/launch.json a .vscode/tasks.json a zobrazit konkrétní nastavení konfigurace, která Bridge to Kubernetes přidá do vašeho spouštěcího profilu.

Pokud váš cluster používá gRPC C core, implementace gRPC, která používá c-ares, přidá se do spouštěcího profilu proměnná prostředí GRPC_DNS_RESOLVER s hodnotou native. Tato proměnná určuje použití alternativního řešení, které zabrání 2minutové prodlevě při připojování. Další informace najdete v tomto problému gRPC.

Nastavení zarážky

Nastavte zarážku pomocí klávesy F9 nebo vyberte Spustit a potom přepnout zarážku.

Otevřete veřejnou adresu URL a přejděte do ukázkové aplikace. Když váš kód dosáhne zarážky, měl by se otevřít v ladicím programu. Pokud chcete službu obnovit, stiskněte Ctrl+F5 nebo vyberte Spustit a pak pokračovat. Vraťte se do prohlížeče a ověřte, že se zobrazí zástupný obrázek kola.

Aktualizace aplikace

Když provedete změny kódu místně, jestli jsou viditelné ostatním uživatelům, kteří cluster používají, závisí na tom, jestli používáte izolovaný nebo ne. Pokud používáte izolovanou aplikaci, můžete provádět změny, které nemají vliv na ostatní uživatele.

Upravte kód, uložte změny a stiskněte kombinaci kláves Ctrl+Shift+F5 (⇧⌘F5 na Macu) nebo vyberte Spustit a Restartovat ladění. Po opětovném připojení aktualizujte prohlížeč a ověřte provedené změny.

Vyberte Spustit a zastavit ladění nebo stisknutím kláves Shift+F5 zastavte ladicí program.

Poznámka:

Ve výchozím nastavení zastavení úlohy ladění také odpojí vývojový počítač od clusteru Kubernetes. Toto chování můžete změnit vyhledáním mostu na Kubernetes: Po ladění v nastavení editoru Visual Studio Code a odebráním kontroly vedle možnosti Odpojit automaticky při zastavení ladění. Po aktualizaci tohoto nastavení zůstane váš vývojový počítač po zastavení a spuštění ladění připojený. Pokud chcete odpojit vývojový počítač od clusteru, klikněte na stavovém řádku na rozšíření Přemět na Kubernetes a pak zvolte Odpojit aktuální relaci.

Další konfigurace

Přemísťování na Kubernetes dokáže zpracovat směrování provozu a replikaci proměnných prostředí bez jakékoli další konfigurace. Pokud potřebujete stáhnout všechny soubory připojené ke kontejneru v clusteru Kubernetes, například soubor ConfigMap, můžete vytvořit soubor KubernetesLocalProcessConfig.yaml ke stažení těchto souborů do vývojového počítače. Další informace najdete v tématu Konfigurace mostu na Kubernetes.

Pokud používáte cluster AKS, který používá spravovanou identitu, funkce zabezpečení poskytovaná ID Microsoft Entra, najdete v tématu Použití spravované identity s bridge to Kubernetes , kde najdete informace o tom, jak pro tento scénář nakonfigurovat Bridge to Kubernetes.

Použití protokolování a diagnostiky

Výstup protokolování se zapíše do okna Bridge to Kubernetes po připojení vývojového počítače ke clusteru Kubernetes.

Klikněte na stavový řádek Kubernetes a zvolte Zobrazit informace o diagnostice připojení. Tento příkaz vypíše aktuální proměnné prostředí a položky DNS ve výstupu protokolování.

Diagnostické protokoly navíc najdete v adresáři v Bridge to Kubernetes adresáři TEMP vašeho vývojového počítače. Ve Windows 10 je to .%TEMP%\Bridge to Kubernetes Na Počítači Mac najdete adresář TEMP spuštěním echo $TMPDIR z okna terminálu. V Linuxu je /tmp/Bridge to Kubernetesto .

Spuštění v režimu izolace

Pomocí bridge to Kubernetes můžete také nastavit izolovanou verzi služeb, na kterých pracujete, což znamená, že na vašich změnách nebudou mít vliv ostatní uživatelé, kteří cluster používají. Tento režim izolace se provádí směrováním požadavků na kopii každé ovlivněné služby, ale směrováním všech ostatních přenosů normálně. Pokud chcete získat přístup k adrese URL místního koncového bodu izolované aplikace, spusťte ladicí program v režimu izolace, otevřete nabídku Kubernetes na stavovém řádku a zvolte položku koncového bodu. Další informace o tom, jak funguje směrování v režimu izolace, najdete v tématu Jak funguje bridge to Kubernetes.

Šíření hlaviček

Pokud chcete použít bridge na Kubernetes tak, jak je navržený, je potřeba zajistit, abyste rozšířili hlavičku Most do Kubernetes z příchozích požadavků na všechny požadavky, které vaše služby v clusteru provádějí. Všechna rozhraní API požadavků HTTP bez ohledu na jazyk poskytují určitý způsob, jak to provést. Například pro kód .NET v jazyce C# můžete použít kód podobný následujícímu:

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

Poznámka:

Chcete-li zabránit ovlivnění kódu při každém požadavku, můžete vytvořit třídu, která dědí z System.Net.Http.DelegatingHandler a přepsat metodu SendAsync s kódem podobným předchozímu příkladu. Kód pomocí této techniky najdete na webu; Jedním z příkladů je správné šíření kubernetes-route-as v bridge do Kubernetes.

Pro Node.js služby můžete použít kód podobný následujícímu kódu, který pochází z ukázky aplikace todo v úložišti Bridge do úložiště 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();
    });

Komunikace s dalšími službami

Když komunikujete s jinou službou ve stejném clusteru Kubernetes, například s požadavkem HTTP, obvykle pro požadavek použijete pevně zakódovaný název služby, ale v některých scénářích, jako je použití vzdáleného SSH, WSL a Codespaces, to nebude fungovat. Tento článek popisuje, jak pomocí proměnných prostředí služby Kubernetes určit adresu URL připojení pro tyto scénáře.

Řešení problému

Pokud se při aktivaci rozšíření Bridge to Kubernetes zobrazí tato chyba:

Nepodařilo se aktualizovat závislosti: byl překročen maximální počet opakování.

Nejprve zkuste aktivaci zopakovat pomocí tlačítka. Pokud se opakovaně neuskutečně neprovádí, přečtěte si téma https://github.com/microsoft/mindaro/issues/32.

Pokud ve vzdálené relaci SSH používáte přeměk na Kubernetes, může se jednat o problém typu Bridge to Kubernetes, který nemůže upravit soubor hostitelů kvůli problému s oprávněními. Pokud chcete povolit vzdálený SSH nebo spustit jako uživatele se zvýšenými oprávněními, měli byste kód aktualizovat tak, aby používal proměnné prostředí Služby Kubernetes, a nakonfigurovat VS Code, aby je používal, jak je popsáno v tématu proměnných prostředí služby.

Další kroky

Přečtěte si další informace o bridge to Kubernetes na webu How Bridge to Kubernetes.

Pokud potřebujete současně ladit více služeb současně, přečtěte si téma Ladění více služeb najednou.

Informace o aktuálně podporovaných funkcích a budoucím plánu přechodu na Kubernetes najdete v plánu Bridge to Kubernetes.