Capturar insights do sistema em tempo real de um cluster do AKS

Este artigo discute o processo de coleta de insights do sistema em tempo real do cluster do MICROSOFT Serviço de Kubernetes do Azure (AKS) usando o Inspektor Gadget. O artigo contém instruções passo a passo para instalar essa ferramenta em seu ambiente AKS. Ele também explora exemplos práticos que mostram como o Inspektor Gadget ajuda você a coletar informações valiosas para fazer a depuração efetiva de problemas do mundo real.

Demonstração

Para começar, considere a demonstração rápida a seguir. Suponha que você precise descobrir por que as solicitações DNS de um aplicativo falham. Usando o Inspektor Gadget, você pode capturar o tráfego DNS no namespace do Kubernetes no qual seu aplicativo está em execução:

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

A partir dessas informações, você pode ver que as solicitações DNS são direcionadas para o servidor DNS no endereço 1.2.3.4IP, mas o servidor nunca responde.

Agora, suponha que 1.2.3.4 essa não seja a configuração padrão do servidor de nome e você suspeita que um processo suspeito esteja modificando a configuração no runtime. Nesses tipos de casos, o Inspektor Gadget vai além do diagnóstico DNS. Ele também permite monitorar processos que acessam arquivos críticos (como /etc/resolv.conf) e têm a intenção de modificar esses arquivos. Para usar esse recurso de monitoramento, filtre os sinalizadores na saída para mostrar qualquer um dos modos de acesso ao arquivo de gravação (O_WRONLY para abrir somente para gravação ou O_RDWR para abrir para leitura e gravação):

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

O que é Inspektor Gadget?

Inspektor Gadget é uma estrutura projetada para criar, empacotar, implantar e executar ferramentas dedicadas à depuração e inspeção de sistemas Linux e Kubernetes. Essas ferramentas ("gadgets") são implementadas como programas eBPF . Seu objetivo principal é coletar dados de kernel de baixo nível para fornecer insights sobre cenários específicos do sistema. A estrutura inspektor Gadget gerencia a associação dos dados coletados usando referências de alto nível, como recursos do Kubernetes. Essa integração garante que exista uma conexão perfeita entre insights de baixo nível e seu contexto de alto nível correspondente. A integração simplifica o processo de solução de problemas e a coleção de informações relevantes.

Gadgets

O Inspektor Gadget fornece um conjunto de ferramentas internas projetadas para depurar e observar situações comuns em um sistema. Por exemplo, usando esses gadgets, você pode rastrear os seguintes eventos em seu cluster:

  • Criação de processo
  • Acesso a arquivos
  • Atividade de rede, como conexões TCP ou resolução DNS

Os gadgets apresentam as informações coletadas usando mecanismos diferentes. Por exemplo, alguns gadgets podem informá-lo sobre o sistema status em momentos específicos. Outros gadgets podem relatar sempre que um determinado evento ocorre ou podem fornecer atualizações periódicas.

Esses são apenas exemplos. A documentação oficial fornece descrições detalhadas e exemplos de cada gadget para que você possa determinar o gadget mais adequado para seu caso de uso específico. No entanto, se você encontrar um caso de uso que os gadgets existentes não cobrem atualmente, o Inspektor Gadget oferecerá flexibilidade. Você pode executar scripts compatíveis com a linguagem de rastreamento eBPF bpftrace executando o comando script. Ou você pode executar seus próprios programas eBPF executando o comando de execução. Como a estrutura inspektor Gadget manipula o edifício, a empacotamento e a implantação de seus programas personalizados, ela simplifica o processo para seus requisitos exclusivos. Além disso, ele coleta metadados de alto nível para enriquecer os dados coletados em seu programa.

Casos de uso

Para complementar a demonstração apresentada no início deste artigo, compilamos uma lista de problemas e cenários práticos que mostram como o Inspektor Gadget ajuda você a enfrentar desafios de depuração. Os exemplos a seguir mostram o potencial do Inspektor Gadget. Mas as funcionalidades dessa ferramenta vão além desses cenários. Isso torna o Inspektor Gadget um ativo inestimável para navegar pelas complexidades da depuração e observabilidade do Kubernetes.

Área de problema Sintomas Solução de problemas
Aplicativos com uso intensivo de disco Alta memória ou uso de CPU ou preparação inconsistente de nó Um aplicativo pode se envolver consistentemente em operações de leitura/gravação em disco, como registro em log extensivo. Usando o Inspektor Gadget, você pode identificar em tempo real quais contêineres geram mais E/S de bloco. Ou, mais especificamente, você pode encontrar o contêiner que causa mais leituras e gravações em um arquivo.
"É sempre DNS" Alta latência do aplicativo, tempo limite ou má experiência do usuário final

Usando o Inspektor Gadget, você pode rastrear todas as consultas e respostas DNS no cluster. Em particular, o Inspektor Gadget fornece as seguintes informações que ajudam você a determinar se o DNS está afetando o desempenho do aplicativo:

  • Sucesso da consulta
  • Se a resposta contém um erro
  • O servidor de nome usado para a pesquisa
  • A latência de consulta-resposta
Acesso ao sistema de arquivos O aplicativo se comporta mal ou não pode funcionar corretamente

O aplicativo pode não conseguir acessar configurações específicas, logs ou outros arquivos vitais no sistema de arquivos. Nesses cenários, o Inspektor Gadget permite rastrear todos os arquivos abertos dentro dos pods para diagnosticar problemas de acesso. Sempre que seu aplicativo tentar abrir um arquivo, você pode descobrir as seguintes informações:

  • Os sinalizadores usados para abrir o arquivo (por exemplo, O_RDONLY, O_WRONLY, O_RDWR e assim por diante)
  • Se a tentativa de abertura de arquivo for bem-sucedida
  • O erro retornado (se a tentativa de abertura do arquivo falhar)

Por exemplo, se a tentativa de abrir o arquivo falhar devido ao erro 2 (ENOENT), o aplicativo provavelmente está tentando abrir um arquivo que não existe. Isso significa que você pode ter um erro de digitação no código ou o arquivo está disponível em um caminho diferente.

Execução remota de código (RCE) Execução de código não autorizada, como criptografia que é evidente no alto uso da CPU durante períodos ociosos do aplicativo Quando os invasores tentam fazer esse tipo de ataque a um sistema, eles geralmente têm que executar o código usando bash. O Inspektor Gadget permite rastrear a criação de novos processos, especialmente processos que envolvem comandos críticos, como bash.

Como instalar o Inspektor Gadget em um cluster do AKS

implantação One-Click Inspektor Gadget

Ao selecionar o botão a seguir, um cluster AKS será criado automaticamente e o Inspektor Gadget será implantado no cluster. Depois que a implantação for concluída, você poderá explorar todos os recursos do Inspektor Gadget no ambiente de shell fornecido.

Implantar o Inspektor Gadget em um cluster do AKS

Instalar o Inspektor Gadget executando o plug-in "kubectl gadget"

Esta seção descreve as etapas para instalar o Inspektor Gadget no cluster do AKS executando o kubectl gadget plug-in. A instalação consiste em duas partes:

  • Instalando o kubectl gadget plug-in em seu computador

  • Executando o kubectl gadget plug-in para instalar o Inspektor Gadget no cluster

    Aviso

    Muitos mecanismos estão disponíveis para implantar e usar o Inspektor Gadget. Cada um desses mecanismos é adaptado para casos e requisitos de uso específicos. Você pode usar o plug-in do gadget kubectl para aplicar vários desses mecanismos, mas não todos eles. Por exemplo, a implantação do Inspektor Gadget usando o kubectl gadget plug-in depende da disponibilidade do servidor de API do Kubernetes. Se você não puder depender desse componente porque sua disponibilidade pode ser ocasionalmente comprometida, recomendamos que você evite usar o kubectl gadgetmecanismo de implantação. Para obter mais informações sobre esse e outros casos de uso, consulte a documentação do Inspektor Gadget.

Pré-requisitos

Parte 1: instalar o gadget plug-in kubectl em seu computador

Recomendamos que você use krew para instalar o kubectl gadget plug-in.

Observação

Para instalar uma versão específica ou compilá-la na origem, consulte Instalar o gadget kubectl no GitHub.

kubectl krew install gadget

Agora, verifique a instalação executando o version comando:

kubectl gadget version

O version comando mostra a versão do cliente (kubectl gadget plug-in), mas também informa que ele ainda não está instalado no servidor (o cluster):

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

Parte 2: instalar o Inspektor Gadget no cluster

O comando a seguir implanta o controlador DaemonSet .

Observação

Várias opções estão disponíveis para personalizar a implantação, conforme mostrado na lista a seguir:

  • Usar uma imagem de contêiner específica
  • Implantar em nós específicos
  • Implantar em um namespace personalizado

Para saber mais sobre essas opções, consulte a seção Instalação no cluster da documentação oficial.

kubectl gadget deploy

Verifique a instalação executando o version comando novamente:

kubectl gadget version

Desta vez, o cliente e o servidor são mostrados como instalados corretamente:

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

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Aviso de isenção de responsabilidade para contatos de terceiros

A Microsoft fornece informações de contato de terceiros para ajudá-lo a encontrar informações adicionais sobre esse tópico. Essas informações de contato podem ser alteradas sem aviso prévio. A Microsoft não garante a precisão das informações de contato de terceiros.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.