22 de abril de 20263 min de leitura

Ajustes no SELinux Volume Labeling: O que esperar para a versão 1.37 do Kubernetes

Equipe de Engenharia Nuvem Online

Kubernetes News

No ecossistema de infraestrutura cloud, a segurança e a performance muitas vezes caminham em direções opostas. O Kubernetes v1.36 trouxe um marco importante para quem opera em ambientes Linux com SELinux em modo enforcing: a transição do SELinuxMount para um comportamento que, em breve, será o padrão (previsto para o v1.37).

Historicamente, o kubelet delegava a tarefa de aplicar labels do SELinux ao container runtime, que realizava uma verificação recursiva em todos os arquivos de um volume. Em volumes remotos ou com um grande número de inodes, essa operação gera latência significativa no deployment de um Pod. A nova abordagem, que utiliza -o context=<label> na montagem, resolve esse gargalo de performance, mas impõe restrições rígidas que equipes de engenharia precisam mapear antes de uma atualização de versão.

O que muda na prática para sua operação

A mudança técnica é uma melhoria substancial de eficiência operacional: ao montar o volume diretamente com a label correta, eliminamos a necessidade de percorrer todo o sistema de arquivos. Contudo, essa mudança altera os cenários de compartilhamento de volumes. Em versões anteriores, era comum permitir que um Pod privilegiado e outro não privilegiado acessassem o mesmo volume. Com a nova implementação, cenários que dependiam dessa flexibilidade de labels do SELinux falharão, deixando o Pod parado em ContainerCreating.

Para times de SecOps e gestores de infra, o ponto de atenção é o selinux-warning-controller. Recomendamos fortemente a ativação deste controller no kube-controller-manager (usando --controllers=*,selinux-warning-controller). Ele é a ferramenta mais eficaz para identificar potenciais conflitos de labels via métrica selinux_warning_controller_selinux_volume_conflict antes que eles se tornem incidentes de indisponibilidade em produção.

Estratégia de transição para empresas brasileiras

Nossa análise sugere uma abordagem consultiva em três etapas:

  1. Auditoria: Ative o controller de aviso no controle de plano e monitore os logs de intenção de conflito.
  2. Mitigação: Utilize o novo campo spec.securityContext.seLinuxChangePolicy. Para aplicações legadas que não podem ser rearquitetadas, a definição de Recursive manterá o comportamento antigo (e seguro, embora mais lento).
  3. Padronização: Aproveite o momento para avaliar se a carga de trabalho realmente necessita de privilégios elevados. O uso de MutatingAdmissionPolicies ou ferramentas como Kyverno/Gatekeeper pode automatizar essa transição, garantindo conformidade sem intervenção manual em todo deployment novo.

Para empresas que dependem de alta disponibilidade e estabilidade, tratar essas mudanças como parte da rotina de upgrade do Kubernetes é a diferença entre um ambiente resiliente e uma manutenção não planejada.


Artigo originalmente publicado em Kubernetes Blog.

Gostou? Compartilhe:
Precisa de ajuda?Fale com nossos especialistas 👋
Avatar Walcew - Headset