Kubernetes - Ajouter à kind le certificat de l'autorité de certification de votre registry!
Publié le : 1 décembre 2021 | Mis à jour le : 11 décembre 2022Voici 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: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- 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 lancé la création du cluster. Au préalable on installe kind avec arkade :
arkade get kind
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 bash
root@kind-control-plane:/# update-ca-certificates
Updating 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-np8ff
default 14m Normal Scheduled pod/monimage-app-f9d65c69c-np8ff Successfully assigned default/monimage-app-f9d65c69c-np8ff to kind-control-plane
default 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-plane
default 13m Normal Created pod/monimage-app-f9d65c69c-7h82p Created container monimage-app
default 13m Normal Started pod/monimage-app-f9d65c69c-7h82p Started container monimage-app
default 13m Normal Created pod/monimage-app-f9d65c69c-np8ff Created container monimage-app
default 13m Normal Pulled pod/monimage-app-f9d65c69c-7h82p Successfully pulled image "artefacts.robert.local/monimage-app:0.1" in 26.644923865s
default 13m Normal Started pod/monimage-app-f9d65c69c-np8ff Started container monimage-app
default 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 arkade et on vérifie que nos pods sont bien montés :
arkade get k9s
Et voilà plus de soucis avec la registry privé :)