Share via


Acquisire informazioni dettagliate sul sistema in tempo reale da un cluster del servizio Azure Kubernetes

Questo articolo illustra il processo di raccolta di informazioni dettagliate sul sistema in tempo reale dal cluster microsoft servizio Azure Kubernetes (servizio Azure Kubernetes) tramite Gadget inspektor. L'articolo contiene istruzioni dettagliate per l'installazione di questo strumento nell'ambiente del servizio Azure Kubernetes. Vengono anche illustrati esempi pratici che illustrano in che modo Inspektor Gadget consente di raccogliere informazioni preziose per eseguire un debug efficace dei problemi reali.

Demo

Per iniziare, prendere in considerazione la demo rapida seguente. Si supponga di dover capire perché le richieste DNS da un'applicazione hanno esito negativo. Usando Inspektor Gadget, è possibile acquisire il traffico DNS nello spazio dei nomi Kubernetes in cui è in esecuzione l'applicazione:

kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE                           K8S.NAMESPACE  K8S.POD  PID      TID      COMM      QR  TYPE      QTYPE  NAME             RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  A      www.example.com.       0          1.2.3.4
aks-agentpool-97833681-vmss000001  my-ns          my-app   1349264  1349264  nslookup  Q   OUTGOING  AAAA   www.example.com.       0          1.2.3.4

Da queste informazioni è possibile notare che le richieste DNS vengono indirizzate al server DNS all'indirizzo 1.2.3.4IP, ma il server non risponde mai.

Si supponga ora che 1.2.3.4 non si tratta della configurazione predefinita del server dei nomi e si sospetta che un processo sospetto stia modificando la configurazione in fase di esecuzione. In questi tipi di casi, Inspektor Gadget va oltre la diagnostica DNS. Consente inoltre di monitorare i processi che accedono a file critici (ad esempio /etc/resolv.conf) e hanno l'intenzione di modificare tali file. Per usare questa funzionalità di monitoraggio, filtrare i flag nell'output per visualizzare una delle modalità di accesso ai file di scrittura (O_WRONLY per aprire solo per la scrittura o O_RDWR per la lettura e la scrittura):

kubectl gadget trace open --namespace my-ns \
    --filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
    --output columns=+flags
K8S.NODE                           K8S.NAMESPACE  K8S.POD  K8S.CONTAINER  PID      COMM  FD  ERR  PATH              FLAGS
aks-agentpool-97833681-vmss000001  my-ns          my-app   my-app         1365052  vi    3   0    /etc/resolv.conf  O_WRONLY|O_CREAT

Che cos'è Inspektor Gadget?

Inspektor Gadget è un framework progettato per la creazione, la creazione di pacchetti, la distribuzione e l'esecuzione di strumenti dedicati al debug e all'ispezione dei sistemi Linux e Kubernetes. Questi strumenti ("gadget") vengono implementati come programmi eBPF . L'obiettivo principale è raccogliere dati del kernel di basso livello per fornire informazioni dettagliate su scenari di sistema specifici. Il framework Gadget di Inspektor gestisce l'associazione dei dati raccolti usando riferimenti di alto livello, ad esempio le risorse Kubernetes. Questa integrazione assicura che esista una connessione senza problemi tra le informazioni dettagliate di basso livello e il contesto di alto livello corrispondente. L'integrazione semplifica il processo di risoluzione dei problemi e la raccolta di informazioni rilevanti.

Gadget

Inspektor Gadget offre un set di strumenti predefiniti progettati per eseguire il debug e osservare le situazioni comuni in un sistema. Ad esempio, usando tali gadget, è possibile tracciare gli eventi seguenti nel cluster:

  • Creazione del processo
  • Accesso ai file
  • Attività di rete, ad esempio connessioni TCP o risoluzione DNS

I gadget presentano le informazioni raccolte usando meccanismi diversi. Ad esempio, alcuni gadget possono informarti sullo stato del sistema in momenti specifici. Altri gadget possono segnalare ogni volta che si verifica un determinato evento oppure possono fornire aggiornamenti periodici.

Questi sono solo alcuni esempi. La documentazione ufficiale fornisce descrizioni dettagliate ed esempi di ogni gadget in modo da poter determinare il gadget più adatto per il proprio caso d'uso specifico. Tuttavia, se si trova un caso d'uso che i gadget esistenti non coprono attualmente, Inspektor Gadget offre flessibilità. È possibile eseguire script compatibili con il linguaggio di traccia bpftrace eBPF eseguendo il comando script. In alternativa, è possibile eseguire programmi eBPF personalizzati eseguendo il comando run. Poiché il framework Gadget di Inspektor gestisce la creazione, la creazione di pacchetti e la distribuzione dei programmi personalizzati, semplifica il processo in base ai requisiti univoci. Raccoglie inoltre metadati di alto livello per arricchire i dati raccolti nel programma.

Situazioni di utilizzo

Per completare la demo presentata all'inizio di questo articolo, è stato compilato un elenco di problemi e scenari pratici che illustrano come Inspektor Gadget consente di affrontare le sfide di debug. Gli esempi seguenti illustrano il potenziale del gadget Inspektor. Ma le funzionalità di questo strumento si estendono oltre questi scenari. In questo modo, Inspektor Gadget è un asset prezioso per esplorare le complessità del debug e dell'osservabilità di Kubernetes.

Area problema Sintomi Risoluzione dei problemi
Applicazioni a elevato utilizzo di dischi Utilizzo elevato della memoria o della CPU o preparazione del nodo incoerente Un'applicazione potrebbe impegnarsi in modo coerente in operazioni di lettura/scrittura su disco, ad esempio una registrazione estesa. Usando Inspektor Gadget, è possibile identificare in tempo reale quali contenitori generano più operazioni di I/O in blocchi. In alternativa, più specificamente, è possibile trovare il contenitore che causa più letture e scritture in un file.
"È sempre DNS" Latenza elevata dell'applicazione, timeout o scarsa esperienza utente finale

