Utiliser un registre d'images privé
Votre installation GKE sur Azure peut accéder aux images de conteneurs publiques par défaut. Cet article explique comment utiliser GKE sur Azure avec un dépôt d'images de conteneurs privé, tel qu'Artifact Registry.
Avant de commencer
Pour effectuer les étapes décrites sur cette page, procédez comme suit :
- Créez un cluster.
- Créez un pool de nœuds.
Créez une image Docker et transmettez-la à Artifact Registry. Les exemples de cette page utilisent le conteneur
hello-app
. Pour créer ce conteneur, suivez les instructions des sections Créer une image de conteneur et Transférer l'image Docker dans Artifact Registry de la documentation GKE sur Google Cloud.
Rechercher des images sur Artifact Registry
Pour effectuer les étapes restantes, vous devez disposer d'une image de conteneur. Récupérez le nom de vos images de conteneur en procédant comme suit :
Configurez l'outil de ligne de commande Docker pour vous authentifier auprès d'Artifact Registry avec Google Cloud SDK :
gcloud auth configure-docker
L'outil de ligne de commande
gcloud
enregistre un assistant d'identification pour tous les registres Docker compatibles avec Google.Vérifiez qu'Artifact Registry inclut une image en exécutant la commande
docker images
.docker images
Docker se connecte à Artifact Registry et renvoie les images disponibles dans votre dépôt. Par exemple, la réponse suivante affiche une image de conteneur nommée
hello-app
dans le dépôtPROJECT_NAME
dansus-west1-docker.pkg.dev
.REPOSITORY TAG IMAGE ID CREATED SIZE us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app v1 f7cfe0d58569 21 minutes ago 11.5MB
Si vous n'avez pas d'image de conteneur prête à l'emploi, créez-en une en suivant les étapes décrites dans la page Déployer une application en conteneur.
Créer un compte de service
Vos clusters d'utilisateur s'authentifient à l'aide d'un compte de service IAM (Identity and Access Management).
Pour créer un compte de service, procédez comme suit :
Créez un compte de service IAM avec Google Cloud CLI.
gcloud iam service-accounts create ACCOUNT_NAME
Remplacez ACCOUNT_NAME par le nom du nouveau compte de service Google Cloud.
Accordez au compte de service des autorisations Artifact Registry.
gcloud projects add-iam-policy-binding PROJECT_NAME \ --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --role roles/artifactregistry.reader
Remplacez les éléments suivants :
PROJECT_NAME
par votre projet Google CloudACCOUNT_NAME
par le nom de votre compte de service Google Cloud
Téléchargez la clé du compte de service.
gcloud iam service-accounts keys create registry-access-key.json \ --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
Remplacez les éléments suivants :
PROJECT_NAME
ACCOUNT_NAME
Vous êtes maintenant prêt à configurer votre cluster d'utilisateur pour qu'il se connecte à Artifact Registry.
Enregistrer la clé dans un cluster
Pour fournir la clé d'authentification sur Artifact Registry, enregistrez la clé du compte de service en tant que secret Kubernetes comme suit :
Utilisez
kubectl
pour créer le secret.kubectl create secret docker-registry registry-secret \ --docker-server=LOCATION-docker.pkg.dev \ --docker-username=_json_key \ --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \ --docker-password="$(cat registry-access-key.json)"
Remplacez les éléments suivants :
LOCATION
: emplacement régional ou multirégional du dépôt.PROJECT_NAME
ACCOUNT_NAME
Supprimez la copie locale de la clé de votre compte de service.
rm registry-access-key.json
Vous pouvez désormais faire référence à ce secret dans vos charges de travail.
Créer une charge de travail avec une image privée
Pour utiliser une image provenant d'un dépôt de conteneurs privé avec une charge de travail, définissez le champ spec.imagePullSecrets
sur votre nom de secret. Ce champ se trouve à des emplacements différents pour les pods et les déploiements.
Créer un pod
Pour créer un pod pouvant accéder au registre de conteneurs, définissez le champ spec.imagePullSecrets
sur le nom de votre secret.
Créez un pod qui spécifie
spec.imagePullSecrets
.apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
Remplacez les éléments suivants :
POD_NAME
: nom de votre podCONTAINER_NAME
: nom du conteneur situé dans le podLOCATION
PROJECT_NAME
Par exemple, pour extraire l'image
hello-app
, copiez le fichier YAML suivant dans un fichier nomméhello-pod.yaml
.apiVersion: v1 kind: Pod metadata: name: hello-pod spec: containers: - name: hello-container image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1 imagePullSecrets: - name: registry-secret
Appliquez la configuration à votre cluster à l'aide de la commande
kubectl
.kubectl apply -f hello-pod.yaml
Vérifiez que le pod est en cours d'exécution à l'aide de la commande
kubectl get
.kubectl get pod/hello-pod
La réponse inclut un pod dont l'état est
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Créer un déploiement
Pour utiliser un dépôt privé dans un déploiement, spécifiez l'élément
imagePullSecret
dans le modèle.Par exemple, pour configurer un déploiement qui utilise l'image
hello-app
, créez un fichier nomméhello-deployment.yaml
avec le contenu suivant :apiVersion: apps/v1 kind: Deployment metadata: name: hello-app-deployment spec: selector: matchLabels: app: products department: sales replicas: 3 template: metadata: labels: app: products department: sales spec: containers: - name: hello image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1 env: - name: "PORT" value: "50001" imagePullSecrets: - name: registry-secret
Remplacez les éléments suivants :
LOCATION
PROJECT_NAME
Appliquez la configuration à votre cluster à l'aide de la commande
kubectl
.kubectl apply -f hello-deployment.yaml
Vérifiez que votre déploiement est en cours d'exécution avec
kubectl pods
.kubectl get pods --selector=app=products
Le résultat affiche trois pods
Running
.NAME READY STATUS RESTARTS AGE hello-app-deployment-67d9c6d98c-b69f2 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-d6k5c 1/1 Running 0 14m hello-app-deployment-67d9c6d98c-p2md5 1/1 Running 0 14m
Effectuer un nettoyage
Pour supprimer les ressources que vous avez créées sur cette page, exécutez les commandes suivantes :
kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml
Étape suivante
- Consultez la page Présentation d'Artifact Registry.