Utiliser une image depuis un registre privé#

Création d’une image sur un registre privé#

Commencez par écrire une image Docker que vous pousserez sur un registre privé :

  1. Créez un projet privé sur gitlab

  2. Générez un token de déploiement

  3. Créez une image Docker avec le Dockerfile suivant :

    FROM ubuntu:22.04
    CMD ["sleep", "infinity"]
    
  4. Buildez et pushez sur le registre gitlab de votre projet.

  5. Créez un fichier ubuntusleep.yaml avec le contenu suivant :

    apiVersion: v1
    kind: Pod
    metadata:
      name: ubuntusleep
    spec:
      containers:
      - name: ubuntusleep
        image: <votre-registre.com>/mon-image:tag
    
  6. Déployez le pod :

    kubectl apply -f ubuntusleep.yaml
    
  7. Constatez vous qu’il y a un problème ? Comment cela est-il indiqué ?

Création d’un secret pour un registre Docker#

Pour permettre à Kubernetes de s’authentifier auprès d’un registre privé, nous devons créer un Secret contenant les identifiants de connexion. La manière la plus simple de le faire est d’utiliser la commande kubectl create secret docker-registry.

Créez le secret en remplaçant les valeurs par les vôtres :

kubectl create secret docker-registry mon-secret-registre --docker-server=<votre-registre.com> --docker-username=<votre-login> --docker-password=<votre-token>  --docker-email=<votre-email> --dry-run=client -o yaml > secret.yaml

Vérifiez le contenu du fichier secret.yaml puis appliquez le.

Utiliser le secret dans un Pod#

Maintenant que le secret est créé, nous pouvons l’utiliser dans la définition d’un Pod (ou d’un Deployment, StatefulSet, etc.) grâce au champ imagePullSecrets.

Voici un exemple de Pod qui utilise une image privée :

apiVersion: v1
kind: Pod
metadata:
  name: ubuntusleep
spec:
  containers:
  - name: ubuntusleep
    image: <votre-registre.com>/mon-image:tag
  imagePullSecrets:
  - name: mon-secret-registre

Testez.

Utilisation dans un helm chart#

Créeons un chart Helm simple pour déployer notre application.

  1. Créez l’arborescence du chart :

    mkdir mon-chart
    cd mon-chart
    mkdir templates
    touch Chart.yaml values.yaml templates/deployment.yaml
    
  2. Remplissez Chart.yaml :

    apiVersion: v2
    name: mon-chart
    description: Un chart Helm pour déployer une application avec une image privée.
    version: 0.1.0
    
  3. Remplissez values.yaml :

    image:
      repository: <votre-registre.com>/mon-image
      pullPolicy: IfNotPresent
      tag: "latest"
    
    imagePullSecret: mon-secret-registre
    
  4. Créez le template templates/deployment.yaml :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mon-deploiement
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mon-app
      template:
        metadata:
          labels:
            app: mon-app
        spec:
          containers:
            - name: mon-app
              image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
              imagePullPolicy: {{ .Values.image.pullPolicy }}
          imagePullSecret:
            - {{ .Values.imagePullSecret }}
    
  5. Déployez le chart

Utilisation dans un helm chart (en utilisant un chart pré-rempli)#

helm create génère un chart beaucoup plus complet. Voyons comment l’adapter.

  1. Créez un nouveau chart :

    helm create monappli
    cd monappli
    
  2. Modifiez values.yaml :

    Le values.yaml généré contient déjà une section image. Modifiez-la et ajoutez la section imagePullSecrets.

    # Extrait de values.yaml
    image:
      repository: <votre-registre.com>/mon-image
      pullPolicy: IfNotPresent
      # Overrides the image tag whose default is the chart appVersion.
      tag: ""
    
    imagePullSecrets: 
     - "mon-secret-registre"
    # ... reste du fichier