Convalida le app in base ai criteri aziendali in una pipeline CI
Se la tua organizzazione utilizza Anthos Config Management e Policy Controller per gestire i criteri nei cluster Anthos, puoi convalidare la configurazione del deployment di un'app nella pipeline di integrazione continua (CI). Questo tutorial illustra come ottenere questo risultato. Convalidare l'app è utile se sei uno sviluppatore che crea una pipeline CI per un'app o un Engineer della piattaforma che crea un modello di pipeline CI per più team di app.
I criteri sono una parte importante della sicurezza e della conformità di un'organizzazione. Policy Controller, che fa parte di Anthos Config Management, consente alla tua organizzazione di gestire tali criteri a livello centrale e dichiarativo per tutti i cluster. In qualità di sviluppatore, puoi approfittare della natura centralizzata e dichiarativa di questi criteri. Puoi utilizzare queste caratteristiche per convalidare la tua app in base a tali criteri il prima possibile nel tuo flusso di lavoro di sviluppo. Conoscere le violazioni dei criteri nella pipeline CI invece che durante il deployment offre due vantaggi principali: ti consente di passare alla sicurezza e rafforza il ciclo di feedback, riducendo il tempo e i costi necessari per correggere queste violazioni.
Questo tutorial utilizza Cloud Build come strumento CI e un repository GitHub di esempio contenente criteri per le dimostrazioni.
Risorse
Questo tutorial utilizza diversi strumenti Kubernetes. Questa sezione spiega cosa sono questi strumenti, come interagiscono tra loro e se puoi sostituirli con altro.
Gli strumenti utilizzati in questo tutorial sono i seguenti:
Policy Controller: Policy Controller è un prodotto Google Cloud che fa parte diAnthos Config Management. È basato sul progetto open source Open Policy Agent - Gatekeeper. Policy Controller applica i criteri relativi agli oggetti creati in un cluster Kubernetes (ad esempio, impedendo l'utilizzo di un'opzione specifica o l'applicazione di un'etichetta specifica). Tali criteri vengono chiamati vincoli. I vincoli sono definiti risorse personalizzate di Kubernetes. Config Sync consente di dichiarare tali vincoli in un repository Git e di applicare flussi di lavoro di sviluppo tradizionali al processo di gestione dei criteri. Config Sync è disponibile sia come prodotto autonomo sia come parte di Anthos Config Management. Per l'implementazione puoi utilizzare Open Policy Agent - Gatekeeper anziché Policy Controller.
GitHub: in questo tutorial, utilizziamo GitHub per ospitare i repository Git: uno per un'app di esempio e uno per Anthos Config Management (che contiene i vincoli per Policy Controller). Per semplicità, i due repository sono due cartelle diverse in un singolo repository Git. In realtà, si tratta di diversi repository. Puoi utilizzare qualsiasi soluzione Git.
Cloud Build: Cloud Build è la soluzione CI di Google Cloud. In questo tutorial, lo utilizziamo per eseguire i test di convalida. I dettagli dell'implementazione possono variare a seconda del sistema CI, ma i concetti descritti in questo tutorial possono essere utilizzati con qualsiasi sistema CI basato su container.
Kustomize: Kustomize è uno strumento di personalizzazione per le configurazioni Kubernetes. Funziona eseguendo le configurazioni di base e applicando personalizzazioni. Ti permette di adottare un approccio DRY (Don't Try Youself) alle configurazioni Kubernetes. Con Kustomize, mantieni gli elementi comuni a tutti i tuoi ambienti nelle configurazioni di base e crea personalizzazioni per l'ambiente. In questo tutorial, conserviamo le configurazioni di Kustomize nel repository dell'app e quindi "crei" (ad esempio applichiamo le personalizzazioni) le configurazioni nella pipeline di CI. Puoi utilizzare i concetti descritti in questo tutorial con qualsiasi strumento che produce configurazioni Kubernetes pronte per essere applicate a un cluster (ad esempio, il comando helm template).
Kpt: Kpt è uno strumento per creare flussi di lavoro per le configurazioni Kubernetes. Kpt consente di recuperare, visualizzare, personalizzare, aggiornare, convalidare e applicare le configurazioni Kubernetes. Poiché funziona con i file Git e YAML, è compatibile con la maggior parte degli strumenti esistenti dell'ecosistema Kubernetes. In questo tutorial, utilizziamo kpt nella pipeline CI per recuperare i vincoli dal repository Anthos Config Management e per convalidare le configurazioni di Kubernetes in base a tali vincoli.
Pipeline
La pipeline CI utilizzata in questo tutorial è mostrata nel seguente diagramma:
La pipeline viene eseguita in Cloud Build e i comandi vengono eseguiti in una directory contenente una copia del repository di app di esempio. La pipeline inizia generando
le configurazioni Kubernetes finali con Kustomize. Successivamente, recupera i vincoli contro i quali vogliamo eseguire la convalida dal repository Anthos Config Management utilizzando kpt. Infine, utilizza kpt per convalidare le configurazioni di Kubernetes in base a tali vincoli. Per raggiungere questo ultimo passaggio, utilizziamo una funzione di configurazione specifica denominata gatekeeper che esegue questa convalida. In questo tutorial, attiverai manualmente la pipeline CI, ma in realtà la configurerai per l'esecuzione dopo un git push
nel tuo repository Git.
Obiettivi
- Esegui una pipeline CI per un'app di esempio con Cloud Build.
- Osserva che la pipeline non funziona a causa di una violazione dei criteri.
- Modifica il repository dell'app di esempio per rispettare i criteri.
- Esegui di nuovo la pipeline CI.
Costi
Questo tutorial utilizza i seguenti componenti fatturabili di Google Cloud:
- Cloud Build
Per generare una stima dei costi basata sull'utilizzo previsto, utilizza il Calcolatore prezzi.
Al termine di questo tutorial, puoi evitare di continuare la fatturazione eliminando le risorse che hai creato. Per maggiori dettagli, consulta la sezione Pulizia.
Prima di iniziare
Seleziona o crea un progetto Google Cloud. In Google Cloud Console, vai alla pagina Gestisci risorse:
Per eseguire i comandi elencati in questo tutorial, apri Cloud Shell:
In Cloud Shell, esegui
gcloud config get-value project
.Se il comando non restituisce l'ID del progetto appena selezionato, configura Cloud Shell in modo che utilizzi il tuo progetto:
gcloud config set project PROJECT_ID
Sostituisci
PROJECT_ID
con l'ID progetto.In Cloud Shell, abilita l'API Cloud Build richiesta:
gcloud services enable cloudbuild.googleapis.com
Convalidare le configurazioni di esempio di app
In questa sezione eseguirai una pipeline CI con Cloud Build per un repository di app di esempio che forniamo. Questa pipeline convalida la configurazione Kubernetes disponibile nel repository dell'app di esempio in base ai vincoli disponibili in un repository Anthos Config Management di esempio.
Per convalidare le configurazioni delle app:
In Cloud Shell, clona il repository delle app di esempio:
git clone https://github.com/GoogleCloudPlatform/anthos-config-management-samples.git
Esegui la pipeline CI con Cloud Build. I log della build vengono visualizzati direttamente in Cloud Shell.
cd anthos-config-management-samples/ci-app/app-repo gcloud builds submit .
La pipeline che esegui è definita nel file seguente.
In Policy Controller, i vincoli sono istanze di modelli di vincolo. I modelli di vincolo contengono il codice Rego effettivo utilizzato per implementare il vincolo. La funzione
gcr.io/kpt-fn/gatekeeper
richiede il modello di vincolo e le definizioni di vincolo. Il repository dei criteri di esempio contiene entrambi, ma in realtà possono essere archiviati in posti diversi. Utilizza il comandokpt pkg get
secondo le tue esigenze per scaricare sia i modelli di vincolo sia i vincoli.Questo tutorial utilizza
gcr.io/kpt-fn/gatekeeper
con Cloud Build per convalidare le risorse, ma ci sono altre due alternative che puoi utilizzare:- Utilizza la funzione
gcr.io/kpt-fn/gatekeeper
conkpt
:
kpt fn eval hydrated-manifests/kpt-manifests.yaml --image gcr.io/kpt-fn/gatekeeper:v0.2
- Utilizza lo strumento a riga di comando
gator
:
gator test -f hydrated-manifests/kpt-manifests.yaml
- Utilizza la funzione
Dopo qualche minuto, controlla che la pipeline non funzioni con il seguente errore:
[...] Step #2 - "Validate against policies": [error] apps/v1/Deployment/nginx-deployment : Deployment objects should have an 'owner' label indicating who created them. Step #2 - "Validate against policies": violatedConstraint: deployment-must-have-owner Finished Step #2 - "Validate against policies" 2022/05/11 18:55:18 Step Step #2 - "Validate against policies" finished 2022/05/11 18:55:19 status changed to "ERROR" ERROR ERROR: build step 2 "gcr.io/kpt-fn/gatekeeper:v0.2" failed: exit status 1 2022/05/11 18:55:20 Build finished with ERROR status
Il vincolo che la configurazione sta violando è definito nel seguente file. È una risorsa personalizzata Kubernetes chiamata
K8sRequiredLabels
.Per il modello di vincolo corrispondente a questo vincolo, consulta la sezione
requiredlabels.yaml
su GitHub.Crea la configurazione Kubernetes completa autonomamente e osserva che l'etichetta
owner
non è presente. Per creare la configurazione:kubectl kustomize config/prod
Correggi l'app per rispettare le norme aziendali
In questa sezione correggi la violazione delle norme utilizzando Kustomize:
In Cloud Shell, aggiungi una sezione
commonLabels
al file Kustomization di base:cat <<EOF >> config/base/kustomization.yaml commonLabels: owner: myself EOF
Crea la configurazione Kubernetes completa e osserva che l'etichetta
owner
è ora presente:kubectl kustomize config/prod
Esegui di nuovo la pipeline CI con Cloud Build:
gcloud builds submit .
Ora la pipeline ha esito positivo con il seguente output:
[...] Step #2 - "Validate against policies": [RUNNING] "gcr.io/kpt-fn/gatekeeper:v0" Step #2 - "Validate against policies": [PASS] "gcr.io/kpt-fn/gatekeeper:v0" [...]
Esegui la pulizia
- In Cloud Console, vai alla pagina Gestisci risorse.
- Nell'elenco dei progetti, seleziona il progetto da eliminare, quindi fai clic su Elimina.
- Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.
Passaggi successivi
- Scopri le best practice per la gestione dei criteri con Anthos Config Management e GitLab.
- Per ulteriori architetture di riferimento, diagrammi, tutorial e best practice, visita il Cloud Architecture Center.