GKE su AWS offre un modo per estrarre le immagini private da Artifact Registry o Container Registry senza dover utilizzare un segreto Kubernetes. In precedenza, era necessario eseguire i seguenti passaggi:
- Crea un account di servizio Google Identity and Access Management (IAM).
- Concedi all'account di servizio le autorizzazioni per accedere al registry privato.
- Scarica la chiave dell'account di servizio e salvala come secret Kubernetes nel cluster.
- Fai riferimento a questo secret nel manifest YAML per i pod o i deployment in modo che possano accedere alle immagini dal repository di container privato.
- Ruota e gestisci regolarmente le chiavi associate all'account di servizio Google IAM.
GKE su AWS elimina tutti questi passaggi manuali e gestisce automaticamente l'autenticazione e l'autorizzazione necessarie per estrarre le immagini private.
Prima di iniziare
Per eseguire i passaggi in questa pagina, completa prima quanto segue:
- Crea un cluster.
- Crea un pool di nodi.
Crea un'immagine Docker ed eseguirne il push su Artifact Registry. Gli esempi in questa pagina utilizzano il contenitore
hello-app
. Per creare questo contenitore, segui i passaggi per creare un'immagine container e eseguire il push dell'immagine Docker in Artifact Registry, che fanno parte della documentazione di GKE su Google Cloud .Esegui l'upgrade alla versione 1.28 di GKE su AWS in modo da poter estrarre le immagini private da Artifact Registry o Container Registry senza dover utilizzare un segreto Kubernetes.
Cerca le immagini su Artifact Registry
Per completare il resto di questi passaggi, devi avere un'immagine contenitore. Per ottenere il nome delle immagini del container, segui questi passaggi:
Configura lo strumento a riga di comando Docker per eseguire l'autenticazione su Artifact Registry con Google Cloud SDK:
gcloud auth configure-docker
La CLI Google Cloud registra un assistente per le credenziali per tutti i registry Docker supportati da Google.
Verifica che Artifact Registry includa un'immagine con il comando
docker images
:docker images
Docker si connette ad Artifact Registry e restituisce le immagini disponibili nel repository. Ad esempio, la seguente risposta mostra un'immagine contenitore denominata
hello-app
nel repositoryPROJECT_NAME
suus-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
Se non hai un'immagine contenitore pronta, creane una seguendo i passaggi descritti in Eseguire il deployment di un'applicazione containerizzata.
Creare pod con immagini private senza segreti per il recupero delle immagini
Per creare un pod che possa accedere a un'immagine container privata da un registry, non è più necessario fornire il campo spec.imagePullSecrets
nella specifica del pod. Per configurare il pod:
Crea una definizione di pod senza il campo
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
Sostituisci quanto segue:
POD_NAME
: il nome del pod.CONTAINER_NAME
: il nome del contenitore all'interno del pod.LOCATION
: la Google Cloud regione che contiene il tuo registry. Ad esempio:us-west1
.PROJECT_NAME
: il nome del progetto Google che ospita il repository Artifact Registry, che potrebbe essere uguale al progetto del tuo cluster. Se il repository si trova in un progetto diverso, consulta Utilizzare Artifact Registry quando non si trova nello stesso progetto del cluster per ulteriori passaggi.REPOSITORY_NAME
: il nome del tuo repository.IMAGE_NAME
: il nome dell'immagine.IMAGE_VERSION
: la versione dell'immagine.
Applica la configurazione al cluster con
kubectl
:kubectl apply -f YAML_FILE_NAME
Sostituisci
YAML_FILE_NAME
con il nome del file YAML.
Esempio di creazione di pod senza secret per il recupero delle immagini
Di seguito è riportato un esempio di creazione di un pod Kubernetes senza dover usare i secret per il pull delle immagini. Il pod estrae l'immagine hello-app
da
Artifact Registry.
Per estrarre l'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: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1
Applica la configurazione al cluster con
kubectl
:kubectl apply -f hello-pod.yaml
Verifica che il pod sia in esecuzione con
kubectl get
: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
Creare i deployment con immagini private senza segreti per il recupero delle immagini
Per creare un
deployment
che può accedere a un'immagine container privata da un registry, non è più necessario fornire il campo spec.imagePullSecrets
nella specifica del deployment.
Per configurare il deployment:
Crea una definizione di deployment senza il campo
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
Sostituisci quanto segue:
DEPLOYMENT_NAME
: il nome del deployment.NUMBER_OF_REPLICAS
: il numero di istanze del pod definito nel deployment che devono essere in esecuzione in un determinato momento.CONTAINER_NAME
: il nome del contenitore all'interno del pod.LOCATION
: la Google Cloud regione che contiene il tuo registry. Ad esempio:us-west1
.PROJECT_NAME
: il nome del progetto Google che ospita il repository Artifact Registry, che potrebbe non corrispondere a quello del progetto del cluster. Se il repository si trova in un progetto diverso, consulta Utilizzare Artifact Registry quando non si trova nello stesso progetto del cluster per ulteriori passaggi.REPOSITORY_NAME
: il nome del tuo repository.IMAGE_NAME
: il nome dell'immagine.IMAGE_VERSION
: la versione dell'immagine.
Applica la configurazione al cluster con
kubectl
.kubectl apply -f name-of-your-yaml-file.yaml
Esempio di creazione di un deployment senza segreti per il recupero delle immagini
Ecco un esempio di creazione di un deployment senza segreti per il recupero delle immagini. Il deployment estrae un'immagine hello-app
da Artifact Registry.
Crea un file denominato
hello-deployment.yaml
con i seguenti contenuti: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"
Sostituisci quanto segue:
LOCATION
: la Google Cloud regione che contiene il tuo registry. Ad esempio:us-west1
.PROJECT_NAME
: il nome del progetto Google che ospita il repository Artifact Registry, che potrebbe non corrispondere a quello del progetto del cluster. Se il repository si trova in un progetto diverso, consulta Utilizzare Artifact Registry quando non si trova nello stesso progetto del cluster per ulteriori passaggi.
Applica la configurazione al cluster con
kubectl
.kubectl apply -f hello-deployment.yaml
Verifica che il deployment sia in esecuzione con
kubectl pods
.kubectl get pods --selector=app=products
L'output mostra 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
Utilizzare Artifact Registry quando non si trova nello stesso progetto del cluster
Per utilizzare un repository Artifact Registry in un progetto Google diverso da quello contenente il cluster, svolgi i seguenti passaggi:
Concedi all'account di servizio per le istanze di macchine virtuali del pool di nodi del tuo cluster, noto come agente di servizio macchina del pool di nodi, le autorizzazioni necessarie per accedere a questo registry.
gcloud projects add-iam-policy-binding AR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Questo passaggio garantisce che il cluster possa recuperare gli elementi dal registry nel progetto distinto.
Sostituisci quanto segue:
AR_PROJECT_ID
: l'ID del progetto Google che ospita Artifact Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: l'account servizio per il pool di nodi del tuo cluster, che ha il seguente formato:service-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
ROLE
: il ruoloroles/artifactregistry.reader
o un ruolo personalizzato che concede autorizzazioni sufficienti per accedere alle immagini nel repository Artifact Registry.
Utilizzare Google Container Registry privato
Per integrare un registry Google Container privato con il tuo cluster GKE su AWS, indipendentemente dalla posizione del progetto Google, segui questi passaggi:
Consenti all'agente di servizio della macchina del node pool, l'account di servizio per le istanze di macchine virtuali del pool di nodi del tuo cluster, di accedere al Container Registry:
gcloud projects add-iam-policy-binding GCR_PROJECT_ID \
--member=NODE_POOL_MACHINE_SERVICE_AGENT \
--role=ROLE
Questo passaggio consente all'account di servizio del cluster di accedere alle immagini dei contenitori privati.
Sostituisci quanto segue:
GCR_PROJECT_ID
: l'ID del progetto che ospita il Container Registry.NODE_POOL_MACHINE_SERVICE_AGENT
: l'account di servizio del pool di nodi, nel formatoservice-CLUSTER_RESOURCE_PROJECT_NUMBER@gcp-sa-gkemulticloudnpmachine.iam.gserviceaccount.com
.ROLE
: sceglistorage.objectViewer
o un ruolo personalizzato per un accesso sufficiente a Container Registry. Fai attenzione all'accesso ampio constorage.objectViewer
.
Esegui la pulizia
Per rimuovere le risorse create in questa pagina, esegui questi comandi:
kubectl apply -f POD_YAML_FILE
kubectl delete -f DEPLOYMENT_YAML_FILE
Sostituisci quanto segue:
POD_YAML_FILE
: il nome del file YAML in cui hai definito il pod.DEPLOYMENT_YAML_FILE
: il nome del file YAML in cui hai definito il deployment.
Passaggi successivi
- Leggi la panoramica di Artifact Registry.