Recipientes efêmeros no Kubernetes são um recurso poderoso que permite aos operadores depurar e solucionar problemas em Pods em execução, criando recipientes de curta duração dentro do mesmo Pod. Isso é particularmente útil para problemas que não podem ser replicados em um ambiente separado. Ao usar recipientes efêmeros, você pode anexar um recipiente a um Pod em execução, inspecionar o sistema de arquivos, configurações de rede ou processos em execução e, em seguida, descartar o recipiente sem afetar os recipientes primários do Pod.
O que são recipientes efêmeros?
Recipientes efêmeros são recipientes especiais que não são executados como parte de uma carga de trabalho de aplicativo, mas são adicionados a um Pod existente com o propósito de depuração. Eles compartilham os mesmos recursos (espaço de rede, volumes, etc.) que os outros recipientes no Pod, tornando-os ideais para diagnósticos em tempo real. Uma vez concluída a depuração, o recipiente efêmero pode ser removido sem a necessidade de recriar todo o Pod.
Pontos-chave
- De curta duração: Os recipientes efêmeros destinam-se apenas para depuração ou solução de problemas.
- Não disruptivos: Eles não impactam os recipientes de aplicativos existentes no Pod.
- Compartilhamento de recursos: Eles compartilham recursos como volumes de armazenamento e espaços de rede com o Pod, tornando a depuração mais poderosa.
Considerações de segurança com recipientes efêmeros
Contêineres efêmeros fornecem uma abordagem de depuração mais segura ao limitar o acesso prolongado a Pods de produção. Você pode impor regras rigorosas de RBAC para que apenas usuários autorizados possam adicionar e executar contêineres efêmeros, minimizando a janela para potenciais ameaças. Como esses contêineres desaparecem assim que a depuração é concluída, a superfície de ataque é reduzida, reforçando a segurança geral do cluster.
Casos de Uso
- Solução de Problemas de Falhas de Aplicações: Quando você precisa inspecionar logs ou executar ferramentas de depuração em um contêiner que falhou ou está falhando, contêineres efêmeros permitem que você entre em um ambiente em execução sem alterar a configuração do contêiner principal.
- Depuração de Rede: Você pode instalar ferramentas de depuração (por exemplo, tcpdump, netstat) no contêiner efêmero para diagnosticar problemas de rede dentro do espaço de nomes de rede do Pod.
- Verificações ao Vivo do Sistema de Arquivos: Se você suspeitar de corrupção de arquivos ou caminhos de arquivos incorretos, contêineres efêmeros permitem que você verifique o sistema de arquivos em tempo real.
Pré-requisitos
- Versão do Kubernetes: Contêineres efêmeros requerem pelo menos Kubernetes 1.23+ onde o recurso EphemeralContainers está geralmente disponível (GA). Em versões mais antigas do Kubernetes, você pode precisar habilitar o recurso gate EphemeralContainers.
- kubectl: Certifique-se de que seu cliente kubectl local está pelo menos na mesma versão ou em uma versão mais nova que o plano de controle do seu cluster.
- Permissões Suficientes do RBAC: Você precisa de permissão para usar o comando kubectl debug e para atualizar Pods (o contêiner efêmero é adicionado via uma atualização na especificação do Pod).
Guia Passo a Passo: Usando Contêineres Efêmeros
Abaixo está um processo generalizado que funcionará em qualquer ambiente Kubernetes, incluindo EKS (Elastic Kubernetes Service na AWS), AKS (Azure Kubernetes Service), GKE (Google Kubernetes Engine) ou clusters locais. Vamos nos concentrar no comando kubectl debug, que é o mecanismo principal para adicionar contêineres efêmeros.
Verifique a Configuração do Seu Cluster
kubectl version
- Assegure-se de que sua Versão do Servidor seja pelo menos 1.23.
- Confirme que sua Versão do Cliente também seja compatível.
Se você estiver em um ambiente gerenciado como EKS ou AKS, verifique a versão do cluster no painel do seu provedor de nuvem ou CLI para garantir que seja 1.23 ou posterior.
Identifique o Pod que Deseja Depurar
Liste os Pods em um namespace específico:
kubectl get pods -n <your-namespace>
Escolha o nome do Pod que você precisa solucionar problemas, por exemplo: meu-app-pod-abc123.
Adicione um Contêiner Efêmero Usando o kubectl debug
Use o comando kubectl debug para adicionar um contêiner efêmero. Por exemplo, usaremos uma imagem simples do Ubuntu:
kubectl debug my-app-pod-abc123 -n <your-namespace> \
--image=ubuntu \
--target=my-container \
--interactive=true \
--tty=true
Aqui está uma explicação das flags:
- meu-app-pod-abc123: O nome do Pod existente.
- –image=ubuntu: Imagem Docker a ser usada para o contêiner efêmero.
- –target=my-container: (Opcional) Especifica qual contêiner no Pod você deseja direcionar para compartilhamento de namespace. Normalmente, este é o contêiner principal no Pod.
- –interactive=true e –tty=true: Permite obter uma sessão de shell dentro do contêiner efêmero.
Depois de executar o acima, você terá um prompt de shell no contêiner efêmero dentro do Pod existente. Agora você pode executar comandos de depuração como ls, ps, netstat, ou instalar pacotes extras.
Confirmar Criação do Contêiner Efêmero
Em outro terminal, ou depois de sair do shell do contêiner efêmero, execute:
kubectl get pod my-app-pod-abc123 -n <your-namespace> -o yaml
Você deve ver uma nova seção em spec ou status descrevendo o contêiner efêmero.
Depuração e Solução de Problemas
De dentro do contêiner efêmero, você pode:
- Verificar logs ou configuração do aplicativo.
- Usar ferramentas de depuração como curl, wget, telnet para verificar a conectividade de rede.
- Inspecionar variáveis de ambiente para confirmar a configuração do seu aplicativo.
# Examples
curl http://localhost:8080/health
env | grep MY_APP_
ps aux
Limpar Contêineres Efêmeros
Contêineres efêmeros são removidos automaticamente quando o Pod é destruído ou após você removê-los manualmente. Para remover o contêiner efêmero do Pod sem destruir todo o Pod (nas versões suportadas), você pode atualizar a especificação do Pod. No entanto, tipicamente os contêineres efêmeros não são feitos para durar muito tempo. Uma vez que você exclui o Pod ou reduz a escala do seu deployment, o contêiner efêmero também será removido.
Notas Específicas para Serviços Gerenciados
Amazon EKS
- Certifique-se de que seu cluster EKS está executando Kubernetes 1.23 ou superior.
- Confirme que as permissões do IAM permitem que você execute o kubectl debug.
- Se você estiver usando versões mais antigas do EKS (1.22 ou anteriores), precisará habilitar o recurso EphemeralContainers.
Azure AKS
- Use o Azure CLI (az aks update) para atualizar seu cluster AKS para uma versão compatível, se necessário.
Confirme que seu contexto kubectl está definido para o cluster AKS:
az aks get-credentials --resource-group <rg-name> --name <cluster-name>
Outros Clusters Gerenciados ou On-Prem
- Verifique a documentação do seu cluster ou pergunte ao seu provedor para confirmar se os contêineres efêmeros estão habilitados.
- A maioria das soluções on-prem modernas (OpenShift, Rancher, etc.) tem contêineres efêmeros habilitados por padrão a partir do Kubernetes 1.23, mas você pode precisar habilitar manualmente o recurso se estiver em uma versão mais antiga.
Melhores Práticas
- Use Imagens Mínimas: Escolha imagens leves para reduzir a sobrecarga (por exemplo, busybox, imagens de depuração sem distribuição).
- Restringir RBAC: Limite quem pode criar contêineres efêmeros para minimizar possíveis riscos de segurança.
- Registrar Todas as Sessões de Depuração: Acompanhe o uso de contêineres efêmeros para auditoria e conformidade.
- Não Dependa de Contêineres Efêmeros: Eles são apenas para depuração. Se você precisa de um contêiner permanente auxiliar, configure-o na especificação do Pod desde o início.
Conclusão
Os contêineres efêmeros são uma maneira versátil e poderosa de solucionar problemas em tempo real sem afetar os contêineres de aplicativos principais. Se você estiver executando o Kubernetes no EKS, AKS, localmente ou em outra solução gerenciada, entender e usar contêineres efêmeros pode diminuir significativamente o seu tempo médio de recuperação (MTTR) e melhorar a eficiência operacional.Eles complementam métodos tradicionais de solução de problemas e devem fazer parte do arsenal de qualquer equipe de plataforma para diagnosticar problemas complexos de aplicativos. Seguindo os passos delineados acima, você pode implantar com confiança contêineres efêmeros em seu ambiente e otimizar seus processos de depuração.
Nota do Autor: Baseado em resolução de problemas reais do Kubernetes, este guia tem como objetivo ajudá-lo a depurar Pods de forma rápida e sem interrupções em Ambientes de Produção.
Source:
https://dzone.com/articles/enhancing-security-troubleshooting-in-production-clusters