Questo argomento descrive come utilizzare GKE su AWS con un repository di immagini container privato, come Container Registry (GCR).
Prima di iniziare
Prima di iniziare a utilizzare GKE su AWS, assicurati di aver eseguito le seguenti attività:
- Completa i prerequisiti.
- Installa un servizio di gestione.
- Crea un cluster utente.
- Dalla directory
anthos-aws
, utilizzaanthos-gke
per cambiare contesto al cluster utente.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
Sostituisci CLUSTER_NAME con il nome del tuo cluster utente. - Avere un'immagine Docker creata e sottoposta a push su Container Registry. Gli esempi in questo argomento utilizzano il container
hello-app
, creato con i passaggi del deployment di un'applicazione containerizzata nella documentazione di GKE su Google Cloud.
Registri di container privati
Un Container Registry archivia e distribuisce le immagini container. La tua installazione di GKE su AWS può accedere alle immagini pubbliche per impostazione predefinita.
Cerca immagini su Container Registry
Per completare gli altri passaggi, è necessaria un'immagine container. Per recuperare il nome delle immagini container, segui questi passaggi:
Configura lo strumento a riga di comando Docker per l'autenticazione in Container Registry con Google Cloud CLI:
gcloud auth configure-docker
Google Cloud CLI registra un helper per le credenziali per tutti i registry Docker supportati da Google.
Verifica che il tuo Container Registry includa un'immagine con
docker images
.docker images
Docker si connette a Container Registry e restituisce le immagini disponibili nel repository di Container Registry. Ad esempio, la risposta seguente mostra un'immagine container denominata
hello-app
nel repository project-id.REPOSITORY TAG IMAGE ID CREATED SIZE gcr.io/project-id/hello-app v1 732f02cea7cb 12 minutes ago 11.5MB
Se non hai un'immagine container pronta, creane una seguendo la procedura descritta in Deployment di un'applicazione containerizzata.
Creare un account di servizio
I cluster utente vengono autenticati utilizzando un account di servizio Identity and Access Management (IAM).
Per creare un nuovo account di servizio:
Crea un account di servizio IAM con Google Cloud CLI.
gcloud iam service-accounts create account-name
Sostituisci account-name con il nome del nuovo account di servizio Google Cloud.
Concedi all'account di servizio l'accesso a Container Registry.
gcloud projects add-iam-policy-binding project-id \ --member serviceAccount:account-name@project-id.iam.gserviceaccount.com \ --role roles/storage.objectViewer
Sostituisci quanto segue:
- project-id con il tuo progetto Google Cloud
- account-name con il nome dell'account di servizio Google Cloud
Scarica la chiave dell'account di servizio dell'account.
gcloud iam service-accounts keys create key.json \ --iam-account account-name@project-id.iam.gserviceaccount.com
Sostituisci quanto segue:
- project-id con il tuo progetto Google Cloud
- account-name con il nome dell'account di servizio Google Cloud
Ora è tutto pronto per configurare il cluster utente per la connessione a Container Registry.
Definisci un secret di Kubernetes
Per fornire la chiave per l'autenticazione in Container Registry, salva la chiave dell'account di servizio come Secret di Kubernetes seguendo questi passaggi:
Utilizza
kubectl
per creare il 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)"
Sostituisci quanto segue:
- project-id con il tuo progetto Google Cloud
- account-name con il nome dell'account di servizio Google Cloud
Elimina la copia locale della chiave dell'account di servizio.
rm key.json
Ora puoi fare riferimento a questo secret nei tuoi carichi di lavoro.
Crea un carico di lavoro con un'immagine privata
Per utilizzare un'immagine da un repository di container privato con un carico di lavoro, imposta il campo spec.imagePullSecrets
sul nome del secret. Questo campo si trova in posizioni diverse per i pod e i deployment.
Creazione di un pod
Per creare un pod in grado di accedere al Container Registry, imposta il campo spec.imagePullSecrets
sul nome del secret.
Crea un pod che specifichi
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
Sostituisci quanto segue:
- pod-name con il nome del pod
- container-name con il nome del container all'interno del pod
- project-id con il tuo progetto Google Cloud
- secret-name con il nome del secret di registry
Ad esempio, per eseguire il pull dell'immagine
hello-app
, copia il seguente codice YAML in un file denominatohello-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
Applica la configurazione al cluster con
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-pod.yaml
Verifica che il pod sia in esecuzione con
kubectl get
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pod/hello-pod
La risposta include un pod con stato
Running
.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
Creazione di un deployment
Per utilizzare un repository privato in un deployment, devi specificare
imagePullSecret
all'interno del modello.Ad esempio, per creare un Deployment dell'immagine
hello-app
, crea un file denominatohello-deployment.yaml
con il seguente contenuto: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
Applica la configurazione al cluster con
kubectl
.env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f hello-deployment.yaml
Verifica che il deployment sia in esecuzione con
kubectl pods
.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods --selector=app=products
L'output contiene tre pod
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
Passaggi successivi
- Leggi la panoramica di Container Registry.