Usare Bridge per Kubernetes (VS Code)

Bridge to Kubernetes consente di eseguire ed eseguire il debug del codice nel computer di sviluppo rimanendo connessi al cluster Kubernetes con il resto delle applicazioni o dei servizi. In questa guida si apprenderà come usare Bridge to Kubernetes per reindirizzare il traffico tra il cluster Kubernetes e il codice in esecuzione nel computer di sviluppo.

Operazioni preliminari

Questo articolo presuppone che il cluster sia già disponibile con un'architettura di microservizi e si voglia eseguire il debug di uno dei pod nel cluster. Per informazioni su come usare Bridge to Kubernetes con un'applicazione di esempio esistente, vedere Usare Bridge to Kubernetes con un esempio. Se si usa il servizio Azure Kubernetes e si vuole usare un'applicazione di esempio più complessa, vedere Bridge to Kubernetes (AKS).

Prerequisiti

  • Un cluster Kubernetes con un'app di cui si vuole eseguire il debug.
  • Visual Studio Code in esecuzione in macOS, Windows 10 o versione successiva o Linux.

Connessione al cluster ed eseguire il debug di un servizio

Esistono due modi diversi per avviare il processo di debug con Bridge to Kubernetes. Se si inizia dall'estensione Kubernetes open source, senza bridge a Kubernetes installato, passare a Installare e usare il debug del tunnel locale. Se è già installato Bridge to Kubernetes, procedere con la procedura seguente:

  1. Nel computer di sviluppo verificare che il contesto corrente sia impostato sul cluster e sullo spazio dei nomi in cui è in esecuzione l'applicazione.

  2. Aprire l'area di lavoro per l'app di cui si vuole eseguire il debug in Visual Studio Code. Nella visualizzazione dell'estensione Kubernetes in Cluster verificare che il cluster e lo spazio dei nomi siano selezionati. Aprire il riquadro comandi (CTRL+MAIUSC P o CMD+MAIUSC++P in un Mac) ed eseguire il comando Bridge to Kubernetes: Configure per avviare il processo di configurazione.

  3. Scegliere il servizio Kubernetes da reindirizzare alla versione locale.

    Selezionare il servizio a cui connettersi

    Tutto il traffico nel cluster Kubernetes viene reindirizzato per il servizio alla versione dell'applicazione in esecuzione nel computer di sviluppo. Bridge a Kubernetes instrada anche tutto il traffico in uscita dall'applicazione al cluster Kubernetes.

    Importante

    È possibile reindirizzare solo i servizi con un singolo pod.

  4. Dopo aver selezionato il servizio, ignorare la sezione successiva e continuare seguendo i passaggi descritti in Configurare il debugger per il debug del tunnel locale con Bridge to Kubernetes.

Installare e usare il debug del tunnel locale

Seguire questa procedura per iniziare a usare il debug del tunnel locale quando è installata l'estensione Kubernetes open source e si dispone di un cluster Kubernetes con servizi di cui si vuole eseguire il debug. I passaggi descritti in questa sezione illustrano l'installazione di Bridge to Kubernetes e avviano il processo di configurazione per il debug del tunnel locale.

Nota

L'estensione Kubernetes per VS Code fornisce un punto di ingresso API che consente agli autori di estensioni di contribuire ad altre soluzioni di tunnel locale da VS Code Marketplace. Bridge to Kubernetes è una possibile implementazione della funzionalità di debug del tunnel locale.

Esistono due modi per iniziare a usare il debug del tunnel locale in VS Code. Il primo consiste nell'aprire il riquadro comandi (CTRL+MAIUSC+P o CMD+MAIUSC+P in un Mac) e digitare Kubernetes: Debug (Tunnel locale).

Screenshot che mostra il comando Debug (tunnel locale) in VS Code

In alternativa, passare a Esplora cluster Kubernetes. Aprire le risorse del cluster attivo e individuare un servizio o un pod di cui si vuole eseguire il debug, quindi fare clic con il pulsante destro del mouse sul servizio e selezionare Debug: Tunnel locale.

A questo punto, se non è installata alcuna estensione di VS Code che offre funzionalità di debug locali, si verrà reindirizzati al Marketplace per selezionare un'estensione che fornisce il debug locale. Selezionare l'estensione Bridge to Kubernetes .

Screenshot che mostra il menu di scelta rapida Debug tunnel locale in VS Code

Dopo aver installato l'estensione Bridge to Kubernetes, la volta successiva che si sceglie Debug: Tunnel locale, si ignorerà il passaggio di installazione e si procederà direttamente al passaggio successivo, Configurare il debugger per il debug del tunnel locale con Bridge to Kubernetes.

Configurare il debugger per il debug del tunnel locale con Bridge to Kubernetes

Il primo passaggio per configurare il debugger per il debug del tunnel locale è che viene richiesto di immettere la porta TCP usata dall'applicazione per l'esecuzione in locale:

