Usar Terraform

Para configurar Terraform en tu entorno aislado de Google Distributed Cloud (GDC), debes descargarlo y configurarlo para que controle los recursos de Kubernetes.

Este documento está dirigido a todos los grupos de público que necesitan configurar Terraform para administrar sus flujos de trabajo de hardware y software aislados. Para obtener más información, consulta Públicos de la documentación de GDC aislado.

Antes de comenzar

  • Descarga Terraform 1.6.3 o una versión posterior en tu estación de trabajo siguiendo la documentación que proporciona HashiCorp: https://developer.hashicorp.com/terraform/install. La configuración del backend en este documento usa parámetros de configuración que las versiones anteriores de Terraform no admiten.

  • Verifica que tengas un bucket de almacenamiento de GDC existente. Si no tienes un bucket de almacenamiento, crea uno. Para obtener más información, consulta Crea buckets de almacenamiento.

  • Asegúrate de que tu sistema pueda reconocer el certificado de la autoridad certificadora (AC) que usa el almacén de objetos.

  • Instala la CLI de gdcloud. Para obtener más información, consulta Usa la CLI de gdcloud.

  • Genera el archivo kubeconfig para el servidor de la API o el clúster que aloja los recursos que deseas administrar con Terraform. Para obtener más información, consulta Obtén un archivo kubeconfig.

Configura Terraform

Para configurar Terraform en tu entorno de GDC, completa lo siguiente:

  1. En tu módulo de Terraform o colección de archivos de Terraform en tu estación de trabajo, crea el archivo main.tf y agrega la siguiente configuración:

    terraform {
      backend "s3" {
        bucket = "BUCKET_FQN"
        key = "TF_STATE_PATH"
        region = "ZONE"
        endpoints = {
          s3 = "BUCKET_ENDPOINT"
        }
        use_path_style = true
        access_key = "ACCESS_KEY"
        secret_key = "SECRET_KEY"
        skip_credentials_validation = true
        skip_requesting_account_id = true
        skip_metadata_api_check = true
        skip_region_validation = true
        skip_s3_checksum = true
      }
    }
    

    Reemplaza lo siguiente:

    • BUCKET_FQN: Es el valor status.fullyQualifiedName del recurso personalizado Bucket. Por ejemplo, aabc2z8-platform-terraform-state

    • TF_STATE_PATH: Es la ruta de acceso del archivo de estado de Terraform que se almacenará en el bucket de almacenamiento. Por ejemplo, main.tfstate

    • ZONE: Es la zona del recurso personalizado Bucket (status.region). Por ejemplo, zone1. Terraform requiere un valor de región, pero el almacén de objetos de GDC no lo verifica.

    • BUCKET_ENDPOINT: Es el valor status.endpoint del recurso personalizado Bucket. Por ejemplo, https://objectstorage.org-1.zone1.google.gdch.test

    • ACCESS_KEY: Es la clave de acceso que se obtuvo del secreto que contiene tus credenciales de acceso. Para obtener más información sobre cómo adquirir la clave de acceso, consulta Obtén credenciales de acceso al bucket. El valor del Secret está codificado en Base64. Decodifícalo antes de usarlo.

    • SECRET_KEY: Es la clave secreta que se adquiere del Secret que contiene tus credenciales de acceso. Para obtener más información sobre cómo adquirir la clave secreta, consulta Obtén credenciales de acceso al bucket. El valor del Secret está codificado en Base64. Decodifícalo antes de usarlo.

    El almacenamiento de objetos de GDC es compatible con S3, pero no es AWS. Los parámetros de configuración restantes configuran el backend para el almacenamiento de AWS S3 que no es de AWS:

    • use_path_style: usa el direccionamiento de bucket con estilo de ruta de acceso para el almacén de objetos de GDC.

    • skip_credentials_validation y skip_requesting_account_id: Impide que Terraform llame a AWS STS y AWS IAM. GDC no proporciona esos servicios.

    • skip_metadata_api_check: impide que Terraform consulte el servicio de metadatos de AWS EC2.

    • skip_region_validation: te permite usar el nombre de la zona como la región.

    • skip_s3_checksum: impide que Terraform solicite una suma de comprobación SHA-256 cuando sube el archivo de estado.

  2. Inicializa tu archivo de estado de Terraform en el bucket de almacenamiento que especificaste en el paso anterior:

    terraform init
    
  3. Implementa el recurso de rol de clúster crd-viewer y vincúlalo a tu cuenta de usuario:

    kubectl apply --kubeconfig KUBECONFIG -f - <<EOF
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: crd-viewer
    rules:
    - apiGroups: ["apiextensions.k8s.io"]
      resources: ["customresourcedefinitions"]
      verbs: ["get", "list", "watch"]
    ---
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRoleBinding
    metadata:
      name: crd-viewer-binding
    subjects:
    - kind: User
      name: USER_EMAIL
    roleRef:
      kind: ClusterRole
      name: crd-viewer
      apiGroup: rbac.authorization.k8s.io
    EOF
    

    Reemplaza lo siguiente:

    • KUBECONFIG: Es el archivo kubeconfig del servidor de la API o del clúster que aloja los recursos que administras con Terraform.

    • USER_EMAIL: Es el correo electrónico del usuario al que se vinculará el rol.

    Implementa el rol crd-viewer en cada servidor de la API o clúster para el que quieras usar Terraform.

  4. En el archivo main.tf, inserta el siguiente bloque required_providers:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = ">=2.24.0"
        }
      }
    }
    

    Esta configuración instala el proveedor de Kubernetes para aprovisionar y administrar recursos de Kubernetes en tu entorno de GDC.

  5. Inicializa tu directorio de trabajo de Terraform para instalar el proveedor:

    terraform init
    

¿Qué sigue?