Kyverno e registry privado
Clusters que baixam imagens de um registry privado precisam fornecer credenciais de acesso a cada workload. Em um ambiente com muitos componentes — como o TDP Kubernetes — repetir essa configuração manualmente em cada chart é ineficiente e gera riscos de inconsistência.
O Kyverno resolve esse problema como um policy engine de cluster: ele intercepta a criação de Pods e injeta automaticamente o imagePullSecrets necessário, com base em uma ClusterPolicy centralizada. Dessa forma, todos os componentes passam a usar as credenciais do registry sem que cada manifest precise declará-las individualmente.
Esse ajuste é condicional: só se aplica quando o ambiente exige autenticação para baixar imagens de um registry privado. Ambientes que usam registries públicos ou que configuram imagePullSecrets diretamente em cada chart não precisam desta etapa.
Quando considerar este ajuste
Considere esta configuração quando:
- as imagens são distribuídas por um registry privado
- o cluster precisa reutilizar as mesmas credenciais em múltiplos componentes
- a política de plataforma exige padronização do uso de
imagePullSecrets - se deseja centralizar a manutenção dessas credenciais
Papel do Kyverno neste contexto
O Secret continua sendo o objeto que armazena as credenciais do registry. O papel do Kyverno é aplicar e padronizar o uso desse Secret no cluster por meio de uma ClusterPolicy. Assim, novos Pods podem receber automaticamente a referência ao imagePullSecrets sem repetir a configuração em cada manifest de componente.
Visão geral da configuração
O fluxo é composto por três etapas:
- Instalar o Kyverno no cluster
- Criar um Secret Kubernetes com as credenciais do registry
- Criar uma
ClusterPolicyque injetaimagePullSecretsautomaticamente em todos os Pods
1. Instalar o Kyverno
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
helm install kyverno kyverno/kyverno --namespace kyverno --create-namespace
2. Criar o Secret do registry
Crie um arquivo tdp-registry.yaml com o conteúdo abaixo:
apiVersion: v1
kind: Secret
metadata:
name: tdp-registry
type: kubernetes.io/dockerconfigjson
stringData:
.dockerconfigjson: |
{
"auths": {
"registry.tecnisys.com.br": {
"username": "user@tecnisys.com.br",
"password": "xxxxxxxxxxx"
}
}
}
Depois, aplique o Secret no cluster:
kubectl apply -f tdp-registry.yaml
3. Criar a policy para injetar imagePullSecrets
Crie um arquivo policy-kyverno.yaml:
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: inject-tecnisys-registry-secret
annotations:
policies.kyverno.io/title: Inject Image Pull Secrets
policies.kyverno.io/description: Automatically adds the Tecnisys secret to all pods.
spec:
background: false
rules:
- name: inject-secret
match:
any:
- resources:
kinds:
- Pod
mutate:
patchStrategicMerge:
spec:
imagePullSecrets:
- name: tdp-registry
Aplique a policy:
kubectl apply -f policy-kyverno.yaml
Resultado esperado
Ap ós a aplicação da ClusterPolicy, novos Pods criados no cluster passam a receber o imagePullSecrets com o nome tdp-registry, permitindo o download das imagens privadas do registry da Tecnisys sem repetir a configuração em cada chart.
Onde guardar no repositório GitOps
Versione os arquivos tdp-registry.yaml e policy-kyverno.yaml no repositório GitOps dentro de uma pasta policies/:
tdp-gitops/
├── app-of-apps.yaml
├── apps/
├── values/
└── policies/
├── tdp-registry.yaml
└── kyverno-registry.yaml
Esses arquivos são aplicados com kubectl apply -f, não pelo Argo CD. Mantê-los no repositório garante que as credenciais e políticas de imagens privadas sejam versionadas junto ao restante da configuração.