CEVIU Logo
Voltar

Autenticação de Registry Mirror com Kubernetes Secrets

Aprofundamento CEVIU

Aprofundamento

O recurso não é só uma mudança de local de armazenamento de credenciais: ele reprojeta o fluxo de autenticação em tempo de pull. Antes, credenciais para mirrors eram injetadas no nível do nó via arquivos estáticos ou configurações globais do CRI-O, o que violava o princípio de isolamento de tenants e exigia reinicialização do runtime para atualizações. Agora, o kubelet chama um plugin externo que usa o token da service account do pod para identificar o namespace, busca secrets específicos nesse escopo, gera um arquivo de auth efêmero com TTL implícito (não persistente) e limpa tudo após o pull. Isso elimina a necessidade de credenciais compartilhadas entre namespaces e remove o risco de vazamento acidental por meio de mounts ou logs.

A funcionalidade depende de três pilares alinhados: Kubernetes 1.33+ com o feature gate KubeletServiceAccountTokenForCredentialProviders ativado, CRI-O 1.34+, e a API de Credential Provider estável desde o Kubernetes 1.26. O arquivo gerado, como /etc/crio/auth/<namespace>-<sha256>.json, nunca é acessível fora do ciclo do pull, nem exposto ao usuário ou ao pod. É um mecanismo nativo de infraestrutura como código, não uma gambiarra com initContainers ou sidecars personalizados.

Por que isso importa

Em ambientes multi-tenant, como provedores de Kubernetes-as-a-Service ou clusters OpenShift usados por múltiplos times, autenticar mirrors com secrets de namespace reduz drasticamente a superfície de ataque. Um tenant comprometido não consegue extrair credenciais de outro, mesmo que tenha acesso ao nó. Também simplifica operações: equipes de plataforma podem rotacionar credenciais de mirror por tenant sem derrubar workloads ou reiniciar o CRI-O. A integração com OpenShift 4.21 (RPM pré-instalado) e a previsão de suporte declarativo na versão 4.22 indicam que esse modelo está se tornando padrão de fato para entrega segura de imagens em nuvem privada e híbrida.

Perguntas frequentes

Esse recurso substitui imagePullSecrets?

Não. Ele complementa: imagePullSecrets ainda são usados para autenticar no registry de origem (ex: Docker Hub, ECR). Esse novo fluxo lida exclusivamente com mirrors configurados em registries.conf, como proxies internos ou caches locais, onde as credenciais antes tinham de ser globais.

Preciso alterar minha configuração de registries.conf?

Sim, mas apenas para habilitar o plugin. Você deve adicionar uma seção [plugins] com 'name = "kubernetes"' e apontar para o binário do credential provider. O CRI-O passa automaticamente os parâmetros necessários, nenhum ajuste manual no formato dos secrets é necessário.

Como faço auditoria de quem acessou qual mirror?

O plugin registra logs no stdout do kubelet com nível 'info' ou 'debug', incluindo namespace, nome do mirror e hash da imagem. Para auditoria contínua, redirecione esses logs para um coletor centralizado (ex: Loki + Promtail) e filtre por 'credential-provider' e 'auth file generated'.

Funciona com ECR, ACR ou registries on-prem como Harbor?

Sim, desde que o mirror esteja listado em registries.conf com a flag 'mirror-by-digest-only = false' (ou omitida) e o secret no namespace contenha credenciais válidas no formato dockerconfigjson. O plugin não impõe restrições de provedor, ele só fornece o token de autenticação ao CRI-O.

Fontes

Avalie este artigo:
Compartilhar:
Categoria
CEVIU DevOps
Publicado
16 de março de 2026
Editoria
CEVIU DevOps

Quer receber mais sobre CEVIU DevOps?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser