Intégrer la passerelle Connect à Cloud Build

Ce tutoriel de base vous explique comment intégrer Cloud Build à la passerelle Connect. Il vous permet de créer un pipeline CI/CD pour des clusters GKE exécutés dans de nombreux environnements.

Ce tutoriel part du principe que vous connaissez les sections précédentes du guide de la passerelle Connect et que vous maîtrisez Cloud Build. Ces instructions s'appuient sur l'image de compilateur cloud-sdk, qui nécessite quelques scripts mineurs (comme illustré ci-dessous).

Avant de commencer

  • Assurez-vous que les outils de ligne de commande suivants sont installés :

    • La dernière version de Google Cloud CLI qui inclut gcloud, l'outil de ligne de commande qui permet d'interagir avec Google Cloud.
    • kubectl

    Si vous utilisez Cloud Shell comme environnement shell pour interagir avec Google Cloud, ces outils sont installés pour vous.

  • Assurez-vous d'avoir initialisé gcloud CLI à utiliser avec votre projet.

  • Assurez-vous que la passerelle Connect et les autres API requises sont activées pour votre projet, comme décrit dans le guide de configuration.

1. Attribuer des rôles IAM au compte de service Cloud Build

Par défaut, Cloud Build utilise un compte de service Google Cloud pour exécuter toutes les tâches requises, avec une adresse au format MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com. Vous trouverez l'adresse e-mail du compte de service de votre projet sous Cloud Build – Paramètres dans la console Google Cloud.

Capture d'écran de la page des paramètres Cloud Build

Suivez les instructions de la section Accorder des autorisations IAM du guide de configuration de la passerelle pour attribuer à ce compte les rôles requis dans votre projet.

2. Spécifier des stratégies RBAC pour le compte de service Cloud Build

Suivez les instructions de la section Configurer les stratégies RBAC du guide de configuration de la passerelle pour attribuer au compte de service Cloud Build les autorisations appropriées sur tous les clusters que vous souhaitez utiliser.

Nous vous recommandons vivement d'utiliser Policy Controller pour déployer et gérer les stratégies RBAC sur plusieurs clusters.

3. Créer un pipeline Cloud Build

Le workflow Cloud Build a besoin d'un fichier cloudbuild.yaml pour configurer le pipeline. Voici un exemple simple qui déploie un fichier manifeste statique sur deux clusters différents (un cluster GKE et un cluster GKE sur VMware). Pour en savoir plus sur la configuration d'un pipeline Cloud Build, consultez la documentation 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

Vous pouvez placer le workflow de votre choix dans myapp.yaml pour configurer les clusters. Voici un exemple :

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

Après avoir transféré votre configuration vers votre dépôt Git, le workflow Cloud Build déploie l'application requise sur les clusters spécifiés. Vous pouvez également configurer Cloud Build pour détecter les modifications apportées au dépôt Git associé afin de déclencher la mise à jour ou l'installation d'une application automatisée.

Utilisation avancée

Étant donné qu'il utilise les concepts standards de Cloud Build, vous pouvez adapter et personnaliser notre exemple en fonction de vos besoins CI/CD spécifiques. Si vous souhaitez créer une image à partir de zéro et la déployer dans votre pipeline, vous pouvez utiliser le mode de préparation du compilateur gke-deploy. Par exemple, la configuration Cloud Build suivante :

  1. Crée une image Docker à partir du fichier Dockerfile à la racine du dépôt Git et lui ajoute un tag avec le SHA Git.
  2. Transfère l'image taguée vers le registre de conteneurs du projet.
  3. Prépare les fichiers manifestes Kubernetes dans le répertoire manifest en définissant le ou les tags d'image corrects, en plaçant les fichiers manifestes de sortie dans output/expanded.
  4. Déploie sur un cluster GKE sur site à l'aide de la passerelle 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

Notez que dans cet exemple, nous avons dû créer un secret d'extraction d'image pour autoriser le cluster GKE sur site à extraire des images de Container Registry.

Pour en savoir plus sur l'utilisation de Cloud Build, consultez la documentation Cloud Build.