Immettere il numero di porta

Scegliere una configurazione di avvio di debug usata normalmente durante l'esecuzione dell'applicazione in locale. Se non si ha una configurazione di avvio, è possibile consentire a Bridge to Kubernetes di crearne uno o di non crearne uno, nel qual caso è necessario avviare manualmente l'applicazione o il servizio. Per altre informazioni, vedere Configurazioni di avvio.

Scegliere la configurazione di avvio del debugger

È possibile eseguire isolato o non isolato. Se si esegue isolato, solo le richieste vengono instradate al processo locale; altri sviluppatori possono usare il cluster senza essere interessati. Se non si esegue isolato, tutto il traffico viene reindirizzato al processo locale. Per altre informazioni su questa opzione, vedere Uso delle funzionalità di routing per lo sviluppo in isolamento.

Scegliere l'isolamento

Selezionare l'icona Debug a sinistra e selezionare la configurazione di avvio di Kubernetes appena aggiunta, ad esempio Avvia tramite NPM con Kubernetes, nella parte superiore. Questa configurazione di avvio viene creata da Bridge to Kubernetes, se si sceglie tale opzione.

Scegliere il profilo di avvio del debug

Nota

Verrà richiesto di consentire a EndpointManager di eseguire con privilegi elevati e modificare il file hosts.

Il computer di sviluppo è connesso quando la barra di stato di VS Code diventa arancione e l'estensione Kubernetes mostra che si è connessi.

Debug con Bridge in Kubernetes

Una volta connesso il computer di sviluppo, il traffico inizia a reindirizzare al computer di sviluppo per il servizio che si sta sostituendo.

Nota

Nei lanci successivi non verrà richiesto il nome del servizio, la porta, l'attività di avvio o l'esecuzione isolata. Questi valori vengono salvati in .vscode/tasks.json. Per modificare queste impostazioni in un secondo momento, aprire il riquadro comandi (CTRL+MAIUSC+P o CMD+MAIUSC+P in un Mac) ed eseguire il comando Bridge to Kubernetes: Configure (Bridge to Kubernetes: Configure). È possibile aprire .vscode/launch.json e .vscode/tasks.json per visualizzare le impostazioni di configurazione specifiche aggiunte da Bridge a Kubernetes al profilo di avvio.

Se il cluster usa gRPC C core, un'implementazione di gRPC che usa c-ares, viene aggiunta una variabile di ambiente al profilo di avvio, GRPC_DNS_RESOLVER, con il valore native. Questa variabile specifica di usare una soluzione alternativa per evitare un ritardo di 2 minuti durante la connessione. Per altre informazioni, vedere questo problema gRPC.

Impostare un punto di interruzione

Impostare un punto di interruzione con F9 o selezionare Esegui e quindi Attiva/Disattiva punto di interruzione.

Passare all'applicazione di esempio aprendo l'URL pubblico. Quando il codice raggiunge il punto di interruzione, deve essere aperto nel debugger. Per riprendere il servizio, premere CTRL+F5 o selezionare Esegui e quindi Continua. Tornare al browser e verificare che venga visualizzata un'immagine segnaposto per la bicicletta.

Aggiornare l'applicazione

Quando si apportano modifiche al codice in locale, indipendentemente dal fatto che siano visibili o meno ad altri utenti che usano il cluster dipendono dal fatto che si stia eseguendo isolato o meno. Se si esegue isolato, è possibile apportare modifiche che non influiscono sugli altri utenti.

Modificare il codice, salvare le modifiche e premere CTRL+MAIUSC+F5 (⇧⌘F5 in un Mac) oppure selezionare Esegui e quindi Riavvia debug. Dopo la riconnessione, aggiornare il browser e convalidare le modifiche.

Selezionare Esegui e quindi Arresta debug o premere MAIUSC+F5 per arrestare il debugger.

Nota

Per impostazione predefinita, l'arresto dell'attività di debug disconnette anche il computer di sviluppo dal cluster Kubernetes. È possibile modificare questo comportamento cercando Bridge to Kubernetes: Disconnect After Debugging (Disconnetti dopo il debug) nelle impostazioni di Visual Studio Code e rimuovendo il segno di spunta accanto a Disconnetti automaticamente quando si arresta il debug. Dopo l'aggiornamento di questa impostazione, il computer di sviluppo rimarrà connesso quando si arresta e si avvia il debug. Per disconnettere il computer di sviluppo dal cluster, fare clic sull'estensione Bridge to Kubernetes sulla barra di stato e quindi scegliere Disconnetti sessione corrente.

Configurazione aggiuntiva

