GKE sur AWS permet d'extraire des données des images provenant d'Artifact Registry ou de Container Registry sans avoir à utiliser de secret Kubernetes. Auparavant, il fallait exécuter étapes suivantes:
- Créez un compte de service Google Identity and Access Management (IAM).
- Accorder au compte de service l'autorisation d'accéder au registre privé.
- Télécharger la clé du compte de service et l'enregistrer en tant que secret Kubernetes dans votre cluster.
- Référencer ce secret dans votre fichier manifeste YAML pour les pods ou les déploiements afin qu'ils puissent accéder aux images du dépôt de conteneurs privé.
- Alterner régulièrement et gérer les clés associées au compte de service IAM Google.
GKE sur AWS élimine toutes ces étapes manuelles et gère automatiquement l'authentification et l'autorisation requises pour extraire des images privées.
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.Passez à la version 1.28 de GKE sur AWS pour pouvoir extraire des images privées depuis Artifact Registry ou Container Registry sans avoir à utiliser un secret Kubernetes.
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
Google Cloud CLI 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
surus-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 sur la page Déployer une application en conteneur.
Créer des pods avec des images privées sans secrets d'extraction d'image
Pour créer un pod pouvant accéder à une image de conteneur privée à partir d'un registre, vous n'avez plus besoin de fournir le champ spec.imagePullSecrets
dans la spécification de votre pod. Pour configurer votre pod, procédez comme suit:
Créez une définition de pod sans le champ
spec.imagePullSecrets
:apiVersion: v1 kind: Pod metadata: name: POD_NAME spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
Remplacez les éléments suivants :
POD_NAME
: nom du pod.CONTAINER_NAME
: nom du conteneur situé dans le podLOCATION
: région Google Cloud contenant votre registre. Exemple :us-west1
PROJECT_NAME
: nom du projet Google hébergeant votre dépôt Artifact Registry, qui peut être le même que le projet de votre cluster. Si le dépôt se trouve dans un autre projet, consultez la section Utiliser Artifact Registry lorsqu'il n'est pas dans le même projet que votre cluster pour connaître les étapes supplémentaires.REPOSITORY_NAME
: le nom de votre dépôt.IMAGE_NAME
: nom de l'image.IMAGE_VERSION
: version de l'image.
Appliquez la configuration à votre cluster à l'aide de la commande
kubectl
:kubectl apply -f YAML_FILE_NAME
Remplacez
YAML_FILE_NAME
par le nom de votre fichier YAML .
Exemple de création de pods sans secrets d'extraction d'image
Voici un exemple de création d'un pod Kubernetes sans avoir besoin de secrets d'extraction d'image. Le pod extrait l'image hello-app
d'Artifact Registry.
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
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 des déploiements avec des images privées sans secrets d'extraction d'image
Pour créer un déploiement pouvant accéder à une image de conteneur privée à partir d'un registre, vous n'avez plus besoin de fournir le champ spec.imagePullSecrets
dans votre spécification de déploiement.
Pour configurer votre déploiement, procédez comme suit :
Créez une définition de déploiement sans le champ
spec.imagePullSecrets
:apiVersion: apps/v1 kind: Deployment metadata: name: DEPLOYMENT_NAME spec: replicas: NUMBER_OF_REPLICAS template: spec: containers: - name: CONTAINER_NAME image: LOCATION-docker.pkg.dev/PROJECT_NAME/REPOSITORY_NAME/IMAGE_NAME:IMAGE_VERSION
Remplacez les éléments suivants :
DEPLOYMENT_NAME
: nom de votre déploiement.NUMBER_OF_REPLICAS
: nombre d'instances du pod définies dans le déploiement qui doivent être exécutées à tout moment.CONTAINER_NAME
: nom du conteneur situé dans le podLOCATION
: région Google Cloud contenant votre registre. Exemple :us-west1
PROJECT_NAME
: nom du projet Google hébergeant votre dépôt Artifact Registry, qui peut être différent du projet de votre cluster. Si le dépôt se trouve dans un autre projet, consultez la section Utiliser Artifact Registry lorsqu'il n'est pas dans le même projet que votre cluster pour connaître les étapes supplémentaires.REPOSITORY_NAME
: le nom de votre dépôt.IMAGE_NAME
: nom de l'image.IMAGE_VERSION
: version de l'image.
Appliquez la configuration à votre cluster à l'aide de la commande
kubectl
.kubectl apply -f name-of-your-yaml-file.yaml
Exemple de création d'un déploiement sans secrets d'extraction d'image
Voici un exemple de création d'un déploiement sans secrets d'extraction d'image. Le déploiement extrait une image hello-app
d'Artifact Registry.
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"
Remplacez les éléments suivants :
LOCATION
: région Google Cloud contenant votre registre. Exemple :us-west1
PROJECT_NAME
: nom du projet Google hébergeant votre dépôt Artifact Registry, qui peut être différent du projet de votre cluster. Si le dépôt se trouve dans un autre projet, consultez la section Utiliser Artifact Registry lorsqu'il n'est pas dans le même projet que votre cluster pour connaître les étapes supplémentaires.
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
Utiliser Artifact Registry lorsqu'il ne se trouve pas dans le même projet que votre cluster
Pour utiliser un dépôt Artifact Registry se trouvant dans un projet Google différent du projet contenant votre cluster, procédez comme suit:
Attribuez les autorisations nécessaires pour accéder à ce registre au compte de service des instances de machine virtuelle du pool de nœuds de votre cluster, connu sous le nom de Agent de service de machine de pool de nœuds.
gcloud projects add-iam-policy-binding AR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Cette étape permet de s'assurer que votre cluster peut récupérer des artefacts à partir du registre de ce projet distinct.
Remplacez les éléments suivants :
AR_PROJECT_ID
: ID du projet Google hébergeant le registre d'artefacts.NODE_POOL_MACHINE_SERVICE_AGENT
: compte de service du pool de nœuds de votre cluster, au format suivant :service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
ROLE
: le rôleroles/artifactregistry.reader
ou un rôle personnalisé qui accorde des autorisations suffisantes pour accéder aux images dans le dépôt Artifact Registry.
Utiliser Google Container Registry privé
Pour intégrer un registre Google Container Registry privé à votre solution GKE sur AWS quel que soit l'emplacement de son projet Google, procédez comme suit:
Autorisez l'agent de service de machine de pool de nœuds, le compte de service des instances de machine virtuelle du pool de nœuds de votre cluster, à accéder à Container Registry :
gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Cette étape permet au compte de service du cluster d'accéder aux images de conteneur privé.
Remplacez les éléments suivants :
GCR_PROJECT_ID
: ID du projet hébergeant Container Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: compte de service de pool de nœuds, au formatservice-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
ROLE
: sélectionnezstorage.objectViewer
ou un rôle personnalisé pour un accès suffisant à Container Registry. Faites attention à l'accès étendu avecstorage.objectViewer
.
Effectuer un nettoyage
Pour supprimer les ressources que vous avez créées sur cette page, exécutez les commandes suivantes :
kubectl apply -f POD_YAML_FILE
kubectl delete -f DEPLOYMENT_YAML_FILE
Remplacez les éléments suivants :
POD_YAML_FILE
: nom du fichier YAML dans lequel vous avez défini le pod.DEPLOYMENT_YAML_FILE
: nom du fichier YAML dans lequel vous avez défini le déploiement.
Étapes suivantes
- Consultez la page Présentation d'Artifact Registry.