Cette rubrique explique comment utiliser Anthos clusters on AWS (GKE sur AWS) avec un dépôt d'images de conteneurs privé, tel que Container Registry (GCR).
Avant de commencer
Avant de commencer à utiliser Anthos clusters on AWS, assurez-vous d'avoir effectué les tâches suivantes :
- Remplissez les conditions préalables.
- Installez un service de gestion.
- Créez un cluster d'utilisateur.
- À partir de votre répertoire
anthos-aws
, utilisezanthos-gke
pour basculer vers le contexte de votre cluster d'utilisateur.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Remplacez CLUSTER_NAME par le nom de votre cluster d'utilisateur. - Créez une image Docker et transmettez-la à Container Registry. Les exemples de cette rubrique utilisent le conteneur
hello-app
, créé lors des étapes de déploiement d'une application en conteneur dans la documentation GKE sur Google Cloud.
Registres de conteneurs privés
Les registres de conteneurs stockent et distribuent des images de conteneurs. Par défaut, votre installation Anthos clusters on AWS peut accéder aux images publiques.
Rechercher des images sur Container 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 qu'il s'authentifie auprès de Container Registry avec Google Cloud CLI :
gcloud auth configure-docker
Google Cloud CLI enregistre un assistant d'identification pour tous les registres Docker compatibles avec Google.
Vérifiez que Container Registry inclut une image avec
docker images
.docker images
Docker se connecte à Container Registry et renvoie les images disponibles dans votre dépôt Container Registry. Par exemple, la réponse suivante affiche une image de conteneur nommée
hello-app
dans le dépôt project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 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 l'accès à Container Registry au compte de service.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Remplacez les éléments suivants :
- project-id par votre projet Google Cloud
- account-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 key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
Remplacez les éléments suivants :
- project-id par votre projet Google Cloud
- account-name par le nom de votre compte de service Google Cloud
Vous êtes maintenant prêt à configurer votre cluster d'utilisateur pour qu'il se connecte à Container Registry.
Définir un secret Kubernetes
Pour fournir la clé d'authentification auprès de Container Registry, enregistrez la clé du compte de service en tant que secret Kubernetes en procédant comme suit :
Utilisez
kubectl
pour créer le secret.env HTTPS_PROXY=http://localhost:8118 \ kubectl create secret docker-registry gcr-secret \ --docker-server=gcr.io \ --docker-username=_json_key \ --docker-email=account-name@project-id.iam.gserviceaccount.com \ --docker-password="$(cat key.json)"
Remplacez les éléments suivants :
- project-id par votre projet Google Cloud
- account-name par le nom de votre compte de service Google Cloud
Supprimez la copie locale de la clé de votre compte de service.
rm 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: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: secret-name
Remplacez les éléments suivants :
- pod-name par le nom de votre pod
- container-name par le nom du conteneur situé dans le pod
- project-id par votre projet Google Cloud
- secret-name par le nom du secret de votre registre
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: gcr.io/project-id/hello-app:v1 imagePullSecrets: - name: gcr-secret
Appliquez la configuration à votre cluster à l'aide de la commande
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
Vérifiez que le pod est en cours d'exécution à l'aide de la commande
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ 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 créer un déploiement de 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: "gcr.io/project-id/hello-app:v1" env: - name: "PORT" value: "50001" imagePullSecrets: - name: gcr-secret
Appliquez la configuration à votre cluster à l'aide de la commande
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
Vérifiez que votre déploiement est en cours d'exécution avec
kubectl pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
La sortie contient trois pods à l'état
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
Étapes suivantes
- Lisez la présentation de Container Registry.