Il bridge a Kubernetes può gestire il traffico di routing e replicare le variabili di ambiente senza alcuna configurazione aggiuntiva. Se è necessario scaricare tutti i file montati nel contenitore nel cluster Kubernetes, ad esempio un file ConfigMap, è possibile creare un per KubernetesLocalProcessConfig.yaml scaricare tali file nel computer di sviluppo. Per altre informazioni, vedere Configurare Bridge to Kubernetes.

Se si usa un cluster del servizio Azure Kubernetes che usa l'identità gestita, una funzionalità di sicurezza fornita da Microsoft Entra ID, vedere Usare un'identità gestita con Bridge to Kubernetes per informazioni su come configurare Bridge to Kubernetes per questo scenario.

Uso della registrazione e della diagnostica

L'output della registrazione viene scritto nella finestra Bridge in Kubernetes dopo che il computer di sviluppo è connesso al cluster Kubernetes.

Fare clic sulla barra di stato di Kubernetes e scegliere Mostra informazioni di diagnostica della connessione. Questo comando stampa le variabili di ambiente correnti e le voci DNS nell'output di registrazione.

Inoltre, è possibile trovare i log di diagnostica nella Bridge to Kubernetes directory nella directory TEMP del computer di sviluppo. In Windows 10, che si trova in %TEMP%\Bridge to Kubernetes. In un computer Mac la directory TEMP è reperibile eseguendo echo $TMPDIR da una finestra del terminale. In Linux è /tmp/Bridge to Kubernetes.

Esecuzione in modalità di isolamento

Con Bridge to Kubernetes, è anche possibile configurare una versione isolata dei servizi su cui si sta lavorando, ovvero gli altri che usano il cluster non saranno interessati dalle modifiche. Questa modalità di isolamento viene eseguita instradando le richieste alla copia di ogni servizio interessato, ma instradando normalmente tutto l'altro traffico. Per accedere all'URL dell'endpoint locale per l'app isolata, avviare il debugger in modalità di isolamento, aprire il menu Kubernetes sulla barra di stato e scegliere la voce dell'endpoint. Per altre informazioni sul funzionamento del routing in modalità di isolamento, vedere How Bridge to Kubernetes Works (Funzionamento del bridge a Kubernetes).

Propagazione intestazione

Per usare Bridge per Kubernetes nel modo in cui è progettato, è necessario assicurarsi di propagare l'intestazione Bridge a Kubernetes dalle richieste in ingresso a qualsiasi richiesta eseguita dai servizi ad altri servizi nel cluster. Tutte le API di richiesta HTTP, indipendentemente dal linguaggio, forniscono un modo specifico del framework per eseguire questa operazione. Ad esempio, per il codice .NET in C#, è possibile usare codice simile al seguente:

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

Nota

Per evitare di influire sul codice a ogni richiesta, è possibile creare una classe che eredita da System.Net.Http.DelegatingHandler ed eseguire l'override del SendAsync metodo con codice simile all'esempio precedente. È possibile trovare codice usando questa tecnica sul Web; un esempio è La propagazione corretta di "kubernetes-route-as" in Bridge to Kubernetes.

Per Node.js servizi, è possibile usare codice simile al seguente, tratto dall'esempio todo-app nel repository 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();
    });

Comunicazione con altri servizi

Quando si comunica con un altro servizio nello stesso cluster Kubernetes, ad esempio con una richiesta HTTP, in genere si usa il nome del servizio hardcoded nell'URL per la richiesta, ma non funziona in alcuni scenari, ad esempio quando si usa SSH remoto, WSL e Codespaces. Questo articolo descrive come usare le variabili di ambiente del servizio Kubernetes per specificare l'URL di connessione per questi scenari.

Risoluzione dei problemi

Se viene visualizzato questo errore durante l'attivazione dell'estensione Bridge to Kubernetes:

"Impossibile aggiornare le dipendenze: numero massimo di tentativi superati"

Prima di tutto, ripetere l'attivazione usando il pulsante . Se ripetutamente non riesce, vedere https://github.com/microsoft/mindaro/issues/32.

Quando si usa Bridge to Kubernetes in una sessione SSH remota, se EndpointManager ha esito negativo, il problema potrebbe essere che Bridge to Kubernetes non può modificare il file hosts a causa di un problema di autorizzazioni. Per abilitare SSH remoto o l'esecuzione come utente non con privilegi elevati, è necessario aggiornare il codice per usare le variabili di ambiente del servizio Kubernetes e configurare VS Code per usarle, come descritto nell'argomento Variabili di ambiente del servizio.

Passaggi successivi

Altre informazioni sul funzionamento di Bridge to Kubernetes sono disponibili in How Bridge to Kubernetes (Come funziona Bridge to Kubernetes).

Se è necessario eseguire il debug di più servizi contemporaneamente in parallelo, vedere Eseguire il debug di più servizi contemporaneamente.

Le informazioni sulle funzionalità attualmente supportate e una roadmap futura per Bridge to Kubernetes sono disponibili nella roadmap di Bridge to Kubernetes.