Implementa nodos y VCF con Terraform y el kit de herramientas
En este documento, se explica cómo usar la automatización de Terraform para implementar nodos de ESXi en equipos físicos, redes de transmisión de capa 2, Cloud DNS y balanceadores de cargas internos regionales (ILB) para la solución de VMware en Google Cloud con VMware Cloud Foundation (VCF).
La automatización aprovisiona la siguiente infraestructura:
- Hipervisores de ESXi dedicados de Bare Metal (
z3-highmem-192-highlssd-metaloz3-highmem-192-metal). - Redes de transmisión de capa 2 con varias VLAN y marcos jumbo (MTU 8896)
- Zonas administradas privadas de Cloud DNS y políticas de reenvío de consultas entrantes.
- ILB regionales con ARP gratuito / anuncio de router (
GARP_RA) Alta disponibilidad de movimiento rápido de IP. - Grupos de extremos de red (NEG) zonales para las interfaces de administración y de ruta de datos de NSX.
Antes de comenzar
Antes de ejecutar la automatización de Terraform, instala las herramientas necesarias, habilita las APIs requeridas, incluye en la lista de entidades permitidas las redes de subredes de capa 2 y verifica los siguientes requisitos para tu proyecto de Google Cloud :
- Asegúrate de que tu proyecto tenga suficiente cuota de nodos de equipos físicos en la región y la zona de destino. Para conocer las cuotas requeridas y obtener instrucciones sobre cómo ver o solicitar aumentos de cuota, consulta Cuotas y límites.
- Asegúrate de tener los permisos de Identity and Access Management (IAM) necesarios, incluidos
Compute Admin(roles/compute.admin) y, si usas Cloud DNS,DNS Administrator(roles/dns.admin). - Planifica tu infraestructura del Sistema de nombres de dominio (DNS) para admitir búsquedas directas y reversas de todos los nombres de host de nodos de ESXi y extremos de dispositivos de VCF planificados.
- Nombres de host de los nodos: Proporciona el nombre de dominio completamente calificado (FQDN) de cada nodo durante la implementación. Esto garantiza que ESXi genere certificados con nombres de host.
- Política de imágenes confiables: Si tu organización no aplica la
política de la organización
constraints/compute.trustedImageProjects, no se requiere ninguna acción. Si tu organización aplica esta política, permiteprojects/smve-prod-public-imagespara que Compute Engine pueda crear discos de arranque de Bare Metal. Para obtener más información, consulta Configura restricciones de acceso a imágenes. Controles del servicio de VPC: Si tu proyecto de destino no está en un perímetro de servicio, no se requiere ninguna acción. Si tu proyecto está en un perímetro de servicio, agrega una regla de salida que permita las operaciones de
compute.googleapis.comen el proyectosmve-prod-public-images(projects/999037279871):- egressFrom: identityType: ANY_IDENTITY egressTo: operations: - serviceName: compute.googleapis.com methodSelectors: - method: "*" resources: - projects/999037279871Para obtener más información, consulta la referencia de las reglas de salida.
Instala Terraform
Debes instalar la versión 1.3.0 o posterior de la CLI de Terraform. Para instalar Terraform, selecciona la pestaña de tu sistema operativo:
DEBIAN o UBUNTU
Para instalar Terraform en Debian o Ubuntu, ejecuta los siguientes comandos:
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com '"$(lsb_release -cs)"' main' | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install -y terraform
RHEL o CentOS
Para instalar Terraform en RHEL o CentOS, ejecuta los siguientes comandos:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
sudo yum -y install terraform
Linux genérico
Para instalar Terraform descargando directamente el objeto binario, ejecuta los siguientes comandos:
export TERRAFORM_VERSION='1.9.5'
curl -fsSLO 'https://releases.hashicorp.com/terraform/'"${TERRAFORM_VERSION}"'/terraform_'"${TERRAFORM_VERSION}"'_linux_amd64.zip'
unzip 'terraform_'"${TERRAFORM_VERSION}"'_linux_amd64.zip'
sudo mv terraform /usr/local/bin/
rm 'terraform_'"${TERRAFORM_VERSION}"'_linux_amd64.zip'
Habilita las APIs de Google Cloud
Habilita las siguientes APIs obligatorias en tu proyecto de Google Cloud de destino:
| Extremo de servicio | Objetivo |
|---|---|
compute.googleapis.com |
Instancias de equipos físicos, redes de nube privada virtual (VPC), subredes de capa 2, firewalls, NEG, ILB regionales y reservas de IP estáticas. |
dns.googleapis.com |
Zonas administradas de DNS inversas y de reenvío privadas, políticas de reenvío entrante y conjuntos de registros DNS. |
Para habilitar las APIs requeridas con la CLI de gcloud, ejecuta el siguiente
comando:
gcloud services enable \
compute.googleapis.com \
dns.googleapis.com \
--project='PROJECT_ID'
Reemplaza PROJECT_ID por el ID de tu proyecto de Google Cloud de destino.
Verifica la cuota regional
Antes de aprovisionar nodos de equipos físicos o crear un clúster, verifica que tu proyecto tenga suficiente cuota regional y global de Compute Engine. Agrega los recursos de todos los clústeres existentes en la región a los siguientes valores incrementales antes de compararlos con la cuota de tu proyecto:
| Métrica de cuota | Recursos necesarios por nodo de Bare Metal | Recursos necesarios para un clúster de 3 nodos |
|---|---|---|
compute.googleapis.com/cpus_per_vm_family para Z3 |
192 CPUs virtuales | 3 × 192 = 576 CPUs virtuales |
compute.googleapis.com/local_ssd_total_storage_per_vm_family para Z3 |
72 TB | 3 × 72 TB = 216 TB |
compute.googleapis.com/hyperdisk_balanced_total_storage |
128 GB | 3 × 128 GB = 384 GB |
compute.googleapis.com/resource_policies |
0 cuando se agregan nodos a un clúster existente | 1 política de posición distribuida por clúster |
compute.googleapis.com/regional_backend_services_protocol_forwarding_fast_ha |
0 cuando se agregan nodos o clústeres sin dispositivos nuevos | 1 por cada nueva VIP del dispositivo de administración de VCF o extremo de NSX Edge |
Para obtener la lista completa de las cuotas requeridas y las instrucciones para ver o solicitar aumentos de cuota, consulta Cuotas y límites.
Permite las redes de subredes de capa 2 basadas en VLAN incluidas en la lista de entidades permitidas
La solución de VMware requiere que las subredes de tu red de nube privada virtual (VPC) tengan la propiedad Resolver máscara de subred configurada en Transmitir solo el rango principal con aprendizaje para admitir las herramientas de redes basadas en VLAN. Abre un ticket de asistencia en el Centro de asistencia de la consola deGoogle Cloud con la siguiente información:
- Producto: Google Cloud VMware Engine
- Prioridad: P2
- Categoría: Conectividad de red
- Impacto comercial: Pregunta técnica general
- Proporciona más detalles:
Allowlist L2 network connectivity for my project, junto con el ID del proyecto, el número del proyecto y la región y la zona de destino para la implementación
Para obtener más información sobre la compatibilidad con las redes basadas en VLAN, consulta Emulación de capa 2: transmisión de ARP y aprendizaje de MAC personalizado.
Configura la política de la organización y los Controles del servicio de VPC
Las instancias de ESXi de Bare Metal en la solución de VMware se inician desde imágenes de ESXi
proporcionadas por Google alojadas en el proyecto smve-prod-public-images, que tiene el número de
proyecto 999037279871. De forma predeterminada, no se requiere ninguna configuración adicional.
Aplica las siguientes opciones de configuración solo si tu organización aplica una política de imágenes confiables
o usa los Controles del servicio de VPC:
- Política de imágenes confiables: Si tu organización no aplica la
política de la organización
constraints/compute.trustedImageProjects, no se requiere ninguna acción. Si tu organización aplica esta política, permiteprojects/smve-prod-public-imagespara que Compute Engine pueda crear discos de arranque de Bare Metal. Para obtener más información, consulta Configura restricciones de acceso a imágenes. Regla de salida de los Controles del servicio de VPC: Si tu proyecto de destino no está en un perímetro de servicio, no se requiere ninguna acción. Si tu proyecto está en un perímetro de servicio, agrega una regla de salida que permita las operaciones de
compute.googleapis.comen el proyectosmve-prod-public-images(projects/999037279871):- egressFrom: identityType: ANY_IDENTITY egressTo: operations: - serviceName: compute.googleapis.com methodSelectors: - method: "*" resources: - projects/999037279871Para obtener más información, consulta la referencia de las reglas de salida.
Configura los permisos y roles de IAM
La identidad que ejecuta Terraform (un administrador humano o una cuenta de servicio de CI/CD automatizada) requiere los siguientes roles de IAM en el proyecto Google Cloud de destino:
| Rol | ID del rol | Alcance de uso |
|---|---|---|
| Administrador de Compute | roles/compute.admin |
Aprovisiona instancias de procesamiento de equipos físicos, adjunta imágenes de discos de arranque personalizadas, configura políticas de posición y administra interfaces multi-NIC. Administra redes de VPC, subredes de transmisión de capa 2, reservas de IP estáticas, ILB regionales, servicios de backend, reglas de reenvío y NEG zonales. Crear y administrar reglas de seguridad de firewall de entrada de VPC |
| Administrador de DNS | roles/dns.admin |
Administra las zonas privadas de reenvío y reversas de Cloud DNS, las políticas de reenvío de consultas entrantes y los conjuntos de registros de recursos A y PTR. |
| Usuario de cuenta de servicio | roles/iam.serviceAccountUser |
Otorga este rol en la cuenta de servicio predeterminada de Compute Engine (PROJECT_NUMBER-compute@) para permitir el aprovisionamiento de instancias con el permiso cloud-platform. |
Otorga roles con gcloud CLI
Para asignar los roles a nivel de proyecto y los permisos de la cuenta de servicio necesarios, ejecuta los siguientes comandos:
# Assign required project-level roles (use 'serviceAccount:SA_EMAIL' if granting to a service account)
for ROLE in \
roles/compute.admin \
roles/dns.admin; do
gcloud projects add-iam-policy-binding 'PROJECT_ID' \
--member='user:USER_EMAIL' \
--role=${ROLE}
done
# Grant Service Account User role on the Compute Engine default service account
gcloud iam service-accounts add-iam-policy-binding \
'PROJECT_NUMBER-compute@' \
--member='user:USER_EMAIL' \
--role='roles/iam.serviceAccountUser' \
--project='PROJECT_ID'
Antes de ejecutar los comandos, reemplaza lo siguiente:
PROJECT_ID: Es el ID de tu proyecto de Google Cloud de destino.PROJECT_NUMBER: Es el número de tu proyecto de Google Cloud de destino.USER_EMAIL: Es la dirección de correo electrónico de tu identidad de usuario.
Autentica el ejecutor de Terraform
Elige una de las siguientes estrategias de autenticación según tu entorno operativo:
- Autentica con la identidad temporal como cuenta de servicio (recomendado)
- Autentica con las credenciales predeterminadas de la aplicación
- Autentica con un archivo de claves de cuenta de servicio
Autentica con identidad temporal como cuenta de servicio
La identidad temporal como cuenta de servicio elimina las claves de credenciales de larga duración generando tokens de acceso de OAuth 2.0 de corta duración. Tu identidad personal se autentica, mientras que Terraform se ejecuta como la cuenta de servicio designada. Google Cloud audita las acciones que realiza Terraform en la cuenta de servicio.
Otorga a tu identidad personal de Google Cloud el rol de creador de tokens de cuenta de servicio (
roles/iam.serviceAccountTokenCreator) en la cuenta de servicio del ejecutor:gcloud iam service-accounts add-iam-policy-binding 'SA_EMAIL' \ --member='user:USER_EMAIL' \ --role='roles/iam.serviceAccountTokenCreator' \ --project='PROJECT_ID'
Antes de ejecutar el comando, reemplaza lo siguiente:
SA_EMAIL: Es la dirección de correo electrónico de la cuenta de servicio del ejecutor de Terraform.USER_EMAIL: Es la dirección de correo electrónico de tu identidad personal de Google Cloud.PROJECT_ID: Es el ID de tu proyecto de Google Cloud de destino.
Autentica tu entorno local:
gcloud auth application-default loginEstablece la variable de entorno
GOOGLE_IMPERSONATE_SERVICE_ACCOUNTpara aplicar la identidad temporal en las ejecuciones de Terraform:export GOOGLE_IMPERSONATE_SERVICE_ACCOUNT='SA_EMAIL'
Autentica mediante credenciales predeterminadas de la aplicación
Usa las credenciales predeterminadas de la aplicación (ADC) en entornos de desarrollo y pruebas en los que tu identidad de usuario tenga los permisos necesarios directamente. Google Cloud audita las acciones en función de tu identidad personal:
gcloud auth application-default login gcloud config set project 'PROJECT_ID'
Reemplaza PROJECT_ID por el ID de tu proyecto de Google Cloud de destino.
Autentica con un archivo de claves de cuenta de servicio
Usa un archivo de claves de cuenta de servicio en canalizaciones de CI/CD automatizadas (como
Cloud Build, GitHub Actions o Jenkins) en las que no se admite el acceso interactivo de los usuarios
y la autenticación se basa en claves de credenciales de cuentas de servicio de larga
duración. Configura la variable de entorno GOOGLE_APPLICATION_CREDENTIALS en la ruta
del archivo de claves de tu cuenta de servicio:
export GOOGLE_APPLICATION_CREDENTIALS='KEY_FILE'
Reemplaza KEY_FILE por la ruta de acceso a la clave JSON de tu cuenta de servicio.
Revisa la arquitectura modular
Terraform coordina el aprovisionamiento de recursos en cuatro etapas modulares. Este diseño modular aplica un orden estricto de dependencias para garantizar que existan los requisitos previos de las redes antes de implementar hosts de procesamiento, balanceadores de cargas y registros DNS:
+-----------------------------------------------------------------------------------+
| STAGE 1: VPC Network Infrastructure, Firewalls & Cloud DNS (modules/vpc) |
| - Custom VPC Network (MTU 8896 jumbo frames) |
| - VPC Ingress Allow-All Firewall Rule |
| - Dedicated Standard Subnetwork (for DNS inbound resolver) |
| - Cloud DNS Private Forward & Reverse Managed Zones |
| - Cloud DNS Inbound Forwarding Policy (Dynamic DNS_RESOLVER IP discovery) |
+-----------------------------------------------------------------------------------+
│
▼
+-----------------------------------------------------------------------------------+
| STAGE 2: L2 Broadcast Subnetworks & Zonal NEGs (modules/subnets) |
| - Primary Management Subnet (Untagged Native VLAN, ARP broadcast learning) |
| - Storage & Infrastructure Subnets: vSAN (VLAN tagged), vMotion, NSX TEP |
| - Optional Dynamic Workload Subnets |
| - Zonal Network Endpoint Groups (GCE_VM_IP_DEDICATED_BACKEND) for Mgmt & NSX TEP |
+-----------------------------------------------------------------------------------+
│
▼
+-----------------------------------------------------------------------------------+
| STAGE 3: Bare-Metal ESXi Hosts, IP Allocations & Host DNS (modules/hosts) |
| - Compute Resource Placement Policy (Availability Domain Count: 5-8, default: 6) |
| - Universal IP Allocator: Static reservations & dynamic allocation for all NICs |
| - Bare-Metal ESXi Instances (z3-highmem-192-highlssd-metal, 4+ Multi-NICs) |
| - Automated NEG Endpoint Attachments (in cluster_creation mode) |
| - Cloud DNS Forward (A) and Reverse (PTR) Records for all ESXi Hosts |
+-----------------------------------------------------------------------------------+
│
▼
+-----------------------------------------------------------------------------------+
| STAGE 4: Regional Internal Load Balancers & Appliances (modules/appliances) |
| - Regional Backend Services (GARP_RA Fast IP Move HA Policy) |
| - Regional Forwarding Rules (L3_DEFAULT / ALL_PORTS / allow_global_access) |
| - Automated Cloud DNS Forward (A) and Reverse (PTR) Records for Mgmt Appliances |
+-----------------------------------------------------------------------------------+
Aprovisiona recursos para el clúster de administración
El clúster de administración del dominio de administración aloja los dispositivos principales del plano de control de VCF (SDDC Manager, vCenter Server, el clúster de NSX Management y VMware Aria Suite) y los hipervisores de ESXi.
Configura el espacio de trabajo de Terraform
Crea un directorio de espacio de trabajo dedicado y clona el repositorio del kit de herramientas con Git:
mkdir -p ~/vcf-deployments/mgmt-cluster
cd ~/vcf-deployments/mgmt-cluster
git clone https://github.com/GoogleCloudPlatform/self-managed-vmware-solution-toolkit
Configura el archivo de definiciones de variables
Crea tu archivo de definiciones de variables (management_cluster.tfvars) con los
valores de tu entorno de destino. Copia el archivo sample_management_cluster.tfvars del
directorio e2e-terraform en tu archivo management_cluster.tfvars y
sigue las instrucciones y los comentarios intercalados para actualizar los campos según sea necesario:
cp self-managed-vmware-solution-toolkit/e2e-terraform/sample_management_cluster.tfvars \
self-managed-vmware-solution-toolkit/e2e-terraform/management_cluster.tfvars
Aplica la configuración de Terraform
Ve al directorio self-managed-vmware-solution-toolkit/e2e-terraform, inicializa y aplica la configuración de Terraform:
cd self-managed-vmware-solution-toolkit/e2e-terraform
terraform init
terraform plan -var-file='management_cluster.tfvars' -out=tfplan
terraform apply tfplan
Revisa y exporta los resultados de Terraform
Después de ejecutar terraform apply, Terraform expone resultados estructurados en
cuatro categorías:
gcp_resources_self_links: Son las URLs de vínculo propio de recursos de Google Cloud completas para las redes de VPC, las subredes, las instancias, las políticas de posición, los NEG, los servicios de backend, las reglas de reenvío, los firewalls y las zonas de Cloud DNS.neg_attachment_commands:- Cuando la variable
deployment_modese establece en"cluster_creation", se devuelve un mensaje de estado que indica que Terraform adjunta automáticamente los NEG durante la creación del clúster. - Cuando la variable
deployment_modese establece en"node_addition": Proporciona los comandosgcloud compute network-endpoint-groups updatenecesarios para conectar las instancias de host de ESXi recién aprovisionadas a los NEG de administración y NSX. - Cuando la variable
deployment_modese establece en"appliance_addition": Devuelve un mensaje de estado que indica que los NEG permanecen conectados a los nodos de clúster existentes y que Terraform no los modifica durante la adición del dispositivo.
- Cuando la variable
python_scripts_input_config: Es la carga útil de configuración de parámetros estructurados para las secuencias de comandos de automatización de la implementación del instalador de VCF descendente en el directoriopythondel kit de herramientas. Puedes convertir este resultado en el formato JSON que esperan las secuencias de comandos de Python del kit de herramientas ejecutando la secuencia de comandos auxiliar que se describe en la siguiente sección.management_domain_deployment_input_config: Es la entrada estructurada para la implementación del dominio de administración con la mayoría de los campos completados previamente a partir del aprovisionamiento de extremo a extremo. Puedes editar esta entrada cuando sea necesario o se indique, y convertirla en un archivo JSON para la implementación del dominio de administración con la secuencia de comandos de exportación que se describe en la siguiente sección.
Exporta parámetros de configuración de implementación
El kit de herramientas incluye una secuencia de comandos auxiliar (scripts/export_deployment_config.py)
que extrae bloques de configuración de los resultados de Terraform y los exporta a
archivos JSON con formato que cumplen con el esquema para los flujos de trabajo posteriores:
management_domain_deployment_input_config: Es el JSON de entrada para la implementación del dominio de administración de VCF.python_scripts_input_config: Es el JSON de entrada (config.json) para las secuencias de comandos de automatización de Python del kit de herramientas (vcf_deployer).
Ejecuta la secuencia de comandos auxiliar
Ejecuta la secuencia de comandos auxiliar desde el directorio e2e-terraform (o especifica las marcas -d o
-i) eligiendo una de las siguientes opciones:
Exporta ambas configuraciones de forma simultánea:
python3 ../scripts/export_deployment_config.py --config all --output-dir .Este comando genera los siguientes archivos:
management_domain_deployment_input.jsonpython_scripts_input_config.json
Exporta solo el JSON de entrada de implementación del dominio de administración de VCF:
python3 ../scripts/export_deployment_config.py --config mgmt -o management_domain_deployment_input.jsonExporta solo el JSON de entrada del kit de herramientas de Python:
python3 ../scripts/export_deployment_config.py --config python -o config.jsonExporta desde salidas de Terraform guardadas o entrada estándar canalizada (
stdin):# From stdin pipe: terraform output -json | python3 ../scripts/export_deployment_config.py --config all --output-dir . # From a saved JSON file: terraform output -json > outputs.json python3 ../scripts/export_deployment_config.py -i outputs.json --config all --output-dir .
¿Qué sigue?
- Ejecuta el kit de herramientas de preparación de nodos para restablecer la contraseña inicial de ESXi
rooten cada host, preparar los nodos para la implementación de VCF y, luego, implementar el dispositivo de instalación de VCF con el resultado depython_scripts_input_configde la configuración de Terraform de extremo a extremo (convertido en JSON con la secuencia de comandos auxiliar). Para obtener instrucciones, consulta Prepara nodos e implementa VCF con el kit de herramientas. - Configura la conexión al depósito regional sin conexión en el instalador de VCF
para descargar los paquetes de software necesarios:
- Protocolo:
HTTPS - FQDN (no uses una dirección IP):
offline-depot.REGION.selfmanagedvmwareengine.goog(reemplazaREGIONpor la región de Google Cloud en la que residen tus nodos de equipos físicos) - Puerto:
443 - Nombre de usuario:
vcf-depot-user - Contraseña:
Google1!
- Protocolo:
- Implementa el dominio de administración proporcionando el
archivo JSON
management_domain_deployment_input_config(exportado con la secuencia de comandos auxiliar) al instalador de VCF. Asegúrate de reemplazar todos los campos marcados comouser_should_inputen la configuración de entrada por tus valores de destino. Para obtener instrucciones sobre cómo completar el flujo de trabajo de inicio de VCF, consulta Implementa una flota de VCF nueva o una instancia de VCF nueva en la documentación de Broadcom. - Expande la capacidad del clúster agregando nodos en Administra la capacidad de los nodos con Terraform.
- Aprovisiona balanceadores de cargas y registros DNS para dispositivos de VCF adicionales en Agrega dispositivos de VCF con Terraform.