Integrar la pasarela de conexión con Cloud Build

Este es un tutorial básico sobre cómo integrar Cloud Build con la pasarela Connect, lo que te permite crear un flujo de procesamiento de CI/CD para clústeres de GKE que se ejecutan en muchos entornos diferentes.

En este tutorial se da por hecho que conoces las secciones anteriores de la guía de la pasarela Connect y que estás familiarizado con Cloud Build. En estas instrucciones se usa la cloud-sdkimagen de compilación, que requiere un poco de scripting (como verás más abajo).

Antes de empezar

  • Asegúrate de que tienes instaladas las siguientes herramientas de línea de comandos:

    • La versión más reciente de Google Cloud CLI, que incluye gcloud, la herramienta de línea de comandos para interactuar con Google Cloud.
    • kubectl, la herramienta de línea de comandos para interactuar con Kubernetes.

    Si usas Cloud Shell como entorno de shell para interactuar con Google Cloud, estas herramientas ya están instaladas.

  • Asegúrate de haber inicializado gcloud CLI para usarlo con tu proyecto.

  • Asegúrate de que la pasarela Connect y otras APIs necesarias estén habilitadas en tu proyecto, tal como se describe en la guía de configuración.

1. Asignar roles de gestión de identidades y accesos a la cuenta de servicio de Cloud Build

De forma predeterminada, Cloud Build usa una Google Cloud cuenta de servicio para ejecutar todo el trabajo necesario, con una dirección en el formato MY_PROJECT_NUMBER @cloudbuild.gserviceaccount.com. Puedes encontrar la dirección de correo de esta cuenta de servicio de tu proyecto en Cloud Build > Configuración en la Google Cloud consola.

Captura de pantalla de la página de configuración de Cloud Build

Sigue las instrucciones de la sección Conceder permisos de gestión de identidades y accesos de la guía de configuración de la pasarela para conceder a esta cuenta los roles necesarios en tu proyecto.

2. Especificar políticas de RBAC para la cuenta de servicio de Cloud Build

Sigue las instrucciones de la sección Configurar políticas de RBAC de la guía de configuración de la pasarela para dar a la cuenta de servicio de Cloud Build los permisos adecuados en todos los clústeres que quieras usar.

Te recomendamos que uses Policy Controller para implementar y mantener políticas de RBAC en varios clústeres.

3. Crear una canalización de Cloud Build

El flujo de trabajo de Cloud Build necesita un archivo cloudbuild.yaml para configurar la canalización. A continuación, se muestra un ejemplo sencillo que despliega un manifiesto estático en dos clústeres diferentes (un clúster de GKE en Google Cloudy otro en VMware). Puedes consultar más información sobre cómo configurar una canalización de Cloud Build en la documentación de Cloud Build.

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

Puedes poner cualquier flujo de trabajo que quieras en myapp.yaml para configurar clústeres. A continuación se muestra un ejemplo:

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

Una vez que insertes la configuración en tu repositorio de Git, el flujo de trabajo de Cloud Build desplegará la aplicación necesaria en los clústeres especificados. También puedes configurar Cloud Build para que detecte los cambios en el repositorio de Git vinculado y active la actualización o la instalación automatizadas de la aplicación.

Uso avanzado

Como usa conceptos estándar de Cloud Build, puedes adaptar y personalizar aún más nuestro ejemplo para que se ajuste a tus necesidades concretas de CI/CD. En concreto, si quieres crear una imagen desde cero e implementarla en tu canalización, puedes usar el modo de preparación del compilador gke-deploy. Por ejemplo, la siguiente configuración de Cloud Build:

  1. Compila una imagen de Docker a partir del Dockerfile de la raíz del repositorio de Git y la etiqueta con el SHA de Git.
  2. Envía la imagen etiquetada al Container Registry del proyecto.
  3. Prepara los manifiestos de Kubernetes en el directorio manifest. Para ello, define las etiquetas de imagen correctas y coloca los manifiestos de salida en output/expanded.
  4. Se despliega en un clúster de GKE on-premise mediante la pasarela de conexión.
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

Ten en cuenta que, en este ejemplo, hemos tenido que crear un secreto de extracción de imágenes para autorizar al clúster de GKE local a extraer imágenes de Container Registry.

Para obtener más ideas sobre el uso de Cloud Build, consulta la documentación de Cloud Build.