Un cluster condiviso in Google Distributed Cloud (GDC) con air gap consente di eseguire applicazioni containerizzate in domini in errore isolati all'interno della tua organizzazione. Dopo averne collegato uno a un progetto, puoi gestire i workload all'interno di uno spazio dei nomi dedicato. In questo tutorial configurerai un registry Harbor gestito, eseguirai il push di un'immagine NGINX di esempio da Docker Hub ed eseguirai il deployment del server web.
Questo flusso di lavoro è destinato agli sviluppatori del gruppo di operatori di applicazioni che creano workload per la propria organizzazione. Per saperne di più, consulta la documentazione relativa ai segmenti di pubblico per GDC con air gap.
Obiettivi
- Crea un registry Harbor gestito.
- Eseguire il push di un'immagine container nel registry Harbor gestito.
- Creare un cluster Kubernetes condiviso.
- Eseguire il deployment dell'app container di esempio nel cluster.
Costi
Poiché GDC è progettato per l'esecuzione in un data center con air gap, i processi e le informazioni di fatturazione sono limitati solo al deployment di GDC e non sono gestiti da altri prodotti Google.
Per generare una stima dei costi in base all'utilizzo previsto, utilizza il calcolatore prezzi.
Utilizza la dashboard Costo previsto per anticipare i costi futuri degli SKU per le tue fatture.
Per monitorare il consumo di spazio di archiviazione e computing, utilizza le dashboard di utilizzo della fatturazione.
Prima di iniziare
Per completare le attività descritte in questo documento, devi richiedere le autorizzazioni necessarie e preparare l'ambiente.
Collabora con il team dell'infrastruttura e gli amministratori per trasferire il file binario dell'applicazione alla workstation con air gap o esegui questo tutorial direttamente sul server di integrazione continua e distribuzione continua (CI/CD).
Richiedi ruoli IAM
Per ottenere le autorizzazioni necessarie per completare questo flusso di lavoro del tutorial, devi disporre di ruoli specifici. Devi richiedere ruoli con ambito limitato al progetto e all'organizzazione.
Ruoli organizzazione
Per creare, eliminare, modificare o visualizzare un cluster Kubernetes condiviso, chiedi all'amministratore dell'organizzazione IAM di concederti il ruolo Amministratore cluster utente (user-cluster-admin). Questo ruolo non è associato a uno spazio dei nomi.
Se non disponi delle autorizzazioni per creare un cluster condiviso, chiedi all'amministratore della piattaforma di crearne uno per te.
Ruoli del progetto
Chiedi all'amministratore del progetto IAM di concederti i seguenti ruoli nello spazio dei nomi del progetto in base all'attività da eseguire:
Namespace Admin (
namepspace-admin): crea, elimina, modifica e visualizza le risorse del progetto. Questo ruolo è necessario per eseguire il deployment dei workload dei container nel tuo progetto.Amministratore istanza Harbor (
harbor-instance-admin): crea, elimina, modifica e visualizza le risorse Harbor, incluse le istanze Harbor.Visualizzatore istanze Harbor (
harbor-instance-viewer): visualizza e seleziona un'istanza Harbor.Harbor Project Creator (
harbor-project-creator): crea e visualizza i progetti Harbor.
prepara l'ambiente
Per completare questo documento, devi disporre delle seguenti risorse:
Assicurati di avere un progetto per gestire i deployment containerizzati. Crea un progetto se non ne hai uno.
Imposta lo spazio dei nomi del progetto come variabile di ambiente:
export NAMESPACE=PROJECT_NAMESPACEAccedi al server API di gestione a livello di zona e genera il relativo file kubeconfig con un'identità utente. Imposta il percorso kubeconfig come variabile di ambiente:
export MANAGEMENT_API_SERVER=MANAGEMENT_API_SERVER_KUBECONFIG_PATH
Crea un registry Harbor gestito
GDC con air gap fornisce Harbor as a Service, un servizio completamente gestito che ti consente di archiviare e gestire le immagini container utilizzando Harbor.
Per utilizzare Harbor as a Service, devi prima creare un'istanza del registry Harbor e un progetto Harbor.
Crea un'istanza del registry Harbor
Per creare un'istanza del registro dei container Harbor, completa i seguenti passaggi:
Console
Nel menu di navigazione, seleziona Harbor Container Registry dalla sezione CI/CD.
Seleziona la zona in cui creare l'istanza Harbor. Un'istanza Harbor è una risorsa di zona e deve essere creata manualmente in ogni zona per garantire l'alta affidabilità.
Fai clic su Crea istanza.
Inserisci il nome dell'istanza e accetta i Termini di servizio di Harbor Managed.
Fai clic su Crea istanza.
Verifica che la nuova istanza Harbor esista nella sezione Istanza Harbor.
Fai clic sul link esterno Vai all'istanza Harbor e prendi nota dell'URL dell'istanza. Ad esempio, il formato dell'URL dell'istanza è simile a
harbor-1.org-1.zone1.google.gdc.test. L'URL dell'istanza non deve includere il prefissohttps://.Imposta l'URL dell'istanza come variabile da utilizzare in un secondo momento nel tutorial:
export INSTANCE_URL=INSTANCE_URLSostituisci INSTANCE_URL con l'URL dell'istanza del registry Harbor.
Ad esempio:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
gdcloud
Crea la nuova istanza del registro dei container Harbor:
gdcloud harbor instances create INSTANCE_NAME \ --project=PROJECT \Sostituisci quanto segue:
INSTANCE_NAME: il nome dell'istanza Harbor.PROJECT: il nome del progetto GDC.
Elenca l'URL dell'istanza:
gdcloud harbor instances describe INSTANCE_NAME \ --project=PROJECTL'output è simile al seguente:
# Several lines of code are omitted here. status: url: https://harbor-1.org-1.zone1.google.gdc.testImposta l'URL dell'istanza come variabile da utilizzare in un secondo momento nel tutorial:
export INSTANCE_URL=INSTANCE_URLSostituisci INSTANCE_URL con l'URL dell'istanza del registry Harbor. Assicurati che l'URL dell'istanza non includa il prefisso
https://.Ad esempio:
export INSTANCE_URL=harbor-1.org-1.zone1.google.gdc.test
Crea un progetto Harbor nel registry
Per gestire le immagini container, devi creare un progetto Harbor all'interno dell'istanza del registry Harbor:
Console
Fai clic su Crea un progetto Harbor nella pagina Harbor Container Registry.
Inserisci il nome del progetto.
Fai clic su Crea.
Imposta il nome del progetto Harbor come variabile da utilizzare in seguito nel tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
gdcloud
Crea il nuovo progetto Harbor:
gdcloud harbor harbor-projects create HARBOR_PROJECT \ --project=PROJECT \ --instance=INSTANCE_NAMESostituisci quanto segue:
HARBOR_PROJECT: il nome del progetto Harbor da creare.PROJECT: il nome del progetto GDC.INSTANCE_NAME: il nome dell'istanza Harbor.
Imposta il nome del progetto Harbor come variabile da utilizzare in un secondo momento nel tutorial:
export HARBOR_PROJECT=HARBOR_PROJECT
Configura Docker
Per utilizzare Docker nel registry Harbor, completa i seguenti passaggi:
Configura Docker in modo che consideri attendibile Harbor as a Service. Per saperne di più, consulta Configura Docker per considerare attendibile la CA root di Harbor.
Configura l'autenticazione Docker su Harbor. Per saperne di più, consulta Configura l'autenticazione Docker per le istanze del registry Harbor.
Crea un secret di pull dell'immagine Kubernetes
Poiché utilizzi un progetto Harbor privato, devi creare un secret di pull dell'immagine Kubernetes.
Aggiungi un account robot del progetto Harbor da utilizzare come account di servizio.
Nella console Harbor, seleziona il tuo progetto Harbor.
Fai clic su Robot Accounts (Account robot).
Seleziona New Robot Account (Nuovo account robot).
Assegna un nome al nuovo account robot e definisci eventuali impostazioni aggiuntive.
Fai clic su Aggiungi.
Il nome e il secret dell'account robot vengono visualizzati nella schermata di conferma. Tieni aperta questa schermata come riferimento per il passaggio successivo.
Per saperne di più, consulta la documentazione di Harbor: https://goharbor.io/docs/2.8.0/working-with-projects/project-configuration/create-robot-accounts/#add-a-robot-account.
In una nuova finestra del terminale, accedi a Docker con l'account robot del progetto Harbor e il token secret:
docker login ${INSTANCE_URL}Quando richiesto, inserisci il nome del progetto del robot per il Nome utente e il token secret per la Password forniti nel passaggio precedente dalla schermata di esito positivo della console Harbor.
Imposta un nome arbitrario per il secret di pull dell'immagine:
export SECRET=SECRETCrea il secret necessario per il pull dell'immagine:
kubectl create secret docker-registry ${SECRET} \ --from-file=.dockerconfigjson=DOCKER_CONFIG \ -n ${NAMESPACE}Sostituisci
DOCKER_CONFIGcon il percorso del file.docker/config.json.Verifica che il secret esista nello spazio dei nomi del progetto GDC:
kubectl get secrets -n ${NAMESPACE}L'output è simile al seguente:
NAME TYPE DATA AGE my-secret kubernetes.io/dockerconfigjson 1 23s
Esegui il push dell'immagine container nel registry Harbor gestito
Per questo tutorial, scaricherai l'immagine del server web nginx e ne eseguirai il push al registry Harbor gestito, quindi la utilizzerai per eseguire il deployment di un'app server web nginx di esempio in un cluster Kubernetes condiviso. L'app del server web nginx è disponibile nel repository pubblico Docker Hub.
Esegui il pull dell'immagine
nginxda Docker Hub alla tua workstation locale utilizzando una rete esterna:docker pull nginxTagga l'immagine locale con il nome del repository:
docker tag nginx ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25Esegui il push dell'immagine container
nginxnel tuo registry Harbor gestito:docker push ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25
Crea un cluster Kubernetes
Ora che l'immagine container nginx è archiviata nel registry Harbor gestito e puoi accedervi, crea un cluster Kubernetes condiviso per eseguire il server web nginx.
Console
Nel menu di navigazione, seleziona Kubernetes Engine > Cluster.
Fai clic su Crea cluster.
Nel campo Nome, specifica un nome per il cluster.
Seleziona la zona in cui creare il cluster Kubernetes. Un cluster Kubernetes è una risorsa di zona e deve essere creato manualmente in ogni zona per garantire l'alta affidabilità.
Fai clic su Collega progetto e seleziona un progetto da collegare al cluster. Quindi, fai clic su Salva.
Fai clic su Crea.
Attendi che il cluster venga creato. Quando il cluster è disponibile per l'utilizzo, accanto al nome del cluster viene visualizzato lo stato
READY.
API
Crea una risorsa personalizzata
Clustere salvala come file YAML, ad esempiocluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: platformSostituisci il valore
CLUSTER_NAMEcon il nome del cluster.Applica la risorsa personalizzata alla tua istanza GDC:
kubectl create -f cluster.yaml --kubeconfig ${MANAGEMENT_API_SERVER}Collega un progetto al tuo cluster Kubernetes utilizzando la console GDC. Al momento non puoi collegare un progetto al cluster utilizzando l'API.
Per saperne di più sulla creazione di un cluster Kubernetes condiviso, consulta Crea un cluster condiviso. Per saperne di più sulle opzioni di configurazione del cluster disponibili, consulta Configurazioni dei cluster Kubernetes.
Esegui il deployment dell'app container di esempio
Ora puoi eseguire il deployment dell'immagine container nginx nel tuo cluster Kubernetes.
Kubernetes rappresenta le applicazioni come risorse Pod, ovvero unità scalabili che includono uno o più container. Il pod è l'unità più piccola di cui è possibile eseguire il deployment in Kubernetes. In genere, i pod vengono distribuiti come un insieme di repliche che possono essere scalate e distribuite insieme nel cluster. Uno dei modi per eseguire il deployment di un set di repliche è utilizzare un Deployment Kubernetes.
In questa sezione, creerai un Deployment Kubernetes per eseguire l'app container nginx sul tuo cluster. Questo deployment ha delle repliche o pod. Un pod Deployment include un solo container: l'immagine container nginx. Inoltre, crei una risorsa Service che fornisce ai client un modo stabile per inviare richieste ai pod del tuo Deployment.
Esegui il deployment del server web nginx nel tuo cluster Kubernetes:
Accedi al cluster Kubernetes e genera il relativo file kubeconfig con un'identità utente. Imposta il percorso kubeconfig come variabile di ambiente:
export KUBECONFIG=CLUSTER_KUBECONFIG_PATHCrea ed esegui il deployment delle risorse personalizzate
DeploymenteServicedi Kubernetes:kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: ${INSTANCE_URL}/${HARBOR_PROJECT}/nginx:1.25 ports: - containerPort: 80 imagePullSecrets: - name: ${SECRET} --- apiVersion: v1 kind: Service metadata: name: nginx-service spec: selector: app: nginx ports: - port: 80 protocol: TCP type: LoadBalancer EOFVerifica che i pod siano stati creati dal deployment:
kubectl get pods -l app=nginx -n ${NAMESPACE}L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE nginx-deployment-1882529037-6p4mt 1/1 Running 0 1h nginx-deployment-1882529037-p29za 1/1 Running 0 1h nginx-deployment-1882529037-s0cmt 1/1 Running 0 1hCrea una policy di rete per consentire tutto il traffico di rete verso lo spazio dei nomi:
kubectl --kubeconfig ${KUBECONFIG} -n ${NAMESPACE} \ create -f - <<EOF apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: annotations: name: allow-all spec: ingress: - from: - ipBlock: cidr: 0.0.0.0/0 podSelector: {} policyTypes: - Ingress EOFEsporta l'indirizzo IP per il servizio
nginx:export IP=`kubectl --kubeconfig=${KUBECONFIG} get service nginx-service \ -n ${NAMESPACE} -o jsonpath='{.status.loadBalancer.ingress[*].ip}'`Testa l'indirizzo IP del server
nginxutilizzandocurl:curl http://$IP
Esegui la pulizia
Per evitare che al tuo account GDC vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, devi eliminare le risorse che hai creato.
Elimina l'immagine container
Per eliminare l'immagine container dal tuo ambiente GDC con air gap, elimina l'istanza Harbor che contiene l'immagine oppure mantieni l'istanza Harbor ed elimina la singola immagine container.
Per eliminare l'immagine container dal registry Harbor gestito, utilizza la console GDC:
Nel menu di navigazione, seleziona Harbor Container Registry dalla sezione CI/CD.
Fai clic sul link esterno Vai all'istanza Harbor.
Elimina l'immagine container utilizzando la UI di Harbor. Per saperne di più, consulta Elimina le istanze del registry Harbor.
Elimina l'app container
Per eliminare l'app container di cui è stato eseguito il deployment, elimina il progetto GDC contenente le risorse o mantienilo ed elimina le singole risorse.
Per eliminare le singole risorse, completa i seguenti passaggi:
Elimina l'oggetto
Serviceper la tua app container:kubectl delete service nginx-service -n ${NAMESPACE}Elimina l'oggetto
Deploymentper la tua app container:kubectl delete deployment nginx-deployment -n ${NAMESPACE}Se hai creato un cluster Kubernetes di test esclusivamente per questo tutorial, eliminalo:
kubectl delete clusters.cluster.gdc.goog/USER_CLUSTER_NAME \ -n platform --kubeconfig ${MANAGEMENT_API_SERVER}Questa operazione elimina le risorse che compongono il cluster Kubernetes, ad esempio le istanze di computing, i dischi e le risorse di rete:
Passaggi successivi
Esplora la gerarchia delle risorse e i dettagli sull'isolamento delle risorse.
Scopri di più sull'architettura dei cluster.
Leggi la documentazione sui container Kubernetes per GDC per informazioni su come gestire i container di cui è stato eseguito il deployment nei cluster Kubernetes.
Scopri come gestire i cluster Kubernetes dopo il deployment dei workload dei container.
Esplora le best practice per configurare i workload dei container e altre risorse di servizio.