Connect-Gateway in Cloud Build einbinden

Dies ist eine einfache Anleitung zur Einbindung von Cloud Build in das Connect-Gateway, mit dem Sie eine CI/CD-Pipeline für GKE-Cluster erstellen können, die in vielen verschiedenen Umgebungen ausgeführt werden.

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).

Hinweise

  • 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, RBAC-Richtlinien in mehreren Clustern mithilfe von Policy Controller 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 finden Sie ein einfaches Beispiel, in dem ein statisches Manifest in zwei verschiedenen Clustern bereitgestellt wird (einem GKE-Cluster und einem GKE-Cluster 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 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

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. Bereitstellungen in einem lokalen GKE-Cluster mithilfe des Connect-Gateways.
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

Beachten Sie, dass in diesem Beispiel ein Image-Pull-Secret erstellt werden musste, 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.