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 (AKS) usando Inspektor Gadget. L'articolo contiene istruzioni dettagliate per l'installazione di questo strumento nell'ambiente del servizio Azure Kubernetes. Esplora anche esempi pratici che mostrano come Inspektor Gadget consente di raccogliere informazioni preziose per eseguire un efficace debug di 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 sia la 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 ai 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 qualsiasi delle modalità di accesso ai file di scrittura (O_WRONLY da aprire solo per la scrittura o O_RDWR per aprire 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 . Il loro 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 risorse Kubernetes. Questa integrazione garantisce che esista una connessione senza problemi tra informazioni dettagliate di basso livello e il contesto generale corrispondente. L'integrazione semplifica il processo di risoluzione dei problemi e la raccolta di informazioni pertinenti.

Gadget

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

  • Creazione del processo
  • Accesso a 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 tuo caso d'uso specifico. Tuttavia, se si trova un caso d'uso che i gadget esistenti non coprono attualmente, Inspektor Gadget consente di eseguire i propri programmi eBPF usando il comando run. Poiché il framework Gadget inspektor gestisce la compilazione, la creazione di pacchetti e la distribuzione dei programmi personalizzati, semplifica il processo per i tuoi requisiti univoci. Raccoglie anche metadati di alto livello per arricchire i dati raccolti nel programma.

Casi d'uso

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 di Inspektor Gadget. Tuttavia, 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 dei problemi Sintomi Risoluzione dei problemi
Applicazioni a elevato utilizzo di disco Utilizzo elevato della memoria o della CPU o idoneità dei nodi incoerente Un'applicazione potrebbe impegnarsi costantemente nelle operazioni di lettura/scrittura su disco, ad esempio la registrazione completa. Usando Inspektor Gadget, è possibile identificare in tempo reale quali contenitori generano più operazioni di I/O di blocco. 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 dell'utente finale

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

  • Esecuzione di query riuscite
  • Indica se la risposta contiene un errore
  • Server dei nomi utilizzato per la ricerca
  • Latenza di query-response
Accesso al file system Comportamento errato dell'applicazione o non può funzionare correttamente

L'applicazione potrebbe non essere in grado di accedere a configurazioni, log o altri file vitali 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 utilizzati 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 aprire il file non riesce a causa dell'errore 2 (ENOENT), l'applicazione sta probabilmente tentando di aprire un file che non esiste. Ciò significa che potrebbe essere presente un errore di digitatura nel codice o che il file è disponibile in un percorso diverso.

Esecuzione di codice remoto (RCE) Esecuzione di codice non autorizzata, ad esempio il cryptojacking evidente nell'utilizzo elevato della CPU durante i periodi di inattività dell'applicazione Quando gli utenti malintenzionati tentano di effettuare questo tipo di attacco su 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, bashad esempio .

Come installare Inspektor Gadget in un cluster del servizio Azure Kubernetes

Distribuzione di Gadget inspektor con un clic

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

Distribuire Inspektor Gadget in un cluster del servizio Azure Kubernetes

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

Questa sezione descrive i passaggi per l'installazione di Inspektor Gadget 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

    Molti meccanismi sono disponibili per distribuire e usare Inspektor Gadget. Ognuno di questi meccanismi è personalizzato in base a casi d'uso e requisiti specifici. È possibile usare il plug-in kubectl gadget per applicare diversi di questi meccanismi, ma non tutti. Ad esempio, la distribuzione di Inspektor Gadget tramite il kubectl gadget plug-in dipende dalla disponibilità del server API Kubernetes. Se non è possibile dipendere da tale componente perché la disponibilità potrebbe essere occasionalmente 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 del 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 kubectl gadget 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 altre 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 per essere 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à dei contatti di terze parti

Microsoft fornisce informazioni di contatto di terze parti per contribuire a trovare informazioni aggiuntive su questo argomento. È possibile che tali informazioni di contatto vengano modificate 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.