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:
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 personalizadoBucket
.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 personalizadoBucket
.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
yforce_style_path
entrue
ya que GDC no admite la validación de credenciales y usa el endpoint de estilo de ruta.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:
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.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.
En un archivo de Terraform de tu módulo, como el archivo
main.tf
, inserta el siguiente bloquerequired_providers
:terraform { required_providers { kubernetes = { source = "hashicorp/kubernetes" version = "~>2.6.1" } } }
Inicializa tu directorio de trabajo de Terraform para instalar el proveedor:
terraform init