Connect-Gateway in Cloud Build einbinden

In dieser grundlegenden Anleitung wird die Integration von Cloud Build in das Connect-Gateway erläutert, damit Sie eine CI/CD-Pipeline für GKE Cluster erstellen können, die in vielen verschiedenen Umgebungen ausgeführt werden kann.

In dieser Anleitung wird davon ausgegangen, dass Sie mit den vorherigen Abschnitten im Leitfaden zum Connect-Gateway vertraut sind und mit Cloud Build vertraut sind. In dieser Anleitung wird das cloud-sdk-Builder-Image verwendet, für das ein paar Skripts erforderlich sind (siehe unten).

Vorbereitung

  • Prüfen Sie, ob die folgenden Befehlszeilentools installiert sind:

    • Die neueste Version der Google Cloud CLI, die gcloud, das Befehlszeilentool für die Interaktion mit Google Cloud, enthält.
    • kubectl

    Wenn Sie Cloud Shell als Shell-Umgebung für die Interaktion mit Google Cloud verwenden, sind diese Tools für Sie installiert.

  • Achten Sie darauf, dass die gcloud CLI für die Verwendung mit Ihrem Projekt initialisiert wurde.

  • Achten Sie darauf, dass das Connect-Gateway und andere erforderliche APIs für Ihr Projekt aktiviert sind, wie im Einrichtungsleitfaden beschrieben.

1. IAM-Rollen dem Cloud Build-Dienstkonto zuweisen

Standardmäßig verwendet Cloud Build ein Google Cloud-Dienstkonto, um alle erforderlichen Aufgaben mit einer Adresse im Format MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com auszuführen. Diese Dienstkonto-E-Mail-Adresse für Ihr Projekt finden Sie in der unter Cloud Build > Einstellungen in der Google Cloud Console.

Screenshot der Cloud Build-Einstellungsseite

Folgen Sie der Anleitung unter IAM-Berechtigungen erteilen im Einrichtungsleitfaden für das Gateway, um diesem Konto die erforderlichen Rollen in Ihrem Projekt zu gewähren.

2. RBAC-Richtlinien für das Cloud Build-Dienstkonto angeben

Folgen Sie der Anleitung unter RBAC-Richtlinien konfigurieren im Leitfaden zur Einrichtung des Gateways, um dem Cloud Build-Dienstkonto die entsprechenden Berechtigungen für alle Cluster zu erteilen, die Sie verwenden möchten.

Es wird dringend empfohlen, über Policy Controller RBAC-Richtlinien in mehreren Clustern bereitzustellen und zu verwalten.

3. Cloud Build-Pipeline erstellen

Der Cloud Build-Workflow benötigt eine cloudbuild.yaml-Datei zum Konfigurieren der Pipeline. Im Folgenden wird ein einfaches Beispiel gezeigt, das ein statisches Manifest für zwei verschiedene Cluster bereitstellt (einen GKE-Cluster in Google Cloud und einen auf VMware). Weitere Informationen zum Konfigurieren einer Cloud Build-Pipeline finden Sie in der Cloud Build-Dokumentation.

steps:
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
  entrypoint: bash
  id: Deploy to cluster on Google Cloud
  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 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

Sie können einen beliebigen Workflow in myapp.yaml festlegen, um Cluster zu konfigurieren. Hier ein Beispiel:

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

Sobald Sie Ihre Konfiguration per Push in Ihr Git-Repository übertragen haben, stellt der Cloud Build-Workflow die erforderliche Anwendung für die angegebenen Cluster bereit. Sie können Cloud Build auch so einrichten, dass Änderungen im verknüpften Git-Repository erkannt werden, um eine automatische Aktualisierung oder Installation einer Anwendung auszulösen.

Fortgeschrittene Nutzung

Da darin standardmäßige Cloud Build-Konzepte verwendet werden, können Sie unser Beispiel weiter an Ihre spezifischen CI-/CD-Anforderungen anpassen. Wenn Sie ein Image von Grund auf erstellen und in Ihrer Pipeline bereitstellen möchten, können Sie den Vorbereitungsmodus des gke-deploy-Builders verwenden. Beispiel: Die folgende Cloud Build-Konfiguration:

  1. Erstellt ein Docker-Image aus dem Dockerfile im Stammverzeichnis des Git-Repositories und kennzeichnet es mit dem Git-SHA.
  2. Sendet das getaggte Image per Push an die Container Registry des Projekts.
  3. Bereiten Sie die Kubernetes-Manifeste im Verzeichnis manifest vor, indem Sie die richtigen Image-Tags festlegen und die Ausgabemanifeste in output/expanded setzen.
  4. Stellt lokal über das Connect-Gateway einen GKE-Cluster bereit.
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 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 output/expanded

Beachten Sie, dass in diesem Beispiel ein Image-Pull-Secret erstellt werden muss, um den lokalen GKE Cluster zum Abrufen von Images aus Container Registry zu autorisieren.

Weitere Ideen zur Nutzung von Cloud Build finden Sie in der Cloud Build-Dokumentation.