Come collegare un registry di immagini privato
Questa guida spiega come configurare l'accesso a un registry di immagini di container privato (Docker Hub, GitLab Registry, GitHub Container Registry, ecc.) dal cluster Kubernetes Hikube.
Questa guida utilizza i meccanismi nativi di Kubernetes per l'autenticazione ai registry di immagini. Tutti i comandi si eseguono nel suo cluster.
Prerequisiti
- Un cluster Kubernetes Hikube distribuito (vedere l'avvio rapido)
- Il kubeconfig del cluster scaricato dalla console (pulsante Kubeconfig, riservato agli amministratori del progetto) e caricato nella sessione (
export KUBECONFIG=~/Downloads/kubeconfig-<nome-del-cluster>.yaml) - Le credenziali di accesso al registry privato (URL, nome utente, password o token)
Passaggi
1. Creare un Secret di tipo docker-registry
Crei un Secret Kubernetes contenente le credenziali del suo registry privato:
kubectl create secret docker-registry my-registry \
--docker-server=registry.example.com \
--docker-username=user \
--docker-password=pass \
--docker-email=user@example.com
Esempi per i registry più comuni:
# Docker Hub
kubectl create secret docker-registry dockerhub \
--docker-server=https://index.docker.io/v1/ \
--docker-username=myuser \
--docker-password=mytoken
# GitLab Container Registry
kubectl create secret docker-registry gitlab-registry \
--docker-server=registry.gitlab.com \
--docker-username=deploy-token-user \
--docker-password=deploy-token-pass
# GitHub Container Registry
kubectl create secret docker-registry ghcr \
--docker-server=ghcr.io \
--docker-username=github-user \
--docker-password=ghp_xxxxxxxxxxxx
2. Collegare il secret al ServiceAccount default
Affinché tutti i pod del namespace utilizzino automaticamente il registry privato, colleghi il secret al ServiceAccount default:
kubectl patch serviceaccount default -p '{"imagePullSecrets": [{"name": "my-registry"}]}'
Questo metodo è pratico quando tutti i pod di un namespace devono accedere allo stesso registry. I nuovi pod ereditano automaticamente il secret.
3. Oppure referenziarlo direttamente nella spec del Pod
È anche possibile specificare imagePullSecrets direttamente nella spec di ogni Pod o Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
spec:
replicas: 2
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: app
image: registry.example.com/company/my-app:v1.2.3
ports:
- containerPort: 8080
imagePullSecrets:
- name: my-registry
4. Testare con una distribuzione che utilizza un'immagine privata
Distribuisca l'applicazione e verifichi che l'immagine venga scaricata correttamente:
kubectl apply -f deployment-private-image.yaml
# Verificare lo stato dei pod
kubectl get pods -l app=my-app
# In caso di errore, esaminare gli eventi
kubectl describe pod -l app=my-app
Verifica
Verifichi che i pod utilizzino correttamente l'immagine privata:
# Verificare che i pod siano Running
kubectl get pods -l app=my-app
Risultato atteso:
NAME READY STATUS RESTARTS AGE
my-app-6b8d5f7c9d-abc12 1/1 Running 0 1m
my-app-6b8d5f7c9d-def34 1/1 Running 0 1m
Se i pod restano nello stato ImagePullBackOff o ErrImagePull, verifichi:
- l'URL del registry nel Secret (
--docker-server); - le credenziali (nome utente e password o token);
- il nome completo dell'immagine con il prefisso del registry;
- che il secret si trovi nello stesso namespace del Pod.
Per approfondire
- Concetti: architettura Kubernetes Hikube
- Accesso e strumenti: kubeconfig e comandi utili