All’interno dello yaml file di configurazione di un deployment attraverso imagePullSecrets è possibile indicare come reperire le informazioni di accesso al repository remoto da cui effettuare il pull dell’immagine.
Se il repository è privato, infatti, è necessario definire le credenziali che dovranno essere utilizzate per effettuare l’autenticazione.
Nel caso in cui non sia stato definito un imagePullSecrets vengono utilizzate le credenziali di accesso predefinite nel cluster nel namespace generico. Nel caso in cui non siano state definite credenziali, l’accesso al repository avviene senza l’utilizzo di credenziali.
Nella definizione di servizi all’interno di un cluster kubernetes spesso è necessario ricorrere ai namespace per poter raggruppare le varie funzionalità.
Utilizzando il comando kubectl è possibile ottenere la lista delle credenziali memorizzate, utilizzando il comando:
$> kubectl get secrets -n NAMESPACE
Le definizione delle credenziali è specifica per ogni namespace: ciò significa che è necessario impostare le credenziali all’interno di ogni singolo namespace.
Per poter creare le credenziali in uno specifico namespace è necessario utilizzare il comando:
$> kubectl create secret -n NAMESPACE docker-registry --docker-server=REMOTE_DOCKER_REPOSITORY --docker-username=USERNAME --docker-password="$PASSWORD" REGISTRY
facendo particolare attenzione ad inserire la password tra virgolette.
Un esempio di yaml file che utilizza le credenziali definite con il comando precedente:
# Create a deployment. This will deploy our app on multiple nodes. apiVersion: apps/v1 kind: Deployment metadata: name: wordpress-dpl # name of our deployment. namespace: wordpress-demo spec: selector: matchLabels: app: wordpress-demo # we'll deploy to all pods that have this label replicas: 1 # Number of pods to run the app on template: # create pods using pod definition in this template. metadata: labels: app: wordpress-demo # Label of the pods created by this template. spec: containers: - name: wordpress-demo # name of the container image: REPOSITORY_DOCKER/wordpress:latest ports: - containerPort: 80 # port on which the service is running. protocol: TCP env: - name: WORDPRESS_DB_HOST value: REMOTE_DB_HOST - name: WORDPRESS_DB_PASSWORD value: REMOTE_DB_PWD - name: WORDPRESS_DB_NAME value: REMOTE_DB_NAME - name: WORDPRESS_DB_USER value: REMOTE_DB_USER volumeMounts: - name: wordpress-persistent-storage mountPath: /var/www/html/wp-content imagePullSecrets: - name: REGISTRY volumes: - name: wordpress-persistent-storage persistentVolumeClaim: claimName: wordpress-vol