fbpx
Capital Software

Equilibrio de carga como servicio con VMware NSX Load Balancer

Después de mi reciente seminario web de HashiCorp sobre VMware-As-Code, un colega de VMware con el que no había trabajado antes, se puso en contacto. Nicolas trabaja en el equipo de equilibrio de carga avanzado de VMware NSX (anteriormente conocido como AVI) y además de compartir un nombre y una nacionalidad, ¡ambos compartimos el amor por la automatización!

Comenzamos a trabajar en un proyecto para automatizar la implementación de la solución de equilibrio de carga en VMware Cloud on AWS (y la mayor parte se aplica a cualquier entorno de vCenter).

Puede recordar que escribí una publicación anterior sobre soluciones de equilibrio de carga; antes de la adquisición de AVI , ya había escrito en un blog sobre la implementación de AVI en VMware Cloud, pero gran parte de la implementación era manual y requería cierto conocimiento de la arquitectura general de AVI y los conceptos de controladores y motor de servicio.

Y si bien no fue tan difícil, ¿no sería bueno implementar un equilibrador de carga completamente configurado + una aplicación de muestra de dos niveles sin esfuerzo absoluto Y con poco o ningún conocimiento de habilidades de automatización?

Resultó que Nicolas B ya había realizado una gran cantidad de automatización con Avi y vCenter, pero necesitábamos probarlo, validarlo y documentarlo con VMware Cloud en AWS.

Requisitos

Preparando el controlador AVI y las imágenes de Ubuntu

Primero, necesitaremos descargar el controlador AVI. Diríjase a https://portal.avinetworks.com , regístrese (desafortunadamente se requiere aprobación manual, pero es de esperar que el software se traslade pronto a my.vmware.com ), vaya a Software y descargue el controlador OVA.

Debería ser algo como:

1controller-20.1.2-9171.ova

También le recomendamos que descargue una imagen de Ubuntu, que se utilizará como cuadro de salto y para la aplicación de muestra. Puedes descargarlo directamente aquí .

Ahora que tiene los OVA descargados, solo necesita cargarlos como plantilla.

Una de las formas de hacer esto sería usar OVFTool y, afortunadamente, William Lam tenía algunas publicaciones de blog útiles sobre esto:

Consejo rápido: importe OVF / OVA como plantilla de máquina virtual utilizando OVFTool 4.3 Actualización 1

OVFTool y VMware Cloud en AWS

Por alguna razón (probablemente mis dedos gordos), me tomó más tiempo hacer que el script funcionara, así que para la posteridad, aquí puedes importar fácilmente los OVA descargados a VMC. Actualice la configuración según sea necesario.

123ovftool.exe --acceptAllEulas --allowAllExtraConfig --name=controller-20.1.1-9071-template --datastore=WorkloadDatastore --network:EMEA-VMC-TEST-01 --vmFolder=Templates --importAsTemplate C:\Users\nvibert\Downloads\controller-20.1.2-9171.ova vi://cloudadmin@vmc.local:[email protected]/SDDC-Datacenter/host/Cluster-1/Resources/Compute-ResourcePool/ ovftool.exe --acceptAllEulas --allowAllExtraConfig --name=ubuntu-bionic-18.04-cloudimg-template --datastore=WorkloadDatastore --network:EMEA-VMC-TEST-01 --vmFolder=Templates --importAsTemplate C:\Users\nvibert\Downloads\bionic-server-cloudimg-amd64.ova vi://cloudadmin@vmc.local:[email protected]/SDDC-Datacenter/host/Cluster-1/Resources/Compute-ResourcePool/

Solo asegúrese de tener acceso directo al host ESXi desde la VM que ejecuta OVFtool, como Willian explicó en su blog.

OVFTool

Alternativamente, implemente la VM desde OVF y conviértala en una plantilla.

Configuración del acceso a vCenter y ESXi

Solo asegúrese de permitir el acceso a vCenter y ESXi para el aprovisionamiento:

Acceso a vCenter

Configurar las variables

En mi Mac, sería simplemente

123456export TF_VAR_vmc_nsx_server=https://nsx-1-2-3-4.rp.vmwarevmc.com/vmc/reverse-proxy/api/orgs/aaaa-bbbb-cccc-dddd/sddcs/eeee-ffff-gggg-hhhhexport TF_VAR_vmc_nsx_token=XXXXXXXXXXXXXXXXXXXXXXXXXexport TF_VAR_vmc_org_id=aaaa-bbbbb-ccccc-dddddexport TF_VAR_vmc_vsphere_password=passwordexport TF_VAR_vmc_vsphere_server=vcenter.sddc-1-2-3-4.vmwarevmc.comexport [email protected]