Usando Inspektor Gadget, è possibile tracciare tutte le query DNS e le risposte nel cluster. In particolare, Inspektor Gadget fornisce le informazioni seguenti che consentono di determinare se il DNS influisce sulle prestazioni dell'applicazione:

  • Esito positivo delle query
  • Indica se la risposta contiene un errore
  • Server dei nomi usato per la ricerca
  • La latenza query-response
Accesso al file system L'applicazione si comporta in modo errato o non può funzionare correttamente

L'applicazione potrebbe non essere in grado di accedere a configurazioni, log o altri file vitali specifici nel file system. In questi scenari, Inspektor Gadget consente di tracciare tutti i file aperti all'interno dei pod per diagnosticare i problemi di accesso. Ogni volta che l'applicazione tenta di aprire un file, è possibile individuare le informazioni seguenti:

  • Flag usati per aprire il file, ad esempio O_RDONLY, O_WRONLY, O_RDWR e così via.
  • Indica se il tentativo di apertura del file ha esito positivo
  • Errore restituito (se il tentativo di apertura del file ha esito negativo)

Ad esempio, se il tentativo di apertura del file ha esito negativo a causa dell'errore 2 (ENOENT), l'applicazione sta probabilmente provando ad aprire un file che non esiste. Ciò significa che potrebbe essere presente un errore di digitazione nel codice oppure che il file sia disponibile in un percorso diverso.

Esecuzione di codice remoto (RCE) Esecuzione di codice non autorizzata, ad esempio cryptojacking , evidente nell'utilizzo elevato della CPU durante i periodi di inattività dell'applicazione Quando gli utenti malintenzionati tentano di eseguire questo tipo di attacco a un sistema, in genere devono eseguire il codice usando bash. Inspektor Gadget consente di tracciare la creazione di nuovi processi, in particolare i processi che coinvolgono comandi critici, ad bashesempio .

Come installare Inspektor Gadget in un cluster del servizio Azure Kubernetes

One-Click distribuzione del gadget Inspektor

Selezionando il pulsante seguente, verrà creato automaticamente un cluster del servizio Azure Kubernetes e il gadget inspektor verrà distribuito nel cluster. Al termine della distribuzione, è possibile esplorare tutte le funzionalità di Inspektor Gadget nell'ambiente della shell fornito.

Distribuire gadget Inspektor in un cluster del servizio Azure Kubernetes

Installare Inspektor Gadget eseguendo il plug-in "kubectl gadget"

Questa sezione descrive i passaggi per l'installazione del gadget Inspektor nel cluster del servizio Azure Kubernetes eseguendo il kubectl gadget plug-in. L'installazione è costituita da due parti:

  • Installazione del kubectl gadget plug-in nel computer

  • Esecuzione del kubectl gadget plug-in per installare Inspektor Gadget nel cluster

    Avviso

    Sono disponibili molti meccanismi per distribuire e usare gadget Inspektor. Ognuno di questi meccanismi è personalizzato in base a casi d'uso e requisiti specifici. È possibile usare il plug-in del gadget kubectl per applicare diversi di questi meccanismi, ma non tutti. Ad esempio, la distribuzione di Gadget Inspektor tramite il kubectl gadget plug-in dipende dalla disponibilità del server API Kubernetes. Se non è possibile dipendere da un componente di questo tipo perché la disponibilità potrebbe essere talvolta compromessa, è consigliabile evitare di usare il kubectl gadgetmeccanismo di distribuzione. Per altre informazioni su questo e altri casi d'uso, vedere la documentazione di Inspektor Gadget.

Prerequisiti

Parte 1: Installare il gadget plug-in kubectl nel computer

È consigliabile usare krew per installare il kubectl gadget plug-in.

Nota

Per installare una versione specifica o compilarla dall'origine, vedere Installare il gadget kubectl in GitHub.

kubectl krew install gadget

Verificare ora l'installazione eseguendo il version comando :

kubectl gadget version

Il version comando mostra la versione del client (kubectl gadget plug-in), ma indica anche che non è ancora installato nel server (il cluster):

Client version: vX.Y.Z
Server version: not installed

Parte 2: Installare Inspektor Gadget nel cluster

Il comando seguente distribuisce il controller DaemonSet .

Nota

Sono disponibili diverse opzioni per personalizzare la distribuzione, come illustrato nell'elenco seguente:

  • Usare un'immagine del contenitore specifica
  • Eseguire la distribuzione in nodi specifici
  • Distribuire in uno spazio dei nomi personalizzato

Per informazioni su queste opzioni, vedere la sezione Installazione nel cluster della documentazione ufficiale.

kubectl gadget deploy

Verificare l'installazione eseguendo di nuovo il version comando:

kubectl gadget version

Questa volta, il client e il server vengono entrambi visualizzati come installati correttamente:

Client version: vX.Y.Z
Server version: vX.Y.Z

Dichiarazione di non responsabilità sulle informazioni di terze parti

I prodotti di terzi citati in questo articolo sono prodotti da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti

Dichiarazione di non responsabilità di contatti di terze parti

Microsoft fornisce informazioni di contatto di terze parti per aiutarti a trovare ulteriori informazioni su questo argomento. Queste informazioni di contatto sono soggette a modifica senza preavviso. Microsoft non garantisce l'accuratezza delle informazioni di contatto di terze parti.

Contattaci per ricevere assistenza

In caso di domande o bisogno di assistenza, creare una richiesta di supporto tecnico oppure formula una domanda nel Supporto della community di Azure. È possibile anche inviare un feedback sul prodotto al feedback della community di Azure.