Integrazione del gateway Connect con Cloud Build

Questo è un tutorial di base su come integrare Cloud Build con il gateway Connect, che ti consente di creare una pipeline CI/CD per i cluster GKE in esecuzione in molti ambienti diversi.

Questo tutorial presuppone che tu abbia familiarità con le sezioni precedenti della guida al gateway di Connect e che tu abbia anche familiarità con Cloud Build. Queste istruzioni si basano sull'immagine dello strumento di creazione cloud-sdk, che richiede script di minore entità (come illustrato di seguito).

Prima di iniziare

  • Assicurati di aver installato i seguenti strumenti a riga di comando:

    • La versione più recente di Google Cloud CLI, che include gcloud, lo strumento a riga di comando per interagire con Google Cloud.
    • kubectl

    Se utilizzi Cloud Shell come ambiente shell per interagire con Google Cloud, questi strumenti sono installati automaticamente.

  • Assicurati di aver inizializzato gcloud CLI per utilizzarlo con il tuo progetto.

  • Assicurati che il gateway Connect e le altre API richieste siano abilitate per il tuo progetto, come descritto nella guida alla configurazione.

1. Concedi ruoli IAM all'account di servizio Cloud Build

Per impostazione predefinita, Cloud Build utilizza un account di servizio Google Cloud per eseguire tutto il lavoro richiesto, con un indirizzo nel formato MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com. Puoi trovare questo indirizzo email dell'account di servizio per il tuo progetto in Cloud Build - Impostazioni nella console Google Cloud.

Screenshot della pagina delle impostazioni di Cloud Build

Segui le istruzioni riportate in Concedi autorizzazioni IAM nella guida alla configurazione del gateway per concedere a questo account i ruoli richiesti nel tuo progetto.

2. Specifica i criteri RBAC per l'account di servizio Cloud Build

Segui le istruzioni riportate in Configurare i criteri RBAC nella guida alla configurazione del gateway per concedere all'account di servizio Cloud Build le autorizzazioni appropriate su tutti i cluster che vuoi utilizzare.

Ti consigliamo vivamente di utilizzare Policy Controller per eseguire il deployment e la gestione dei criteri RBAC su più cluster.

3. Crea una pipeline Cloud Build

Il flusso di lavoro di Cloud Build richiede un file cloudbuild.yaml per configurare la pipeline. Di seguito è riportato un semplice esempio di deployment di un manifest statico in due cluster diversi (un cluster GKE e un cluster GKE su VMware). Per saperne di più su come configurare una pipeline di Cloud Build, consulta la documentazione di Cloud Build.

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to GKE cluster
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-gke-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to Anthos cluster on VMware
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig gateway-kubeconfig apply -f myapp.yaml

Puoi inserire qualsiasi flusso di lavoro desiderato in myapp.yaml per configurare i cluster. Ecco un esempio:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 3
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2
        ports:
        - containerPort: 80

Dopo aver eseguito il push della configurazione nel repository Git, il flusso di lavoro di Cloud Build esegue il deployment dell'applicazione richiesta nei cluster specificati. Puoi anche configurare Cloud Build per rilevare le modifiche nel repository Git collegato e attivare l'aggiornamento o l'installazione automatici dell'applicazione.

Utilizzo avanzato

Poiché utilizza concetti standard di Cloud Build, puoi adattare e personalizzare ulteriormente il nostro esempio in base alle tue particolari esigenze CI/CD. In particolare, se vuoi creare un'immagine da zero ed eseguirne il deployment nella tua pipeline, puoi utilizzare la modalità di preparazione del builder di gke-deploy. Ad esempio, la seguente configurazione di Cloud Build:

  1. Crea un'immagine Docker dal Dockerfile nella directory radice del repository Git e la tagga con l'SHA Git.
  2. Esegue il push dell'immagine con tag nel Container Registry del progetto.
  3. Prepara i manifest Kubernetes nella directory manifest impostando i tag immagine corretti e posizionando i manifest di output in output/expanded.
  4. Esegue il deployment in un cluster GKE on-premise utilizzando il gateway Connect.
steps:
- name: 'gcr.io/cloud-builders/docker'
  id: "Build Container"
  args: ['build', '--tag=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA', '.']
- name: 'gcr.io/cloud-builders/docker'
  id: "Push to GCR"
  args: ['push', 'gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA']
- name: "gcr.io/cloud-builders/gke-deploy"
  id: "Prepare Manifests"
  args:
  - prepare
  - --filename=manifests/
  - --image=gcr.io/$PROJECT_ID/demo-app:$SHORT_SHA
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: "Deploy to Anthos clusters on VMware"
  args:
  - '-c'
  - |
    set -x && \
    export KUBECONFIG="$(pwd)/gateway-kubeconfig" && \
    gcloud container fleet memberships get-credentials my-vmware-cluster && \
    kubectl --kubeconfig=gateway-kubeconfig apply -f output/expanded

Tieni presente che in questo esempio abbiamo dovuto creare un secret di pull dell'immagine per autorizzare il cluster GKE on-premise a eseguire il pull delle immagini da Container Registry.

Per ulteriori idee sull'utilizzo di Cloud Build, consulta la documentazione di Cloud Build.