Configura Terraform

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

Antes de comenzar

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

  • Verifica que tengas un bucket de almacenamiento de GDC existente. Si no tienes un bucket de almacenamiento, crea uno.

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

Administra el archivo de estado

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

  1. Agrega la siguiente configuración a un archivo de Terraform que se almacene de forma local, 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"
        ...
      }
    }
    

    Reemplaza lo siguiente:

    • BUCKET_FQN: Es el nombre completamente calificado del recurso personalizado de Bucket.

    • TF_STATE_PATH: Es la ubicación del archivo de estado de Terraform que se almacenará en el bucket de almacenamiento.

    • BUCKET_ENDPOINT: Es el extremo del recurso personalizado Bucket.

    • ACCESS_KEY: Es la clave de acceso adquirida del secreto que contiene tus credenciales de acceso. Sigue los pasos en Obtén credenciales de acceso al bucket para adquirir la clave de acceso.

    • SECRET_KEY: Es la clave secreta que se adquirió del secreto que contiene tus credenciales de acceso. Sigue los pasos en Cómo obtener credenciales de acceso al bucket para adquirir la clave secreta.

    Debes establecer skip_credentials_validation y force_style_path en true, ya que GDC no admite la validación de credenciales y usa el extremo de estilo de ruta.

  2. Inicializa las ediciones del nuevo archivo de estado en el bucket de Storage que especificaste en el paso anterior:

    terraform init
    

    Es posible que Terraform solicite una región de AWS como entrada obligatoria, pero el valor no se usa, ya que usas el almacenamiento de objetos de GDC. Ingresa cualquier región de AWS para cumplir con el requisito.

Configurar 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 alcance. 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
    

    Reemplaza KUBECONFIG por el archivo kubeconfig del servidor de la API o el clúster que aloja el recurso que administras con Terraform. Por ejemplo, la mayoría de los recursos se ejecutan en el servidor de la API de Management. Para las cargas de trabajo de contenedores, configura el archivo kubeconfig de tu clúster de Kubernetes. Asegúrate de configurar el servidor de la API global si administras un recurso global.

  2. Vincula 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 para cada servidor o clúster de API para el que desees establecer permisos de Terraform.

Instala y configura el proveedor de Terraform

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

  1. En un archivo de Terraform dentro 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