Aller au contenu principal

Kind et Registry privé

· 3 minutes de lecture
Stéphane ROBERT
Consultant DevOps

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: 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 lancer la création du cluster. Au préalable, on installe kind avec asdf :

asdf plugin add kind
asdf install kind latest
asdf global 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 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 asdf et on vérifie que nos pods sont bien montés :

asdf plugin add k9s
asdf install k9s latest
asdf global k9s latest

Et voilà plus de soucis avec la registry privé :)