5.4. En utilisant des secrets de tirage d’image
Lorsque vous utilisez le registre d’images OpenShift et que vous tirez des flux d’images situés dans le même projet, alors votre compte de service pod devrait déjà avoir les autorisations correctes et aucune action supplémentaire ne devrait être requise.
Cependant, pour d’autres scénarios, tels que le référencement d’images à travers Red Hat OpenShift Service sur des projets AWS ou à partir de registres sécurisés, des étapes de configuration supplémentaires sont nécessaires.
Il est possible d’obtenir le secret de l’image de Red Hat OpenShift Cluster Manager. Ce secret de traction s’appelle pullSecret.
Ce pull secret vous permet d’authentifier avec les services fournis par les autorités incluses, Quay.io et Registry.redhat.io, qui servent les images de conteneur pour Red Hat OpenShift Service sur les composants AWS.
5.4.1. Autoriser les pods à référencer des images à travers les projets Copier lienLien copié sur presse-papiers!
Lors de l’utilisation du registre d’images OpenShift, pour permettre aux pods dans le projet-a de référencer des images dans le projet-b, un compte de service dans le projet-a doit être lié au rôle système: image-puller dans le projet-b.
Lorsque vous créez un compte de service pod ou un espace de noms, attendez que le compte de service soit fourni avec un secret de traction docker; si vous créez un pod avant que son compte de service ne soit entièrement fourni, le pod ne parvient pas à accéder au registre d’images OpenShift.
Procédure
Afin de permettre aux pods de projet-a de référencer des images dans le projet-b, lier un compte de service dans le projet-a au système: image-puller role in project-b:
$ oc policy add-role-to-user \ system:image-puller system:serviceaccount:project-a:default \ --namespace=project-bAprès avoir ajouté ce rôle, les pods dans le projet - une référence au compte de service par défaut sont capables de tirer des images du projet-b.
Afin de permettre l’accès à n’importe quel compte de service dans le projet-a, utilisez le groupe:
$ oc policy add-role-to-group \ system:image-puller system:serviceaccounts:project-a \ --namespace=project-b
5.4.2. Autoriser les pods à référencer des images d’autres registres sécurisés Copier lienLien copié sur presse-papiers!
Afin de tirer un conteneur sécurisé à partir d’autres registres privés ou sécurisés, vous devez créer un secret de traction à partir des informations d’identification client de votre conteneur, tels que Docker ou Podman, et l’ajouter à votre compte de service.
Docker et Podman utilisent un fichier de configuration pour stocker les détails d’authentification pour se connecter à un registre sécurisé ou non sécurisé:
- Docker: Par défaut, Docker utilise $HOME/.docker/config.json.
- Le Podman: Par défaut, Podman utilise $HOME/.config/containers/auth.json.
Ces fichiers stockent vos informations d’authentification si vous vous êtes déjà connecté à un registre sécurisé ou non sécurisé.
Les fichiers d’identification Docker et Podman ainsi que le secret d’attraction associé peuvent contenir plusieurs références au même registre s’ils ont des chemins uniques, par exemple quay.io et quay.<example_repository> io/. Cependant, ni Docker ni Podman ne prennent en charge plusieurs entrées pour le même chemin de registre.
Exemple de fichier config.json
{
"auths":{
"cloud.openshift.com":{
"auth":"b3Blb=",
"email":"you@example.com"
},
"quay.io":{
"auth":"b3Blb=",
"email":"you@example.com"
},
"quay.io/repository-main":{
"auth":"b3Blb=",
"email":"you@example.com"
}
}
}
Exemple tirer secret
apiVersion: v1
data:
.dockerconfigjson: ewogICAiYXV0aHMiOnsKICAgICAgIm0iOnsKICAgICAgIsKICAgICAgICAgImF1dGgiOiJiM0JsYj0iLAogICAgICAgICAiZW1haWwiOiJ5b3VAZXhhbXBsZS5jb20iCiAgICAgIH0KICAgfQp9Cg==
kind: Secret
metadata:
creationTimestamp: "2021-09-09T19:10:11Z"
name: pull-secret
namespace: default
resourceVersion: "37676"
uid: e2851531-01bc-48ba-878c-de96cfe31020
type: Opaque
5.4.2.1. Créer un secret d’attraction Copier lienLien copié sur presse-papiers!
Procédure
Créer un secret à partir d’un fichier d’authentification existant:
Dans le cas des clients Docker utilisant .docker/config.json, entrez la commande suivante:
$ oc create secret generic <pull_secret_name> \ --from-file=.dockerconfigjson=<path/to/.docker/config.json> \ --type=kubernetes.io/dockerconfigjsonDans le cas des clients Podman utilisant .config/containers/auth.json, entrez la commande suivante:
$ oc create secret generic <pull_secret_name> \ --from-file=<path/to/.config/containers/auth.json> \ --type=kubernetes.io/podmanconfigjson
Lorsque vous n’avez pas déjà un fichier d’identification Docker pour le registre sécurisé, vous pouvez créer un secret en exécutant la commande suivante:
$ oc create secret docker-registry <pull_secret_name> \ --docker-server=<registry_server> \ --docker-username=<user_name> \ --docker-password=<password> \ --docker-email=<email>
5.4.2.2. En utilisant un secret d’attraction dans une charge de travail Copier lienLien copié sur presse-papiers!
Il est possible d’utiliser un pull secret pour permettre aux charges de travail de tirer des images d’un registre privé avec l’une des méthodes suivantes:
- En liant le secret à un compte ServiceAccount, qui applique automatiquement le secret à tous les pods utilisant ce compte de service.
- En définissant imagePullSecrets directement dans les configurations de charge de travail, ce qui est utile pour des environnements comme GitOps ou ArgoCD.
Procédure
Il est possible d’utiliser un secret pour tirer des images pour les pods en ajoutant le secret à votre compte de service. Il est à noter que le nom du compte de service doit correspondre au nom du compte de service utilisé par Pod. Le compte de service par défaut est par défaut.
Entrez la commande suivante pour lier le pull secret à un compte ServiceAccount:
$ oc secrets link default <pull_secret_name> --for=pullAfin de vérifier le changement, entrez la commande suivante:
$ oc get serviceaccount default -o yamlExemple de sortie
apiVersion: v1 imagePullSecrets: - name: default-dockercfg-123456 - name: <pull_secret_name> kind: ServiceAccount metadata: annotations: openshift.io/internal-registry-pull-secret-ref: <internal_registry_pull_secret> creationTimestamp: "2025-03-03T20:07:52Z" name: default namespace: default resourceVersion: "13914" uid: 9f62dd88-110d-4879-9e27-1ffe269poe3 secrets: - name: <pull_secret_name>
Au lieu de lier le secret à un compte de service, vous pouvez alternativement le référencer directement dans votre pod ou la définition de votre charge de travail. Ceci est utile pour les flux de travail GitOps tels que ArgoCD. À titre d’exemple:
Exemple de spécification de pod
apiVersion: v1 kind: Pod metadata: name: <secure_pod_name> spec: containers: - name: <container_name> image: quay.io/my-private-image imagePullSecrets: - name: <pull_secret_name>Exemple de flux de travail ArgoCD
apiVersion: argoproj.io/v1alpha1 kind: Workflow metadata: generateName: <example_workflow> spec: entrypoint: <main_task> imagePullSecrets: - name: <pull_secret_name>
5.4.2.3. Extraction des registres privés avec authentification déléguée Copier lienLien copié sur presse-papiers!
Le registre privé peut déléguer l’authentification à un service distinct. Dans ces cas, les secrets de tirage d’image doivent être définis pour les points de terminaison d’authentification et de registre.
Procédure
Créer un secret pour le serveur d’authentification délégué:
$ oc create secret docker-registry \ --docker-server=sso.redhat.com \ --docker-username=developer@example.com \ --docker-password=******** \ --docker-email=unused \ redhat-connect-sso secret/redhat-connect-ssoCréer un secret pour le registre privé:
$ oc create secret docker-registry \ --docker-server=privateregistry.example.com \ --docker-username=developer@example.com \ --docker-password=******** \ --docker-email=unused \ private-registry secret/private-registry