Saltar para o conteúdo principal
Versão 3.0.0

Kyverno e registry privado

Clusters que transferem imagens de um registry privado precisam de fornecer credenciais de acesso a cada workload. Num 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 este problema como um policy engine de cluster: intercepta a criação de Pods e injeta automaticamente o imagePullSecrets necessário, com base numa ClusterPolicy centralizada. Desta forma, todos os componentes passam a utilizar as credenciais do registry sem que cada manifest precise declará-las individualmente.

Este ajuste é condicional: só se aplica quando o ambiente exige autenticação para transferir imagens de um registry privado. Ambientes que utilizam registries públicos ou que configuram imagePullSecrets diretamente em cada chart não necessitam desta etapa.

Quando considerar este ajuste

Considere esta configuração quando:

  • as imagens são distribuídas por um registry privado
  • o cluster precisa de reutilizar as mesmas credenciais em múltiplos componentes
  • a política de plataforma exige padronização do uso de imagePullSecrets
  • se pretende centralizar a manutenção dessas credenciais

Papel do Kyverno neste contexto

O Secret continua a ser 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:

  1. Instalar o Kyverno no cluster
  2. Criar um Secret Kubernetes com as credenciais do registry
  3. Criar uma ClusterPolicy que injeta imagePullSecrets automaticamente em todos os Pods

1. Instalar o Kyverno

Terminal input
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 ficheiro tdp-registry.yaml com o conteúdo abaixo:

tdp-registry.yaml
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:

Terminal input
kubectl apply -f tdp-registry.yaml

3. Criar a policy para injetar imagePullSecrets

Crie um ficheiro policy-kyverno.yaml:

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:

Terminal input
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 ficheiros 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.