Si la contraseña incluye un carácter que no le gusta a la Terminal Mac, envuelva las contraseñas con el símbolo ‘.

Establecer la clave pública

Debe configurar un par de claves RSA para habilitar la conectividad entre el host de salto y el controlador. La forma más sencilla de hacerlo es con ssh-keygen :

123456789101112131415dieciséis1718192021root@terraform-test:~/aviVMC# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): cloudKey    Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in cloudKey.Your public key has been saved in cloudKey.pub.The key fingerprint is:SHA256:----------------------- root@terraform-testThe key's randomart image is:+---[RSA 2048]----+|                 ||           o .   ||          = + o  ||         = o o   ||    +   S @ o    ||  .X . o ^ B +   ||  oo=.o = X + .  || ...o o+ . +     ||  oo.o..E .      |+----[SHA256]-----+

Solo tome nota de dónde está implementando la clave, ya que es posible que necesite actualizar la ruta.

Instalación de Terraform

La herramienta aprovecha Terraform. Si bien no necesita conocer Terraform para aprovechar esta herramienta, deberá instalar Terraform en su cliente.

Preparándose

Ya casi llegamos, solo ve a tu terminal y clona el repositorio de GitHub con el código (esta publicación de blog se basa en la versión del repositorio v1.08 ):

git clone https://github.com/tacobayle/aviVmc ; cd aviVmc

En variables.tf , solo necesitará actualizar la ruta a quien haya creado el par de claves; para mí, significó hacer esto:

123public_key_path = "cloudKey.pub" private_key_path = "cloudKey"

Todo lo demás, puedes dejarlo como está. Por supuesto, puede actualizar el script como mejor le parezca.

¡Vamonos!

Ahora solo se requieren dos comandos: terraform init :

123456789101112131415dieciséis17181920212223242526272829303132333435nvibert-a01:aviVmc nicolasvibert$ terraform init Initializing the backend... Initializing provider plugins...- Using previously-installed hashicorp/null v3.0.0- Using previously-installed hashicorp/template v2.2.0- Using previously-installed terraform-providers/nsxt v3.1.0- Using previously-installed hashicorp/vsphere v1.24.2- Using previously-installed hashicorp/time v0.6.0- Using previously-installed terraform-providers/vmc v1.4.0 The following providers do not have any version constraints in configuration,so the latest version was installed. To prevent automatic upgrades to new major versions that may contain breakingchanges, we recommend adding version constraints in a required_providers blockin your configuration, with the constraint strings suggested below. * hashicorp/null: version = "~> 3.0.0"* hashicorp/template: version = "~> 2.2.0"* hashicorp/time: version = "~> 0.6.0"* hashicorp/vsphere: version = "~> 1.24.2"* terraform-providers/nsxt: version = "~> 3.1.0"* terraform-providers/vmc: version = "~> 1.4.0" Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to seeany changes that are required for your infrastructure. All Terraform commandsshould now work. If you ever set or change modules or backend configuration for Terraform,rerun this command to reinitialize your working directory. If you forget, othercommands will detect it and remind you to do so if necessary.

Ahora está listo para crear todos los recursos:

