Kind et Registry privé
Voici un petit billet, qui est plus un pense-bête, permettant de régler les
problèmes de récupération d’images depuis une registry docker privé dans
un cluster kubernetes monté avec kind
.
Création du cluster
Avant de lancer la création du cluster, il faut créer ce fichier de configuration :
kind: ClusterapiVersion: kind.x-k8s.io/v1alpha4nodes: - role: control-plane # This option mounts the host docker registry folder into # the control-plane node, allowing containerd to access them. extraMounts: - containerPath: /usr/local/share/ca-certificates/mon-autorite.crt hostPath: ./mon-autorite.crt - containerPath: /etc/docker/certs.d/artefacts.robert.local/mon-autorite.crt hostPath: ./mon-autorite.crt
En clair, on copie le certificat de mon autorité de certification dans le répertoire de config de docker et dans celui ou se fait l’ajout des certificats dans une distribution Ubuntu. Je n’ai trouvé dans la documentation de kind comment lancer une commande au moment de l’initialisation du cluster.
On peut enfin lancer la création du cluster. Au préalable, on installe kind avec asdf :
asdf plugin add kindasdf install kind latestasdf set --home kind latest
kind create cluster --config=cluster.yml
Creating cluster "kind" ... ✓ Ensuring node image (kindest/node:v1.21.1) 🖼 ✓ Preparing nodes 📦 ✓ Writing configuration 📜 ✓ Starting control-plane 🕹️ ✓ Installing CNI 🔌 ✓ Installing StorageClass 💾Set kubectl context to "kind-kind"You can now use your cluster with:
kubectl cluster-info --context kind-kind
Maintenant, on doit lancer la mise à jour des certificats. Pour cela, on se connecte au conteneur kind :
docker exec -it kind-control-plane bashroot@kind-control-plane:/# update-ca-certificatesUpdating certificates in /etc/ssl/certs...1 added, 0 removed; done.Running hooks in /etc/ca-certificates/update.d...done.root@kind-control-plane:/#exit
On applique un déploiement utilisant une image présente dans votre registry docker privé :
kubectl apply -f app-deployment.yml
On vérifie que tout se passe bien :
kubectl get events --all-namespaces --sort-by='.metadata.creationTimestamp'
default 14m Normal SuccessfulCreate replicaset/monimage-app-f9d65c69c Created pod: monimage-app-f9d65c69c-np8ffdefault 14m Normal Scheduled pod/monimage-app-f9d65c69c-np8ff Successfully assigned default/monimage-app-f9d65c69c-np8ff to kind-control-planedefault 14m Normal Pulling pod/monimage-app-f9d65c69c-np8ff Pulling image "artefacts.robert.local/monimage-app:0.1"default 14m Normal Scheduled pod/monimage-app-f9d65c69c-7h82p Successfully assigned default/monimage-app-f9d65c69c-7h82p to kind-control-planedefault 13m Normal Created pod/monimage-app-f9d65c69c-7h82p Created container monimage-appdefault 13m Normal Started pod/monimage-app-f9d65c69c-7h82p Started container monimage-appdefault 13m Normal Created pod/monimage-app-f9d65c69c-np8ff Created container monimage-appdefault 13m Normal Pulled pod/monimage-app-f9d65c69c-7h82p Successfully pulled image "artefacts.robert.local/monimage-app:0.1" in 26.644923865sdefault 13m Normal Started pod/monimage-app-f9d65c69c-np8ff Started container monimage-appdefault 13m Normal Pulled pod/monimage-app-f9d65c69c-np8ff Successfully pulled image "artefacts.robert.local/monimage-app:0.1" in 26.204999781s
On installe k9s avec asdf et on vérifie que nos pods sont bien montés :
asdf plugin add k9sasdf install k9s latestasdf set --home k9s latest
Et voilà plus de soucis avec la registry privé :)