{"id":1647,"date":"2020-12-01T15:05:32","date_gmt":"2020-12-01T21:05:32","guid":{"rendered":"https:\/\/capitalsoftware.com.ni\/?p=1647"},"modified":"2020-12-01T15:05:32","modified_gmt":"2020-12-01T21:05:32","slug":"equilibrio-de-carga-como-servicio-con-vmware-nsx-load-balancer","status":"publish","type":"post","link":"https:\/\/capitalsoftware.com.ni\/?p=1647","title":{"rendered":"Equilibrio de carga como servicio con VMware NSX Load Balancer"},"content":{"rendered":"\n<p>Despu\u00e9s de mi reciente&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/nicovibert.com\/2020\/09\/28\/vmware-infrastructure-as-code-with-hashicorp-terraform\/\" target=\"_blank\">seminario web de HashiCorp<\/a>&nbsp;sobre VMware-As-Code, un colega de VMware con el que no hab\u00eda trabajado antes, se puso en contacto.&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.linkedin.com\/in\/nicolasbayle\/\" target=\"_blank\">Nicolas<\/a>&nbsp;trabaja en el equipo de equilibrio de carga avanzado de VMware NSX (anteriormente conocido como AVI) y adem\u00e1s de compartir un nombre y una nacionalidad, \u00a1ambos compartimos el amor por la automatizaci\u00f3n!<\/p>\n\n\n<p>Comenzamos a trabajar en un proyecto para automatizar la implementaci\u00f3n de la soluci\u00f3n de equilibrio de carga en VMware Cloud on AWS (y la mayor parte se aplica a cualquier entorno de vCenter).<\/p>\n\n\n<p>Puede recordar que escrib\u00ed una&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/nicovibert.com\/2019\/02\/19\/load-balancing-on-vmware-cloud-on-aws\/\" target=\"_blank\">publicaci\u00f3n<\/a>&nbsp;anterior&nbsp;sobre soluciones de equilibrio de carga; antes de la&nbsp;<a href=\"https:\/\/nicovibert.com\/2019\/09\/03\/vmware-acquisitions\/\">adquisici\u00f3n de<\/a>&nbsp;AVI&nbsp;, ya hab\u00eda&nbsp;escrito en un&nbsp;blog sobre la implementaci\u00f3n de AVI en VMware Cloud, pero gran parte de la implementaci\u00f3n era manual y requer\u00eda cierto conocimiento de la arquitectura general de AVI y los conceptos de controladores y motor de servicio.<\/p>\n\n\n<p>Y si bien no fue tan dif\u00edcil, \u00bfno ser\u00eda bueno implementar un equilibrador de carga completamente configurado + una aplicaci\u00f3n de muestra de dos niveles sin esfuerzo absoluto Y con poco o ning\u00fan conocimiento de habilidades de automatizaci\u00f3n?<\/p>\n\n\n<p>Result\u00f3 que Nicolas B ya hab\u00eda realizado una gran cantidad de automatizaci\u00f3n con Avi y vCenter, pero necesit\u00e1bamos probarlo, validarlo y documentarlo con VMware Cloud en AWS.<\/p>\n\n\n<h2 class=\"wp-block-heading\">Requisitos<\/h2>\n\n\n<h3 class=\"wp-block-heading\">Preparando el controlador AVI y las im\u00e1genes de Ubuntu<\/h3>\n\n\n<p>Primero, necesitaremos descargar el controlador AVI.&nbsp;Dir\u00edjase a&nbsp;<a href=\"https:\/\/portal.avinetworks.com\/\">https:\/\/portal.avinetworks.com<\/a>&nbsp;, reg\u00edstrese (desafortunadamente se requiere aprobaci\u00f3n manual, pero es de esperar que el software se traslade pronto a&nbsp;<a href=\"https:\/\/my.vmware.com\/web\/vmware\/home\" target=\"_blank\" rel=\"noreferrer noopener\">my.vmware.com<\/a>&nbsp;), vaya a Software y descargue el controlador OVA.<\/p>\n\n\n<p>Deber\u00eda ser algo como:<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>1<\/td><td><code>controller-20.1.2-9171.ova<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>Tambi\u00e9n le recomendamos que descargue una imagen de Ubuntu, que se utilizar\u00e1 como cuadro de salto y para la aplicaci\u00f3n de muestra.&nbsp;Puedes descargarlo directamente&nbsp;<a href=\"https:\/\/cloud-images.ubuntu.com\/bionic\/current\/bionic-server-cloudimg-amd64.ova\">aqu\u00ed<\/a>&nbsp;.<\/p>\n\n\n<p>Ahora que tiene los OVA descargados, solo necesita cargarlos como plantilla.<\/p>\n\n\n<p>Una de las formas de hacer esto ser\u00eda usar OVFTool y, afortunadamente, William Lam ten\u00eda algunas publicaciones de blog \u00fatiles sobre esto:<\/p>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><a href=\"https:\/\/www.virtuallyghetto.com\/2019\/01\/quick-tip-import-ovf-ova-as-vm-template-using-ovftool-4-3-update-1.html\">Consejo r\u00e1pido: importe OVF \/ OVA como plantilla de m\u00e1quina virtual utilizando OVFTool 4.3 Actualizaci\u00f3n 1<\/a><\/p><\/blockquote>\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><a href=\"https:\/\/www.virtuallyghetto.com\/2018\/06\/ovftool-and-vmware-cloud-on-aws.html\">OVFTool y VMware Cloud en AWS<\/a><\/p><\/blockquote>\n\n\n<p>Por alguna raz\u00f3n (probablemente mis dedos gordos), me tom\u00f3 m\u00e1s tiempo hacer que el script funcionara, as\u00ed que para la posteridad, aqu\u00ed puedes importar f\u00e1cilmente los OVA descargados a VMC.&nbsp;Actualice la configuraci\u00f3n seg\u00fan sea necesario.<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123<\/td><td><code>ovftool.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 <\/code><code>vi<\/code><code>:<\/code><code>\/\/cloudadmin<\/code><code>@vmc.<\/code><code>local<\/code><code>:password@vcenter.sddc-A-B-C-D.vmwarevmc.com<\/code><code>\/SDDC-Datacenter\/host\/Cluster-1\/Resources\/Compute-ResourcePool\/<\/code>&nbsp;<code>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 <\/code><code>vi<\/code><code>:<\/code><code>\/\/cloudadmin<\/code><code>@vmc.<\/code><code>local<\/code><code>:password@vcenter.sddc-A-B-C-D.vmwarevmc.com<\/code><code>\/SDDC-Datacenter\/host\/Cluster-1\/Resources\/Compute-ResourcePool\/<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>Solo aseg\u00farese de tener acceso directo al host ESXi desde la VM que ejecuta OVFtool, como Willian explic\u00f3 en su blog.<\/p>\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/screenshot-2020-11-11-at-15.57.39.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/screenshot-2020-11-11-at-15.57.39.png?w=1024\" alt=\"\" class=\"wp-image-4783\"\/><\/a><figcaption>OVFTool<\/figcaption><\/figure>\n\n\n<p>Alternativamente, implemente la VM desde OVF y convi\u00e9rtala en una plantilla.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Configuraci\u00f3n del acceso a vCenter y ESXi<\/h3>\n\n\n<p>Solo aseg\u00farese de permitir el acceso a vCenter y ESXi para el aprovisionamiento:<\/p>\n\n\n<figure class=\"wp-block-image\"><a href=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/screenshot-2020-11-17-at-10.29.52.png\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/screenshot-2020-11-17-at-10.29.52.png?w=1024\" alt=\"\" class=\"wp-image-4793\"\/><\/a><figcaption>Acceso a vCenter<\/figcaption><\/figure>\n\n\n<h3 class=\"wp-block-heading\">Configurar las variables<\/h3>\n\n\n<p>En mi Mac, ser\u00eda simplemente<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456<\/td><td><code>export TF_VAR_vmc_nsx_server=<a href=\"https:\/\/nsx-1-2-3-4.rp.vmwarevmc.com\/vmc\/reverse-proxy\/api\/orgs\/aaaa-bbbb-cccc-dddd\/sddcs\/eeee-ffff-gggg-hhhh\">https:\/\/nsx-1-2-3-4.rp.vmwarevmc.com\/vmc\/reverse-proxy\/api\/orgs\/aaaa-bbbb-cccc-dddd\/sddcs\/eeee-ffff-gggg-hhhh<\/a><\/code><code>export TF_VAR_vmc_nsx_token=XXXXXXXXXXXXXXXXXXXXXXXXX<\/code><code>export TF_VAR_vmc_org_id=aaaa-bbbbb-ccccc-ddddd<\/code><code>export TF_VAR_vmc_vsphere_password=password<\/code><code>export TF_VAR_vmc_vsphere_server=vcenter.sddc-1-2-3-4.vmwarevmc.com<\/code><code>export TF_VAR_vmc_vsphere_user=cloudadmin@vmc.local<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>Si la contrase\u00f1a incluye un car\u00e1cter que no le gusta a la Terminal Mac, envuelva las contrase\u00f1as con el s\u00edmbolo &#8216;.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Establecer la clave p\u00fablica<\/h3>\n\n\n<p>Debe configurar un par de claves RSA para habilitar la conectividad entre el host de salto y el controlador.&nbsp;La forma m\u00e1s sencilla de hacerlo es con&nbsp;<strong>ssh-keygen<\/strong>&nbsp;:<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112131415diecis\u00e9is1718192021<\/td><td><code>root@terraform-test:~\/aviVMC# ssh-keygen<\/code><code>Generating public\/private rsa key pair.<\/code><code>Enter file in which to save the key (\/root\/.ssh\/id_rsa): cloudKey&nbsp;&nbsp;&nbsp; <\/code><code>Enter passphrase (empty for no passphrase): <\/code><code>Enter same passphrase again: <\/code><code>Your identification has been saved in cloudKey.<\/code><code>Your public key has been saved in cloudKey.pub.<\/code><code>The key fingerprint is:<\/code><code>SHA256:----------------------- root@terraform-test<\/code><code>The key's randomart image is:<\/code><code>+---[RSA 2048]----+<\/code><code>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<\/code><code>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; o .&nbsp;&nbsp; |<\/code><code>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = + o&nbsp; |<\/code><code>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = o o&nbsp;&nbsp; |<\/code><code>|&nbsp;&nbsp;&nbsp; +&nbsp;&nbsp; S @ o&nbsp;&nbsp;&nbsp; |<\/code><code>|&nbsp; .X . o ^ B +&nbsp;&nbsp; |<\/code><code>|&nbsp; oo=.o = X + .&nbsp; |<\/code><code>| ...o o+ . +&nbsp;&nbsp;&nbsp;&nbsp; |<\/code><code>|&nbsp; oo.o..E .&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |<\/code><code>+----[SHA256]-----+<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>Solo tome nota de d\u00f3nde est\u00e1 implementando la clave, ya que es posible que necesite actualizar la ruta.<\/p>\n\n\n<h3 class=\"wp-block-heading\">Instalaci\u00f3n de Terraform<\/h3>\n\n\n<p>La herramienta aprovecha Terraform.&nbsp;Si bien no&nbsp;<em>necesita<\/em>&nbsp;conocer Terraform para aprovechar esta herramienta, deber\u00e1&nbsp;<a href=\"https:\/\/learn.hashicorp.com\/tutorials\/terraform\/install-cli\" target=\"_blank\" rel=\"noreferrer noopener\">instalar Terraform<\/a>&nbsp;en su cliente.<\/p>\n\n\n<h2 class=\"wp-block-heading\">Prepar\u00e1ndose<\/h2>\n\n\n<p>Ya casi llegamos, solo ve a tu terminal y clona el&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/tacobayle\/aviVmc\" target=\"_blank\">repositorio de<\/a>&nbsp;GitHub&nbsp;con el c\u00f3digo (esta publicaci\u00f3n de blog se basa en la&nbsp;versi\u00f3n del repositorio&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/tacobayle\/aviVmc\/releases\/tag\/v1.08\" target=\"_blank\">v1.08<\/a>&nbsp;):<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><code>git clone https:<\/code><code>\/\/github<\/code><code>.com<\/code><code>\/tacobayle\/aviVmc<\/code> <code>; <\/code><code>cd<\/code> <code>aviVmc<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>En&nbsp;<strong>variables.tf<\/strong>&nbsp;, solo necesitar\u00e1 actualizar la ruta a quien haya creado el par de claves; para m\u00ed, signific\u00f3 hacer esto:<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123<\/td><td><code>public_key_path = \"cloudKey.pub\"<\/code>&nbsp;<code>private_key_path = \"cloudKey\"<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>Todo lo dem\u00e1s, puedes dejarlo como est\u00e1.&nbsp;Por supuesto, puede actualizar el script como mejor le parezca.<\/p>\n\n\n<h2 class=\"wp-block-heading\">\u00a1Vamonos!<\/h2>\n\n\n<p>Ahora solo se requieren dos comandos:&nbsp;<strong>terraform init<\/strong>&nbsp;:<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112131415diecis\u00e9is17181920212223242526272829303132333435<\/td><td><code>nvibert-a01:aviVmc nicolasvibert$ terraform init<\/code>&nbsp;<code>Initializing the backend...<\/code>&nbsp;<code>Initializing provider plugins...<\/code><code>- Using previously-installed hashicorp\/null v3.0.0<\/code><code>- Using previously-installed hashicorp\/template v2.2.0<\/code><code>- Using previously-installed terraform-providers\/nsxt v3.1.0<\/code><code>- Using previously-installed hashicorp\/vsphere v1.24.2<\/code><code>- Using previously-installed hashicorp\/time v0.6.0<\/code><code>- Using previously-installed terraform-providers\/vmc v1.4.0<\/code>&nbsp;<code>The following providers do not have any version constraints in configuration,<\/code><code>so the latest version was installed.<\/code>&nbsp;<code>To prevent automatic upgrades to new major versions that may contain breaking<\/code><code>changes, we recommend adding version constraints in a required_providers block<\/code><code>in your configuration, with the constraint strings suggested below.<\/code>&nbsp;<code>* hashicorp\/null: version = \"~&gt; 3.0.0\"<\/code><code>* hashicorp\/template: version = \"~&gt; 2.2.0\"<\/code><code>* hashicorp\/time: version = \"~&gt; 0.6.0\"<\/code><code>* hashicorp\/vsphere: version = \"~&gt; 1.24.2\"<\/code><code>* terraform-providers\/nsxt: version = \"~&gt; 3.1.0\"<\/code><code>* terraform-providers\/vmc: version = \"~&gt; 1.4.0\"<\/code>&nbsp;<code>Terraform has been successfully initialized!<\/code>&nbsp;<code>You may now begin working with Terraform. Try running \"terraform plan\" to see<\/code><code>any changes that are required for your infrastructure. All Terraform commands<\/code><code>should now work.<\/code>&nbsp;<code>If you ever set or change modules or backend configuration for Terraform,<\/code><code>rerun this command to reinitialize your working directory. If you forget, other<\/code><code>commands will detect it and remind you to do so if necessary.<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>Ahora est\u00e1 listo para crear todos los recursos:<\/p>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>123456789101112131415diecis\u00e9is171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364sesenta y cinco6667<\/td><td><code>nvibert-a01:aviVmc nicolasvibert$ terraform apply<\/code><code>var.avi_password<\/code><code>Enter a value: VMware1!VMware1!<\/code>&nbsp;<code>var.vmc_vsphere_password<\/code><code>Enter a value: mvA*u!S3VY8GxsL<\/code>&nbsp;<code>data.template_file.jumpbox_userdata: Refreshing state...<\/code><code>data.template_file.mysql_userdata[0]: Refreshing state...<\/code><code>data.template_file.opencart_userdata[0]: Refreshing state...<\/code><code>data.template_file.opencart_userdata[1]: Refreshing state...<\/code><code>data.template_file.backend_userdata[0]: Refreshing state...<\/code><code>data.template_file.backend_userdata[1]: Refreshing state...<\/code><code>data.template_file.client_userdata[0]: Refreshing state...<\/code><code>data.vsphere_datacenter.dc: Refreshing state...<\/code><code>data.vsphere_virtual_machine.client: Refreshing state...<\/code><code>data.vsphere_compute_cluster.compute_cluster: Refreshing state...<\/code><code>data.vsphere_virtual_machine.backend: Refreshing state...<\/code><code>data.vsphere_virtual_machine.mysql: Refreshing state...<\/code><code>data.vsphere_datastore.datastore: Refreshing state...<\/code><code>data.vsphere_virtual_machine.opencart: Refreshing state...<\/code><code>data.vsphere_virtual_machine.controller_template: Refreshing state...<\/code><code>data.vsphere_resource_pool.pool: Refreshing state...<\/code><code>data.vsphere_virtual_machine.jump: Refreshing state...<\/code><code>data.nsxt_policy_transport_zone.tzMgmt: Refreshing state...<\/code>&nbsp;<code>An execution plan has been generated and is shown below.<\/code><code>Resource actions are indicated with the following symbols:<\/code><code>+ create<\/code><code>&lt;= read (data resources)<\/code>&nbsp;<code>Terraform will perform the following actions:<\/code>&nbsp;<code># data.vsphere_network.networkBackend will be read during apply<\/code><code># (config refers to values not yet known)<\/code><code>&lt;= data \"vsphere_network\" \"networkBackend\"&nbsp; {<\/code><code>+ datacenter_id = \"datacenter-3\"<\/code><code>+ id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (known after apply)<\/code><code>+ name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = \"avi-backend\"<\/code><code>+ type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (known after apply)<\/code><code>}<\/code>&nbsp;<code># data.vsphere_network.networkMgmt will be read during apply<\/code><code># (config refers to values not yet known)<\/code><code>&lt;= data \"vsphere_network\" \"networkMgmt\"&nbsp; {<\/code><code>+ datacenter_id = \"datacenter-3\"<\/code><code>+ id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (known after apply)<\/code><code>+ name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = \"avi-mgmt\"<\/code><code>+ type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = (known after apply)<\/code><code>}<\/code>&nbsp;&nbsp;<code>Plan: 55 to add, 0 to change, 0 to destroy.<\/code>&nbsp;<code>Do you want to perform these actions?<\/code><code>Terraform will perform the actions described above.<\/code><code>Only 'yes' will be accepted to approve.<\/code>&nbsp;<code>Enter a value: yes<\/code>&nbsp;<code>vsphere_tag_category.ansible_group_jump: Creating...<\/code><code>vsphere_tag_category.ansible_group_opencart: Creating...<\/code><code>vsphere_tag_category.ansible_group_client: Creating...<\/code><code>vsphere_tag_category.ansible_group_mysql: Creating...<\/code><code>vsphere_tag_category.ansible_group_controller: Creating...<\/code><code>vsphere_folder.folderSe: Creating...<\/code><code>vsphere_tag_category.ansible_group_backend: Creating...<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n<p>Este script es bastante extenso y har\u00e1 lo siguiente:<\/p>\n\n\n<ul class=\"wp-block-list\"><li>Cree 2 carpetas dentro de vCenter<\/li><li>Cree 7 grupos NSX-T<\/li><li>Cree 3 segmentos NSX-T<\/li><li>Cree 12 etiquetas de vSphere<\/li><li>Encienda 1 m\u00e1quina virtual de Avi Controller<\/li><li>Activa 2 VM de backend<\/li><li>Gire 2 m\u00e1quinas virtuales web opencart<\/li><li>Encienda 1 m\u00e1quina virtual mysql<\/li><li>Activar 1 VM de cliente<\/li><li>Gire 1 salto VM con ansible instalado: datos de usuario para instalar paquetes<\/li><li>Solicite 6 IP p\u00fablicas para Jump host, Controller y Virtual Services<\/li><li>Cree 6 reglas NAT de NSX-T para servicios virtuales, controlador y host de salto<\/li><li>Cree 7 grupos de pol\u00edticas NSX-T para Jump host, Controller y servicios virtuales<\/li><li>Cree 2 servicios NSX-T para servicios virtuales (solo HTTP (tcp \/ 80 y tcp \/ 443) y DNS (udp \/ 53))<\/li><li>Cree 7 pol\u00edticas de puerta de enlace de NSX-T para servicios virtuales, controladores y host de salto<\/li><li>Cree un archivo de variable yaml &#8211; en el servidor de salto<\/li><li>Llame a Ansible para ejecutar la configuraci\u00f3n de opencart (clon de git)<\/li><li>Llame a Ansible para hacer la configuraci\u00f3n de Avi (git clone)<\/li><\/ul>\n\n\n<h2 class=\"wp-block-heading\">\u00a1Resultados!<\/h2>\n\n\n<p>Los resultados son bastante espectaculares, revis\u00e9moslos.<\/p>\n\n\n<p>Toda la configuraci\u00f3n de redes y VMC se realiza con Terraform y las API:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-11-11.png?w=1024\" alt=\"\" class=\"wp-image-4979\"\/><figcaption>Configuraci\u00f3n SDDC<\/figcaption><\/figure>\n\n\n<p>vCenter se ha configurado con VM, etiquetas y categor\u00edas:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-11-33-1.png?w=1024\" alt=\"\" class=\"wp-image-4987\"\/><figcaption>Las m\u00e1quinas virtuales est\u00e1n implementadas &#8230;<\/figcaption><\/figure>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-11-59-1.gif?w=1024\" alt=\"\" class=\"wp-image-4986\"\/><figcaption>\u2026 Y est\u00e1n etiquetados como se esperaba.<\/figcaption><\/figure>\n\n\n<p>Y se han implementado dos aplicaciones de muestra.&nbsp;La primera es una \u00abtienda de aplicaciones\u00bb de c\u00f3digo abierto de aspecto muy inteligente llamada&nbsp;<a href=\"https:\/\/www.opencart.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Opencart<\/a>&nbsp;:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/screenshot-2020-11-26-at-15.08.39.png?w=1024\" alt=\"\" class=\"wp-image-4991\"\/><\/figure>\n\n\n<p>La segunda es una aplicaci\u00f3n de carga equilibrada muy simple:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-17-24-1-1.gif?w=1024\" alt=\"\" class=\"wp-image-4996\"\/><\/figure>\n\n\n<p>\u00bfQu\u00e9 pasa con AVI?&nbsp;Bueno, tanto el plano de control (controlador AVI) como el plano de datos (motores de servicio AVI) se han implementado autom\u00e1ticamente.&nbsp;Puede ver a continuaci\u00f3n los grupos de equilibradores de carga:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-20-16.png?w=1024\" alt=\"\" class=\"wp-image-5002\"\/><\/figure>\n\n\n<p>Las IP virtuales:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-20-34.png?w=1024\" alt=\"\" class=\"wp-image-5001\"\/><\/figure>\n\n\n<p>Y los motores de servicio:<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-21-15.png?w=1024\" alt=\"\" class=\"wp-image-5000\"\/><\/figure>\n\n\n<p>Y lo que es a\u00fan m\u00e1s sorprendente es el nivel de visibilidad que obtiene de cada servicio: \u00a1impresionante!<\/p>\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/nicovmc.files.wordpress.com\/2020\/11\/2020-11-26_15-23-56.png?w=1024\" alt=\"\" class=\"wp-image-4999\"\/><\/figure>\n\n\n<h2 class=\"wp-block-heading\">Video gu\u00eda<\/h2>\n\n\n<p>En este primer video, Nic y yo repasamos los preparativos y los requisitos&#8230;<\/p>\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/videos.files.wordpress.com\/0CXrkQYl\/vmc-avi-before_dvd.mp4\"><\/video><\/figure>\n\n\n<p>Volvemos media hora despu\u00e9s para ver la infraestructura desplegada por el script <\/p>\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/videos.files.wordpress.com\/T6HHMLp2\/vmc-avi-after-part-1_dvd.mp4\"><\/video><\/figure>\n\n\n<p>Y finalmente, repasamos las aplicaciones desplegadas del script y la gran visibilidad que brinda el AVI Load-Balancer<\/p>\n\n\n<figure class=\"wp-block-video\"><video controls src=\"https:\/\/videos.files.wordpress.com\/izISn3Nu\/vmc-avi-after-part-2_dvd.mp4\"><\/video><\/figure>\n\n\n<p>\u00a1Gracias por leer y mirar!\u00a0Si tiene alg\u00fan comentario sobre la herramienta, con\u00e9ctese en Twitter, LinkedIn o mediante GitHub.<\/p>\n\n\n<p>Fuente: Blog de <a href=\"https:\/\/nicovibert.com\/2020\/11\/30\/load-balancing-as-a-service-with-vmware\/\">Nico Vibert<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Despu\u00e9s de mi reciente&nbsp;seminario web de HashiCorp&nbsp;sobre VMware-As-Code, un colega de VMware con el que no hab\u00eda trabajado antes, se puso en contacto.&nbsp;Nicolas&nbsp;trabaja en el equipo de equilibrio de carga avanzado de VMware NSX (anteriormente conocido como AVI) y adem\u00e1s de compartir un nombre y una nacionalidad, \u00a1ambos compartimos el amor por la automatizaci\u00f3n! Comenzamos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1647","post","type-post","status-publish","format-standard","hentry","category-sin-categoria"],"_links":{"self":[{"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=\/wp\/v2\/posts\/1647","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1647"}],"version-history":[{"count":0,"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=\/wp\/v2\/posts\/1647\/revisions"}],"wp:attachment":[{"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1647"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1647"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/capitalsoftware.com.ni\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1647"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}<br />
<b>Fatal error</b>:  Uncaught wfWAFStorageFileException: Unable to save temporary file for atomic writing. in /home/ubuntu/public_html/capitalsoftware_com_ni/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php:34
Stack trace:
#0 /home/ubuntu/public_html/capitalsoftware_com_ni/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php(658): wfWAFStorageFile::atomicFilePutContents()
#1 [internal function]: wfWAFStorageFile-&gt;saveConfig()
#2 {main}
  thrown in <b>/home/ubuntu/public_html/capitalsoftware_com_ni/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php</b> on line <b>34</b><br />
