Configurar Terraform

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

Antes de empezar

  • Descarga Terraform en tu estación de trabajo siguiendo la documentación proporcionada por HashiCorp: https://developer.hashicorp.com/terraform/install.

  • Verifica que tienes un segmento de almacenamiento de GDC. Si no tienes ningún contenedor de almacenamiento, crea uno.

  • Asegúrate de que tu sistema pueda reconocer el certificado de la autoridad de certificación (CA) que usa el almacenamiento de objetos.

Gestionar el archivo de estado

El archivo de estado de Terraform se usa para registrar el estado actual de la implementación y asignarlo a la configuración de Terraform. Como el almacenamiento de objetos de GDC se implementa mediante S3, puede usar la API S3 de Terraform para sincronizarlo con un archivo de estado compartido. Para ello, debes configurar Terraform para que se sincronice con el estado remoto:

  1. Añade la siguiente configuración a un archivo de Terraform almacenado localmente, como el archivo main.tf:

    terraform {
      backend "s3" {
        bucket = "BUCKET_FQN"
        key = "TF_STATE_PATH"
        endpoint = "BUCKET_ENDPOINT"
        skip_credentials_validation = true
        force_path_style = true
        access_key = "ACCESS_KEY"
        secret_key = "SECRET_KEY"
        ...
      }
    }
    

    Haz los cambios siguientes:

    • BUCKET_FQN: el nombre completo del recurso personalizado Bucket.

    • TF_STATE_PATH: la ubicación del archivo de estado de Terraform que se va a almacenar en el segmento de almacenamiento.

    • BUCKET_ENDPOINT: el endpoint del recurso personalizado Bucket.

    • ACCESS_KEY: la clave de acceso obtenida del secreto que contiene tus credenciales de acceso. Sigue los pasos de Obtener credenciales de acceso al contenedor para obtener la clave de acceso.

    • SECRET_KEY: la clave secreta obtenida del secreto que contiene tus credenciales de acceso. Sigue las instrucciones de Obtener credenciales de acceso al bucket para obtener la clave secreta.

    Debe definir skip_credentials_validation y force_style_path en true ya que GDC no admite la validación de credenciales y usa el endpoint de estilo de ruta.

  2. Inicializa las nuevas ediciones del archivo de estado en el segmento de almacenamiento que has especificado en el paso anterior:

    terraform init
    

    Es posible que Terraform te pida una región de AWS como entrada obligatoria, pero el valor no se utiliza porque estás usando el almacenamiento de objetos de GDC. Introduce cualquier región de AWS para cumplir el requisito.

Definir permisos

Además de los permisos necesarios para realizar una tarea específica con Terraform, como crear un proyecto de GDC, también debes tener permisos para ver las definiciones de recursos personalizados en ese ámbito. Aplica los permisos necesarios para usar Terraform:

  1. Crea el recurso de rol de clúster crd-viewer:

    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"]
    EOF
    

    Sustituye KUBECONFIG por el archivo kubeconfig del servidor de la API o del clúster que aloja el recurso que vas a gestionar con Terraform. Por ejemplo, la mayoría de los recursos se ejecutan en el servidor de la API Management. En el caso de las cargas de trabajo de contenedores, define el archivo kubeconfig de tu clúster de Kubernetes. Asegúrate de definir el servidor de API global si gestionas un recurso global.

  2. Asigna el rol de clúster definido en el paso anterior al usuario:

    kubectl apply --kubeconfig KUBECONFIG -f - <<EOF
    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
    

Repite estos pasos con cada servidor o clúster de API para el que quieras definir permisos de Terraform.

Instalar y configurar el proveedor de Terraform

Debes instalar el proveedor de Kubernetes para aprovisionar y gestionar recursos de Kubernetes.

  1. En un archivo de Terraform de tu módulo, como el archivo main.tf, inserta el siguiente bloque required_providers:

    terraform {
      required_providers {
        kubernetes = {
          source = "hashicorp/kubernetes"
          version = "~>2.6.1"
        }
      }
    }
    
  2. Inicializa tu directorio de trabajo de Terraform para instalar el proveedor:

    terraform init