{"id":3506,"date":"2020-08-25T11:44:13","date_gmt":"2020-08-25T11:44:13","guid":{"rendered":"https:\/\/bluetab.net\/?p=3506"},"modified":"2020-08-25T11:44:13","modified_gmt":"2020-08-25T11:44:13","slug":"introduccion-a-los-productos-de-hashicorp","status":"publish","type":"post","link":"https:\/\/bluetab.es\/en\/2020\/08\/introduccion-a-los-productos-de-hashicorp\/","title":{"rendered":"Introducci\u00f3n a los productos de HashiCorp"},"content":{"rendered":"<h1>Introducci\u00f3n a los productos de HashiCorp<\/h1>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/jorge-de-diego\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego-150x150.jpg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego-150x150.jpg 150w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego-75x75.jpg 75w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego.jpg 200w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/a><\/figure>\n<h4><a href=\"https:\/\/www.linkedin.com\/in\/jorge-de-diego\/\" target=\"_blank\" rel=\"noopener\">Jorge de Diego<\/a><\/h4>\n<p>Cloud DevOps Engineer<\/p>\n<p>Share on twitter<br \/>\nShare on linkedin<\/p>\n<p>Desde la\u00a0<strong>Pr\u00e1ctica Cloud<\/strong>\u00a0queremos impulsar el uso de los productos\u00a0<strong>Hashicorp<\/strong>\u00a0y por ello vamos a publicar art\u00edculos tem\u00e1ticos sobre cada uno de ellos.<\/p>\n<p>Debido a la multitud de posibilidades que ofrecen sus productos, en \u00e9ste art\u00edculo abordaremos una\u00a0<strong>visi\u00f3n de conjunto<\/strong>\u00a0y en publicaciones posteriores, entraremos en detalle de cada uno de ellos, aportando casos de uso no convencionales que muestren el potencial que tienen los productos de Hashicorp.<\/p>\n<h2>\u00bfPor qu\u00e9 Hashicorp?<\/h2>\n<p>Durante estos \u00faltimos a\u00f1os, Hashicorp viene desarrollando diferentes productos\u00a0<strong>Open Source<\/strong>\u00a0los cuales ofrecen una\u00a0<strong>gesti\u00f3n transversal de la infraestructura en entornos Cloud y on-premises<\/strong>. Estos productos, han marcado est\u00e1ndares en la automatizaci\u00f3n de infraestructura.<\/p>\n<p>En la actualidad, sus productos aportan soluciones robustas en los \u00e1mbitos del\u00a0<strong>aprovisionamiento, seguridad, interconexi\u00f3n y coordinaci\u00f3n de cargas de trabajo<\/strong>.<\/p>\n<p>El\u00a0<a href=\"https:\/\/github.com\/hashicorp\">c\u00f3digo fuente<\/a>\u00a0de sus productos est\u00e1 liberado bajo licencia MIT, lo cual ha tenido una gran acogida dentro de la comunidad Open Source (cuentan con m\u00e1s de 100 desarrolladores aportando mejoras de forma continua)<\/p>\n<p>Adem\u00e1s de los productos que expondremos en este art\u00edculo, disponen de interesantes\u00a0<a href=\"https:\/\/www.hashicorp.com\/solutions\/cloud-infrastructure-automation\/\">soluciones\u00a0<em>Enterprise<\/em><\/a>.<\/p>\n<p>Respecto al impacto que tienen sus soluciones, poniendo como ejemplo Terraform, se ha convertido en un referente en el mercado. Esto significa que Hashicorp est\u00e1 haciendo las cosas bien, por lo que es conveniente entender y aprender a usar sus soluciones.<\/p>\n<p>Aunque nos estemos centrando en su uso en el \u00e1mbito Cloud, sus soluciones tiene gran presencia en los entornos\u00a0<em>on-premises<\/em>, pero alcanzan todo su potencial cuando trabajamos en la nube.<\/p>\n<h2>\u00bfCu\u00e1les son estos productos?<\/h2>\n<p><img decoding=\"async\" width=\"1024\" height=\"213\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/productos-1024x213.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/productos-1024x213.png 1024w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/productos-300x62.png 300w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/productos-768x160.png 768w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/productos.png 1101w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Hashicorp cuenta con los siguientes productos:<\/p>\n<ul>\n<li><strong>Terraform<\/strong>: infraestructura como c\u00f3digo.<\/li>\n<li><strong>Vagrant<\/strong>: m\u00e1quinas virtuales para entornos de pruebas.<\/li>\n<li><strong>Packer<\/strong>: construcci\u00f3n de im\u00e1genes de forma automatizada.<\/li>\n<li><strong>Nomad<\/strong>: \u201corquestador\u201d de cargas de trabajo.<\/li>\n<li><strong>Vault<\/strong>: gesti\u00f3n de secretos y protecci\u00f3n de datos.<\/li>\n<li><strong>Consul<\/strong>: gesti\u00f3n y descubrimiento de servicios en entornos distribuidos.<\/li>\n<\/ul>\n<p>A continuaci\u00f3n, resumimos las principales caracter\u00edsticas de los productos. En pr\u00f3ximas publicaciones entraremos en detalle de cada uno de ellos.<\/p>\n<p><img decoding=\"async\" width=\"312\" height=\"75\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/terraform.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/terraform.png 312w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/terraform-300x72.png 300w\" sizes=\"(max-width: 312px) 100vw, 312px\" \/><\/p>\n<p><a href=\"https:\/\/www.hashicorp.com\/products\/terraform\/\">Terraform<\/a>\u00a0se ha posicionado como el producto m\u00e1s extendido en el \u00e1mbito del aprovisionamiento de\u00a0<a href=\"https:\/\/es.wikipedia.org\/wiki\/Infraestructura_como_c%C3%B3digo\">Infraestructura como C\u00f3digo<\/a>.<\/p>\n<p>Utiliza un lenguaje espec\u00edfico (HCL) para desplegar infraestructura a trav\u00e9s del uso de los diferentes proveedores de Cloud. Terraform tambi\u00e9n permite gestionar recursos de otras tecnolog\u00edas o servicios, como Gitlab o Kubernetes.<\/p>\n<p><img decoding=\"async\" width=\"591\" height=\"372\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Terraform-Providers.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Terraform-Providers.png 591w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/07\/Terraform-Providers-300x189.png 300w\" sizes=\"(max-width: 591px) 100vw, 591px\" \/><\/p>\n<p>Terraform hace uso de un\u00a0<strong>lenguaje declarativo<\/strong>\u00a0y se basa en tener desplegado exactamente lo que pone en el c\u00f3digo.<\/p>\n<p>El t\u00edpico ejemplo que se muestra para entender la diferencia con el paradigma que sigue por ejemplo Ansible (procedimental) es:<\/p>\n<p>En un primer momento queremos desplegar 5 instancias EC2 en AWS:<\/p>\n<h2>Ansible:<\/h2>\n<pre><code class='language-python'>- ec2:\n    count: 5\n    image: ami-id\n    instance_type: t2.micro <\/code><\/pre>\n<h2>Terraform:<\/h2>\n<pre><code class='language-python'>resource &quot;aws_instance&quot; &quot;ejemplo&quot; {\n  count         = 5\n  ami           = &quot;ami-id&quot;\n  instance_type = &quot;t2.micro&quot;\n} <\/code><\/pre>\n<p>Como puede observarse, no existen pr\u00e1cticamente diferencias entre los c\u00f3digos. Ahora necesitamos desplegar dos instancias m\u00e1s para hacer frente a una carga de trabajo mayor:<\/p>\n<h2>Ansible:<\/h2>\n<pre><code class='language-python'>- ec2:\n    count: 2\n    image: ami-id\n    instance_type: t2.micro <\/code><\/pre>\n<h2>Terraform:<\/h2>\n<pre><code class='language-python'>resource &quot;aws_instance&quot; &quot;ejemplo&quot; {\n  count         = 7\n  ami           = &quot;ami-id&quot;\n  instance_type = &quot;t2.micro&quot;\n} <\/code><\/pre>\n<p>En este momento, podemos ver que mientras en Ansible establecer\u00edamos en 2 el n\u00famero de instancias a desplegar para que en total haya 7 desplegadas, en Terraform establecer\u00edamos el n\u00famero directamente a 7 y Terraform sabe que tiene que desplegar 2 m\u00e1s porque ya hay 5 desplegadas.<\/p>\n<p>Otro aspecto importante es que Terraform no necesita un server Master como Chef o Puppet. Es una herramienta distribuida cuyo elemento com\u00fan y centralizado es el tfstate (se explica en el siguiente p\u00e1rrafo). Se lanza desde cualquier sitio con acceso al tfstate (que puede ser remoto, guardado en un almacenamiento com\u00fan como puede ser AWS S3) y terraform instalado, el cual se distribuye como un\u00a0<a href=\"https:\/\/www.terraform.io\/downloads.html\">binario descargable desde la web de Hashicorp<\/a>.<\/p>\n<p>El \u00faltimo punto a comentar sobre Terraform es que se basa en un archivo denominado tfstate en el que va guardando y actualizando la informaci\u00f3n relativa al estado de la infraestructura, y el cual va a consultar para conocer si es necesario realizar cambios sobre la misma. Es muy importante tener en cuenta que este estado es lo que conoce Terraform. Terraform no va a conectarse a AWS para ver qu\u00e9 hay desplegado. Por ello es necesario no realizar cambios a mano sobre infraestructura desplegada por Terraform (ni nunca.\u00a0<a href=\"https:\/\/i.kym-cdn.com\/photos\/images\/original\/001\/481\/084\/c5a.gif\">Cambios a mano<\/a>, nunca), ya que no se actualiza el tfstate y por tanto se crear\u00e1n inconsistencias.<\/p>\n<p><img decoding=\"async\" width=\"269\" height=\"78\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/vagrant.png\" alt=\"\" loading=\"lazy\" \/><\/p>\n<p>Vagrant permite desplegar entornos de test de manera local de forma r\u00e1pida y muy simple, basados en c\u00f3digo. Por defecto utiliza por debajo VirtualBox, pero es compatible con otros\u00a0<em>providers<\/em>\u00a0como por ejemplo VMWare o Hyper-V. Es posible desplegar m\u00e1quinas sobre proveedores\u00a0<em>Cloud<\/em>\u00a0como AWS instalando plugins. Personalmente no encuentro la ventaja de usar Vagrant para esta funci\u00f3n.<\/p>\n<p>Las m\u00e1quinas que despliega se basan en\u00a0<a href=\"https:\/\/app.vagrantup.com\/boxes\/search\"><em>boxes<\/em><\/a>, y desde el c\u00f3digo se indica qu\u00e9\u00a0<em>box<\/em>\u00a0se quiere desplegar. En este aspecto podr\u00eda compararse en modo de funcionamiento con Docker. Sin embargo, la base es totalmente distinta. Vagrant levanta m\u00e1quinas virtuales con una herramienta de virtualizaci\u00f3n por debajo (VirtualBox) mientras que Docker despliega contenedores y su soporte es una tecnolog\u00eda de\u00a0<em>contenerizaci\u00f3n<\/em>\u00a0<a href=\"https:\/\/www.vagrantup.com\/intro\/vs\/docker\">Vagrant VS Docker<\/a>.<\/p>\n<p>Casos de uso t\u00edpicos pueden ser probar\u00a0<em>playbooks<\/em>\u00a0de Ansible, recrear un entorno de laboratorio de manera local en muy pocos minutos, realizar alguna demo, etc.<\/p>\n<p>Vagrant se basa en un archivo Vagrantfile. Una vez situado en el directorio donde se encuentra este Vagrantfile, con ejecutar vagrant up, la herramienta comienza a desplegar lo que se indique dentro de dicho archivo.<\/p>\n<p>Los pasos para lanzar una m\u00e1quina virtual con Vagrant son:<\/p>\n<p><strong>1- <a href=\"https:\/\/www.vagrantup.com\/downloads.html\">Instalar Vagrant<\/a>. Se distribuye como un binario al igual que el resto de productos de Hashicorp.<\/strong><\/p>\n<p><strong>2- Con un Vagrantfile de ejemplo:<\/strong><\/p>\n<pre><code class='language-python'>Vagrant.configure(&quot;2&quot;) do |config|\n  config.vm.box = &quot;gbailey\/amzn2&quot;\nend <\/code><\/pre>\n<p>PD:\u00a0<em>(el par\u00e1metro 2 dentro de configure se refiere a la versi\u00f3n de Vagrant, que me ha tocado mirarlo para el post)<\/em><\/p>\n<p><strong>3- Ejecutar dentro del directorio donde se encuentra el Vagrantfile<\/strong><\/p>\n<pre><code class='language-python'>vagrant up <\/code><\/pre>\n<p><strong>4- Entrar por ssh a la m\u00e1quina<\/strong><\/p>\n<pre><code class='language-python'>vagrant ssh <\/code><\/pre>\n<p><strong>5- Destruir la m\u00e1quina<\/strong><\/p>\n<pre><code class='language-python'>vagrant destroy <\/code><\/pre>\n<p>Vagrant se encarga de gestionar el acceso ssh creando una clave privada y almacen\u00e1ndola en el directorio .vagrant, aparte de otros metadatos. Se puede acceder a la m\u00e1quina ejecutando vagrant ssh. Tambi\u00e9n es posible visualizar las m\u00e1quinas desplegadas en la aplicaci\u00f3n de VirtualBox.<\/p>\n<p><img decoding=\"async\" width=\"234\" height=\"82\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/packer.png\" alt=\"\" loading=\"lazy\" \/><\/p>\n<p>Con Packer puedes construir im\u00e1genes de m\u00e1quinas de forma automatizada. Puede utilizarse para, por ejemplo, construir una imagen en un proveedor\u00a0<em>Cloud<\/em>\u00a0como AWS con una configuraci\u00f3n inicial ya realizada y poder desplegarla un n\u00famero indeterminado de veces. De esta forma solo es necesario aprovisionar una sola vez y al desplegar la instancia con esa imagen ya tendr\u00e1 la configuraci\u00f3n deseada sin tener que invertir mayor tiempo en aprovisionarla.<\/p>\n<p>Un peque\u00f1o ejemplo ser\u00eda:<\/p>\n<p><strong>1-\u00a0<a href=\"https:\/\/www.packer.io\/downloads\">Instalar Packer<\/a>. De la misma forma, es un binario que habr\u00e1 que colocar en una carpeta que se encuentre en nuestro path.<\/strong><\/p>\n<p><strong>2- Crear un archivo, por ejemplo builder.json. Tambi\u00e9n se crea un peque\u00f1o script en bash (el link que se muestra en builder.json es\u00a0<em>dummy<\/em>):<\/strong><\/p>\n<pre><code class='language-python'>{\n  &quot;variables&quot;: {\n    &quot;aws_access_key&quot;: &quot;{{env `AWS_ACCESS_KEY_ID`}}&quot;,\n    &quot;aws_secret_key&quot;: &quot;{{env `AWS_SECRET_ACCESS_KEY`}}&quot;,\n    &quot;region&quot;: &quot;eu-west-1&quot;\n  },\n  &quot;builders&quot;: [\n    {\n      &quot;access_key&quot;: &quot;{{user `aws_access_key`}}&quot;,\n      &quot;ami_name&quot;: &quot;my-custom-ami-{{timestamp}}&quot;,\n      &quot;instance_type&quot;: &quot;t2.micro&quot;,\n      &quot;region&quot;: &quot;{{user `region`}}&quot;,\n      &quot;secret_key&quot;: &quot;{{user `aws_secret_key`}}&quot;,\n      &quot;source_ami_filter&quot;: {\n        &quot;filters&quot;: {\n            &quot;virtualization-type&quot;: &quot;hvm&quot;,\n            &quot;name&quot;: &quot;amzn2-ami-hvm-2*&quot;,\n            &quot;root-device-type&quot;: &quot;ebs&quot;\n        },\n        &quot;owners&quot;: [&quot;amazon&quot;],\n        &quot;most_recent&quot;: true\n      },\n      &quot;ssh_username&quot;: &quot;ec2-user&quot;,\n      &quot;type&quot;: &quot;amazon-ebs&quot;\n    }\n  ],\n  &quot;provisioners&quot;: [\n    {\n        &quot;type&quot;: &quot;shell&quot;,\n        &quot;inline&quot;: [\n            &quot;curl -sL https:\/\/raw.githubusercontent.com\/example\/master\/userdata\/ec2-userdata.sh | sudo bash -xe&quot;\n        ]\n    }\n  ]\n} <\/code><\/pre>\n<p>Los proveedores utilizan software integrado y de terceros para instalar y configurar la imagen de la m\u00e1quina despu\u00e9s del arranque. Nuestro ejemplo ec2-userdata.sh<\/p>\n<pre><code class='language-python'>yum install -y \n  python3 \n  python3-pip \npip3 install cowsay <\/code><\/pre>\n<p><strong>3- Ejecutar:<\/strong><\/p>\n<pre><code class='language-python'>packer build builder.json <\/code><\/pre>\n<p>Y ya tendr\u00edamos una AMI aprovisionada con cowsay instalado. Ahora nunca m\u00e1s ser\u00e1 necesario que, como primer paso tras lanzar una instancia, sea necesario instalar cowsay porque ya lo tendremos de base, como debe ser.<\/p>\n<p>Como es de esperar, Packer no solo funciona con AWS sino con cualquier proveedor\u00a0<em>Cloud<\/em>\u00a0como Azure o GCP. Tambi\u00e9n funciona con VirtualBox y VMWare y una\u00a0<a href=\"https:\/\/www.packer.io\/docs\/builders\">gran lista de builders<\/a>. Adem\u00e1s, se puede crear una imagen anidando\u00a0<em>builders<\/em>\u00a0en el archivo de configuraci\u00f3n de Packer que sea igual para distintos proveedores _Cloud. Esto es muy interesante para entornos\u00a0<em>multi-cloud<\/em>\u00a0en los que haya que replicar diferentes configuraciones.<\/p>\n<p><img decoding=\"async\" width=\"254\" height=\"78\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/nomad.png\" alt=\"\" loading=\"lazy\" \/><\/p>\n<p>Nomad es un orquestador de cargas de trabajo. A trav\u00e9s de sus Task Drivers ejecutan una tarea en un entorno aislado. El caso de uso m\u00e1s com\u00fan es orquestar contenedores Docker. Tiene dos actores b\u00e1sicos: Nomad Server y Nomad Client. Ambos actores se ejecutan con el mismo binario pero diferente configuraci\u00f3n. Los\u00a0<em>Servers<\/em>\u00a0organizan el cluster mientras que los\u00a0<em>Agents<\/em>\u00a0ejecutan las tareas.<\/p>\n<p><img decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/nomad-providers.svg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/\/2020\/08\/nomad-providers.svg 150w, https:\/\/bluetab.net\/wp-content\/uploads\/\/2020\/08\/nomad-providers.svg 300w, https:\/\/bluetab.net\/wp-content\/uploads\/\/2020\/08\/nomad-providers.svg 1024w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Un peque\u00f1o \u201c<em>Hello-world<\/em>\u201d en nomad podr\u00eda ser:<\/p>\n<p><strong>1-\u00a0<a href=\"https:\/\/www.nomadproject.io\/downloads\">Descargar e instalar Nomad<\/a>\u00a0y ejecutarlo (en modo\u00a0<em>development<\/em>, este modo\u00a0nunca\u00a0debe usarse en producci\u00f3n):<\/strong><\/p>\n<pre><code class='language-python'>nomad agent -dev <\/code><\/pre>\n<p>Una vez hecho esto ya es posible acceder a la UI de nomad en localhost:4646<\/p>\n<p><strong>2- Ejecutar un job de ejemplo que lanzar\u00e1 una imagen de grafana<\/strong><\/p>\n<pre><code class='language-python'>nomad job run grafana.nomad <\/code><\/pre>\n<p>grafana.nomad:<\/p>\n<pre><code class='language-python'>job &quot;grafana&quot; {\n    datacenters = [\n        &quot;dc1&quot;\n    ]\n    group &quot;grafana&quot; {\n        task &quot;grafana&quot;{\n            driver = &quot;docker&quot;\n            config {\n                image = &quot;grafana\/grafana&quot;\n            }\n            resources {\n                cpu = 500\n                memory = 256\n            network {\n                mbits = 10\n                port &quot;http&quot; {\n                    static = &quot;3000&quot;\n                }\n            }\n            }\n        }\n    }\n} <\/code><\/pre>\n<p><strong>3- Acceder a localhost:3000 para comprobar que se puede acceder a grafana y acceder a la UI de Nomad (localhost:4646) para ver el job<\/strong><\/p>\n<p><strong>4- Destruir el job<\/strong><\/p>\n<pre><code class='language-python'>nomad stop grafana <\/code><\/pre>\n<p><strong>5- Parar el agente de Nomad. Si se ha ejecutado tal y como se ha indicado aqu\u00ed, con pulsar Control-C en la terminal donde se est\u00e1 ejecutando bastar\u00e1<\/strong><\/p>\n<p>En resumen, Nomad es un orquestador muy ligero, al contrario que Kubernetes. L\u00f3gicamente no tiene las mismas funcionalidades que Kubernetes pero ofrece la posibilidad de ejecutar cargas de trabajo en alta disponibilidad de forma sencilla y sin necesidad de usar gran cantidad de recursos. Se tratar\u00e1n ejemplos con m\u00e1s detalle en el post de Nomad que se publicar\u00e1 en un futuro.<\/p>\n<p><img decoding=\"async\" width=\"208\" height=\"77\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/vault.png\" alt=\"\" loading=\"lazy\" \/><\/p>\n<p>Vault se encarga de gestionar secretos. A trav\u00e9s de su api los usuarios o aplicaciones pueden pedir secretos o identidades. Estos usuarios se autentican en Vault, el cual tiene conexi\u00f3n a un proveedor de identidad de confianza como un Active Directory, por ejemplo. Vault funciona con dos tipos de actores al igual que otras de las herramientas mencionadas,\u00a0<em>Server<\/em>\u00a0y\u00a0<em>Agent<\/em>.<\/p>\n<p><img decoding=\"async\" width=\"591\" height=\"372\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Vault-Providers.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Vault-Providers.png 591w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Vault-Providers-300x189.png 300w\" sizes=\"(max-width: 591px) 100vw, 591px\" \/><\/p>\n<p>Al inicializar Vault, comienza en estado sellado (<em>Seal<\/em>) y se generan diferentes tokens para deshacer el sellado (<em>Unseal<\/em>). Un caso de uso real ser\u00eda demasiado largo para este art\u00edculo y se ver\u00e1 en detalle en el art\u00edculo destinado \u00fanicamente a Vault. Sin embargo, se puede descargar y probar en modo dev al igual que se ha mecionado antes con Nomad. En este modo, Vault se inicializa en modo\u00a0<em>Unsealed<\/em>\u00a0, almacenando todo en memoria sin necesidad de autenticaci\u00f3n, sin utilizar TLS y con una \u00fanica clave de sellado. De esta forma podremos jugar con sus funcionalidades y explorarlo de una manera r\u00e1pida y sencilla.<\/p>\n<p>Consultar en este\u00a0<a href=\"https:\/\/learn.hashicorp.com\/vault\/getting-started\/vault-intro\">enlace<\/a>\u00a0para mayor informaci\u00f3n.<\/p>\n<p><strong>1-\u00a0<a href=\"https:\/\/www.vaultproject.io\/downloads\">Instalar Vault<\/a>. Al igual que el resto de productos de Hashicorp, se distribuye como un binario a trav\u00e9s de su web. Una vez hecho, lanzar (este modo\u00a0nunca\u00a0debe usarse en producci\u00f3n):<\/strong><\/p>\n<pre><code class='language-python'>vault server -dev <\/code><\/pre>\n<p><strong>2- Vault mostrar\u00e1 el token de root que sirve para autenticarse contra Vault. Tambi\u00e9n mostrar\u00e1 la \u00fanica clave de sellado que crea. Ahora Vault es accesible a trav\u00e9s de localhost:8200<\/strong><\/p>\n<p><strong>3- En otra terminal, exportar las siguientes variables para poder hacer pruebas:<\/strong><\/p>\n<pre><code class='language-python'>export VAULT_ADDR='http:\/\/127.0.0.1:8200'\nexport VAULT_DEV_ROOT_TOKEN_ID=&quot;token-showed-when-running-vault-dev&quot; <\/code><\/pre>\n<p><strong>4- Crear un secreto (En la terminal en la que se han exportado las variables anteriores)<\/strong><\/p>\n<pre><code class='language-python'>vault kv put secret\/test supersecreto=iewdubwef293bd8dn0as90jdasd <\/code><\/pre>\n<p><strong>5- Recuperar ese secreto<\/strong><\/p>\n<pre><code class='language-python'>vault kv get secret\/test <\/code><\/pre>\n<p>Estos pasos son el\u00a0<em>Hello World<\/em>\u00a0de Vault, para comprobar su funcionamiento. En el art\u00edculo de Vault veremos de forma detallada el funcionamiento y la instalaci\u00f3n de Vault, as\u00ed como m\u00e1s caracter\u00edsticas como las\u00a0<em>policies<\/em>, explorar la UI, etc.<\/p>\n<p><img decoding=\"async\" width=\"241\" height=\"76\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/consul.png\" alt=\"\" loading=\"lazy\" \/><\/p>\n<p>Consul sirve para crear una red de servicios. Funciona de forma distribuida y un cliente de consul se ejecutar\u00e1 en una localizaci\u00f3n en la que existan servicios que se quieran registrar. Consul incluye\u00a0<em>Health Checking<\/em>\u00a0de servicios, una base de datos de clave valor y funcionalidades para securizar el tr\u00e1fico de red. Al igual que Nomad o Vault, Consul tiene dos actores principales,\u00a0<em>Server<\/em>\u00a0y\u00a0<em>Agent<\/em>.<\/p>\n<p><img decoding=\"async\" width=\"591\" height=\"372\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Consul-Providers.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Consul-Providers.png 591w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Consul-Providers-300x189.png 300w\" sizes=\"(max-width: 591px) 100vw, 591px\" \/><\/p>\n<p>De la misma manera que hemos hecho con Nomad y Vault, vamos a ejecutar Consul en modo dev para mostrar un peque\u00f1o ejemplo definiendo un servicio:<\/p>\n<p><strong>1-\u00a0<a href=\"https:\/\/www.consul.io\/downloads\">Instalar Consul<\/a>. Crear una carpeta de trabajo y dentro de la misma crear un archivo json con un servicio a definir (ejemplo de nombre de carpeta: consul.d).<\/strong><\/p>\n<p>Archivo web.json (ejemplo de la web de Hashicorp):<\/p>\n<pre><code class='language-python'>{\n  &quot;service&quot;: {\n    &quot;name&quot;: &quot;web&quot;,\n    &quot;tags&quot;: [\n      &quot;rails&quot;\n    ],\n    &quot;port&quot;: 80\n  }\n} <\/code><\/pre>\n<p><strong>2- Ejecutar el agente de Consul indic\u00e1ndole el directorio de configuraci\u00f3n creado antes donde se encuentra web.json (este modo\u00a0nunca\u00a0debe usarse en producci\u00f3n):<\/strong><\/p>\n<pre><code class='language-python'>consul agent -dev -enable-script-checks -config-dir=.\/consul.d <\/code><\/pre>\n<p><strong>3- A partir de ahora, aunque no hay nada realmente ejecut\u00e1ndose en el puerto indicado (80), se ha creado un servicio con un nombre DNS al que se puede preguntar para poder acceder al mismo a trav\u00e9s de dicho nombre DNS. Su nombre ser\u00e1 NAME.service.consul. En nuestro caso NAME es web. Ejecutar para preguntar:<\/strong><\/p>\n<pre><code class='language-python'>dig @127.0.0.1 -p 8600 web.service.consul <\/code><\/pre>\n<p>Nota: Consul por defecto se ejecuta en el puerto 8600.<\/p>\n<p>De la misma manera se puede preguntar por un\u00a0<em>record<\/em>\u00a0de tipo SRV:<\/p>\n<pre><code class='language-python'>dig @127.0.0.1 -p 8600 web.service.consul SRV <\/code><\/pre>\n<p>Tambi\u00e9n se puede preguntar a trav\u00e9s de los tags del servicio (TAG.NAME.service.consul):<\/p>\n<pre><code class='language-python'>dig @127.0.0.1 -p 8600 rails.web.service.consul <\/code><\/pre>\n<p>Y se puede consultar a trav\u00e9s de la API:<\/p>\n<pre><code class='language-python'>curl http:\/\/localhost:8500\/v1\/catalog\/service\/web <\/code><\/pre>\n<p>Nota final: Consul se utiliza como complemento a otros productos, ya que sirve para crear servicios sobre otras herramientas ya desplegadas. Es por ello que este ejemplo no es demasiado ilustrativo. Aparte del art\u00edculo espec\u00edfico de Consul, se encontrar\u00e1 como ejemplo en otros art\u00edculos como en el de Nomad.<\/p>\n<p>En futuros art\u00edculos se explicar\u00e1 tambi\u00e9n\u00a0<a href=\"https:\/\/learn.hashicorp.com\/consul\/gs-consul-service-mesh\/understand-consul-service-mesh\">Consul Service Mesh<\/a>\u00a0para interconexi\u00f3n de servicios a trav\u00e9s de\u00a0<em>sidecars proxies<\/em>, la federaci\u00f3n de Datacenters de Nomad en Consul para realizar despliegues o las\u00a0<em>intentions<\/em>, que sirven para definir reglas de con qu\u00e9 servicios puede comunicarse otro servicio.<\/p>\n<h2>Conclusiones<\/h2>\n<p>Todos estos\u00a0<strong>productos<\/strong>\u00a0tienen un\u00a0<strong>gran potencial<\/strong>\u00a0en sus respectivos \u00e1mbitos y ofrecen una gesti\u00f3n transversal que puede ayudar a\u00a0<strong>evitar el famoso\u00a0<em>vendor lock-in<\/em><\/strong>\u00a0de los proveedores de\u00a0<em>Cloud<\/em>. Pero lo m\u00e1s importante es su\u00a0<strong>interoperabilidad y compatibilidad<\/strong>.<\/p>\n<h5>\u00bfQuieres saber m\u00e1s de lo que ofrecemos y ver otros casos de \u00e9xito?<\/h5>\n<p><a href=\"\/\" role=\"button\"><br \/>\nDESCUBRE BLUETAB<br \/>\n<\/a><br \/>\nShare on twitter<br \/>\nShare on linkedin<\/p>\n<figure><a href=\"https:\/\/www.linkedin.com\/in\/elipajares\/\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego-150x150.jpg\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego-150x150.jpg 150w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego-75x75.jpg 75w, https:\/\/bluetab.net\/wp-content\/uploads\/2020\/08\/Jorge-Diego.jpg 200w\" sizes=\"(max-width: 150px) 100vw, 150px\" \/><\/a><\/figure>\n<p>Jorge de Diego<br \/>\nCloud DevOps Engineer<\/p>\n<p>Mi nombre es\u00a0<strong>Jorge de Diego<\/strong> y estoy especializado en entornos Cloud. Trabajo habitualmente con AWS aunque tengo conocimientos sobre GCP y Azure. Entr\u00e9 en Bluetab en septiembre de 2019 y desde entonces trabajo de Cloud DevOps y tareas de seguridad. Me interesa todo lo relacionado con la tecnolog\u00eda y en especial, los \u00e1mbitos de modelos de seguridad e Infraestructura. Podr\u00e9is identificarme en la oficina por los pantalones cortos.<\/p>\n<p><b>SOLUCIONES, <\/b>SOMOS EXPERTOS<\/p>\n<p><a href=\"\/soluciones\/data-strategy\/\"><\/p>\n<h5>\n\t\t\t\t\t\tDATA STRATEGY<\/h5>\n<p><\/a><br \/>\n<a href=\"\/soluciones\/data-fabric\/\"><\/p>\n<h5>\n\t\t\t\t\t\tDATA FABRIC<\/h5>\n<p><\/a><br \/>\n<a href=\"\/soluciones\/augmented-analytics\/\"><\/p>\n<h5>\n\t\t\t\t\t\tAUGMENTED ANALYTICS<\/h5>\n<p><\/a><\/p>\n<p>Te puede interesar<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introducci\u00f3n a los productos de HashiCorp Jorge de Diego Cloud DevOps Engineer Share on twitter Share on linkedin Desde la\u00a0Pr\u00e1ctica Cloud\u00a0queremos impulsar el uso de los productos\u00a0Hashicorp\u00a0y por ello vamos a publicar art\u00edculos tem\u00e1ticos sobre cada uno de ellos. Debido a la multitud de posibilidades que ofrecen sus productos, en \u00e9ste art\u00edculo abordaremos una\u00a0visi\u00f3n de [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":17847,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"elementor_header_footer","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[7,8,9],"tags":[],"class_list":["post-3506","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-es","category-practices","category-tech"],"acf":[],"jetpack_featured_media_url":"https:\/\/bluetab.es\/wp-content\/uploads\/2020\/08\/7.png","_links":{"self":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/3506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/comments?post=3506"}],"version-history":[{"count":0,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/posts\/3506\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/media\/17847"}],"wp:attachment":[{"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/media?parent=3506"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/categories?post=3506"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bluetab.es\/en\/wp-json\/wp\/v2\/tags?post=3506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}