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 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.
Asegúrate de que tu sistema pueda reconocer el certificado de la autoridad certificadora (AC) que usa el almacén 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 almacén de objetos de GDC se implementa con S3, puedes usar la API de S3 de Terraform para sincronizar con un archivo de estado compartido. Para ello, debes configurar Terraform para que se sincronice con el estado remoto:
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" 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 valorstatus.fullyQualifiedNamedel recurso personalizadoBucket. Por ejemplo,aabc2z8-platform-terraform-stateTF_STATE_PATH: Es la ruta de acceso del archivo de estado de Terraform que se almacenará en el bucket de almacenamiento. Por ejemplo,main.tfstateZONE: Es la zona del recurso personalizadoBucket(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 valorstatus.endpointdel recurso personalizadoBucket. Por ejemplo,https://objectstorage.org-1.zone1.google.gdch.testACCESS_KEY: Es la clave de acceso que se obtuvo del secreto que contiene tus credenciales de acceso. Sigue las instrucciones de Obtén credenciales de acceso al bucket para adquirir la clave de acceso. 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. Sigue las instrucciones para obtener credenciales de acceso al bucket y adquirir la clave secreta. 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_validationyskip_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.
Inicializa las ediciones del nuevo archivo de estado en el bucket de almacenamiento que especificaste en el paso anterior:
terraform init
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 permiso. Aplica los permisos necesarios para usar Terraform:
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"] EOFReemplaza
KUBECONFIGpor el archivo kubeconfig del servidor de la API o del 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 del clúster de Kubernetes. Asegúrate de configurar el servidor de la API global si administras un recurso global.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 de la API o clúster 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.
En un archivo de Terraform dentro de tu módulo, como el archivo
main.tf, inserta el siguiente bloquerequired_providers:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = ">=2.24.0" } } }Inicializa tu directorio de trabajo de Terraform para instalar el proveedor:
terraform init