123456789101112131415dieciséis171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364sesenta y cinco6667nvibert-a01:aviVmc nicolasvibert$ terraform applyvar.avi_passwordEnter a value: VMware1!VMware1! var.vmc_vsphere_passwordEnter a value: mvA*u!S3VY8GxsL data.template_file.jumpbox_userdata: Refreshing state...data.template_file.mysql_userdata[0]: Refreshing state...data.template_file.opencart_userdata[0]: Refreshing state...data.template_file.opencart_userdata[1]: Refreshing state...data.template_file.backend_userdata[0]: Refreshing state...data.template_file.backend_userdata[1]: Refreshing state...data.template_file.client_userdata[0]: Refreshing state...data.vsphere_datacenter.dc: Refreshing state...data.vsphere_virtual_machine.client: Refreshing state...data.vsphere_compute_cluster.compute_cluster: Refreshing state...data.vsphere_virtual_machine.backend: Refreshing state...data.vsphere_virtual_machine.mysql: Refreshing state...data.vsphere_datastore.datastore: Refreshing state...data.vsphere_virtual_machine.opencart: Refreshing state...data.vsphere_virtual_machine.controller_template: Refreshing state...data.vsphere_resource_pool.pool: Refreshing state...data.vsphere_virtual_machine.jump: Refreshing state...data.nsxt_policy_transport_zone.tzMgmt: Refreshing state... An execution plan has been generated and is shown below.Resource actions are indicated with the following symbols:+ create<= read (data resources) Terraform will perform the following actions: # data.vsphere_network.networkBackend will be read during apply# (config refers to values not yet known)<= data "vsphere_network" "networkBackend"  {+ datacenter_id = "datacenter-3"+ id            = (known after apply)+ name          = "avi-backend"+ type          = (known after apply)} # data.vsphere_network.networkMgmt will be read during apply# (config refers to values not yet known)<= data "vsphere_network" "networkMgmt"  {+ datacenter_id = "datacenter-3"+ id            = (known after apply)+ name          = "avi-mgmt"+ type          = (known after apply)}  Plan: 55 to add, 0 to change, 0 to destroy. Do you want to perform these actions?Terraform will perform the actions described above.Only 'yes' will be accepted to approve. Enter a value: yes vsphere_tag_category.ansible_group_jump: Creating...vsphere_tag_category.ansible_group_opencart: Creating...vsphere_tag_category.ansible_group_client: Creating...vsphere_tag_category.ansible_group_mysql: Creating...vsphere_tag_category.ansible_group_controller: Creating...vsphere_folder.folderSe: Creating...vsphere_tag_category.ansible_group_backend: Creating...

Este script es bastante extenso y hará lo siguiente:

  • Cree 2 carpetas dentro de vCenter
  • Cree 7 grupos NSX-T
  • Cree 3 segmentos NSX-T
  • Cree 12 etiquetas de vSphere
  • Encienda 1 máquina virtual de Avi Controller
  • Activa 2 VM de backend
  • Gire 2 máquinas virtuales web opencart
  • Encienda 1 máquina virtual mysql
  • Activar 1 VM de cliente
  • Gire 1 salto VM con ansible instalado: datos de usuario para instalar paquetes
  • Solicite 6 IP públicas para Jump host, Controller y Virtual Services
  • Cree 6 reglas NAT de NSX-T para servicios virtuales, controlador y host de salto
  • Cree 7 grupos de políticas NSX-T para Jump host, Controller y servicios virtuales
  • Cree 2 servicios NSX-T para servicios virtuales (solo HTTP (tcp / 80 y tcp / 443) y DNS (udp / 53))
  • Cree 7 políticas de puerta de enlace de NSX-T para servicios virtuales, controladores y host de salto
  • Cree un archivo de variable yaml – en el servidor de salto
  • Llame a Ansible para ejecutar la configuración de opencart (clon de git)
  • Llame a Ansible para hacer la configuración de Avi (git clone)

¡Resultados!

Los resultados son bastante espectaculares, revisémoslos.

Toda la configuración de redes y VMC se realiza con Terraform y las API:

Configuración SDDC

vCenter se ha configurado con VM, etiquetas y categorías:

Las máquinas virtuales están implementadas …
… Y están etiquetados como se esperaba.

Y se han implementado dos aplicaciones de muestra. La primera es una «tienda de aplicaciones» de código abierto de aspecto muy inteligente llamada Opencart :

La segunda es una aplicación de carga equilibrada muy simple:

¿Qué pasa con AVI? Bueno, tanto el plano de control (controlador AVI) como el plano de datos (motores de servicio AVI) se han implementado automáticamente. Puede ver a continuación los grupos de equilibradores de carga:

Las IP virtuales:

Y los motores de servicio:

Y lo que es aún más sorprendente es el nivel de visibilidad que obtiene de cada servicio: ¡impresionante!

Video guía

En este primer video, Nic y yo repasamos los preparativos y los requisitos…

Volvemos media hora después para ver la infraestructura desplegada por el script

Y finalmente, repasamos las aplicaciones desplegadas del script y la gran visibilidad que brinda el AVI Load-Balancer

¡Gracias por leer y mirar! Si tiene algún comentario sobre la herramienta, conéctese en Twitter, LinkedIn o mediante GitHub.

Fuente: Blog de Nico Vibert

Abrir chat
1
Escanea el código
Hola, bienvenido a Capital Software, somos una empresa de soluciones informáticas. ¿En qué podemos ayudarte hoy?