Aller au contenu principal

Utilisation d'un registre privé

Dès qu'on s'amuse avec des conteneurs et qu'on commence à créer les siens, il est nécessaire d'avoir son propre registre. (Par simplicité, optimisation, efficacité)

Création du secret

En CLI

Voici la commande kubectl permettant de créer un secret contenant les informations requises pour se connecter à un registre privé.

NAMESPACE=thebidouilleur
kubectl --namespace $NAMESPACE create secret docker-registry regcred --docker-server=https://registry.thebidouilleur.xyz --docker-username=admin --docker-password=admin --docker-email=kube@kube

En YAML

Nous allons faire cet exemple avec les identifiants suivants: user:pass Il faudra convertir cette combinaison en base64. Je passe par mon terminal Linux pour réaliser cette conversion.

echo -n "user:pass" | base64 # dXNlcjpwYXNz

On va ensuite créer notre fichier de configuration en format JSON (qui est le format accepté par docker pour le fichier ~/.docker/config)

{
"auths":
{
"registry.thebidouilleur.xyz":
{
"auth": "dXNlcjpwYXNz" }
}
}

Pensez à remplacer l'url du registre. Il faudra mettre notre JSON sur une ligne et l'encoder en base64 pour créer notre manifest final.

echo -n '{"auths":{"registry.thebidouilleur.xyz":{"auth":"dXNlcjpwYXNz"}}}' | base64 # eyJhdXRocyI6eyJyZWdpc3RyeS50aGViaWRvdWlsbGV1ci54eXoiOnsiYXV0aCI6ImRYTmxjanB3WVhOeiJ9fX0=

On peut enfin créer notre yaml qu'on donnera à kubectl.

apiVersion: v1 
data:
.dockerconfigjson: eyJhdXRocyI6eyJyZWdpc3RyeS50aGViaWRvdWlsbGV1ci54eXoiOnsiYXV0aCI6ImRYTmxjanB3WVhOeiJ9fX0=
kind: Secret
metadata:
name: regcred
namespace: thebidouilleur
type: kubernetes.io/dockerconfigjson

Une fois ingéré par notre cluster. Nous allons pouvoir utiliser des images provenant d'un registre privé. Exemple:

apiVersion: apps/v1
kind: Deployment
metadata:
name: deploy-thebidouilleur
labels:
version: 4.3.4
annotations:
argocd.argoproj.io/hook: PostSync
namespace: thebidouilleur
spec:
selector:
matchLabels:
app: deploy-thebidouilleur
replicas: 1
template:
metadata:
labels:
app: deploy-thebidouilleur
spec:
containers:
- name: thebidouilleur
image: registry.thebidouilleur.xyz/thebidouilleur:latest
imagePullPolicy: Always
env:
- name: RUN_MODE
value: "production"
ports:
- containerPort: 80
livenessProbe:
tcpSocket:
host: 127.0.0.1
port: 80
initialDelaySeconds: 180
periodSeconds: 3
imagePullSecrets:
- name: regcred