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.4
IP , 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:
|
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:
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, bash ad 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.
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 computerEsecuzione del
kubectl gadget
plug-in per installare Inspektor Gadget nel clusterAvviso
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 ilkubectl gadget
meccanismo di distribuzione. Per altre informazioni su questo e altri casi d'uso, vedere la documentazione di Inspektor Gadget.
Prerequisiti
Strumento da riga di comando kubernetes kubectl . Se si ha l'interfaccia della riga di comando di Azure, è possibile eseguire il comando az aks install-cli per installare kubectl.
Un cluster servizio Azure Kubernetes. Se non si ha un cluster del servizio Azure Kubernetes, crearne uno usando l'interfaccia della riga di comando di Azure o usando il portale di Azure.
Gestione pacchetti krew per i plug-in in kubectl. È possibile seguire la guida introduttiva di krew per installare questo strumento di gestione pacchetti.
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.