Desplegar una aplicación ASP.NET Core 2.1 con https en Docker
📅 Jul 2, 2018 · ☕ 6 min · ✍️ eiximenis

Una de las novedades de ASP.NET Core 2.1 es que redirige automáticamente todo el tráfico de http a https y, además, fuerza el uso de HSTS. Sobre https nada que decir, seguro que todos lo conocéis.

Sobre HSTS simplemente comentar que es un protocolo mediante el cual el servidor informa a los user-agents de que solo acepta conexiones seguras, es decir que deben usar HTTPS para acceder a sus recursos. A pesar de que HSTS tiene sus limitaciones (y que para evitarlas sería necesaria un protocolo a nivel de DNS y no de servidores) su uso es una práctica imprescindible en seguridad web. De hecho **hoy en día NO HAY EXCUSA PARA NO USAR HTTPS NI HSTS **en cualquier sitio web. Da absolutamente igual lo que haga. No usar https ni hsts es una negligencia que debería avergonzar a cualquiera.


Usar vscode para depurar tus contenedores netcore
📅 Jun 15, 2018 · ☕ 10 min · ✍️ eiximenis

Una de las ventajas que tiene **Visual Studio 2017 es el soporte de depuración para contenedores netcore. **A partir de la versión 15.7 el soporte está relativamente maduro soportando algunos escenarios que daban errores en versiones anteriores (p. ej. dos servicios compose usando la misma imagen).

Pero… ¿y si no podemos/queremos usar Visual Studio? ¿Tenemos alguna alternativa? Pues sí: usar visual studio code, y aunque el workflow no es tan sencillo como en Visual Studio, al final se puede conseguir algo similar: ejecutar y depurar un contenedor. ¡Vamos allá!


Docker: Imágenes Windows y Linux con un solo Dockerfile. Sí, pero…
📅 Jun 12, 2018 · ☕ 9 min · ✍️ eiximenis

Una de las características menos conocidas de Docker son las imágenes multi-arch. Es una característica que agradecerás si trabajas tanto en contenedores Linux como Windows.

Como ya debes saber, Docker no permite ejecutar contenedores cuyos binarios no sean los mismos de la plataforma que los hospeda: es decir, si estás en Windows solo puedes ejecutar contenedores cuyos binarios sean Windows y si estás en Linux pues lo mismo. Y sí, Docker CE For Windows “hace tramas” para permitirte ejecutar contenedores Linux: los ejecuta en una máquina virtual Hyper-V.

Si desarrollas un producto multi-plataforma y quieres ofrecer contenedores tanto Linux como Windows, el uso de imágenes multi-arch es algo que, como digo, vas a agradecer, ya que te permite usar un solo Dockerfile para generar ambas imágenes.


HttpClient en C# y servicios de Docker escalados.
📅 Jun 11, 2018 · ☕ 11 min · ✍️ eiximenis

En este post vamos a ver como escalar servicios, tanto en Compose, como en Swarm como en Kubernetes y luego veremos algunas consideraciones cuando usemos HttpClient desde el cliente al acceder a un servidor escalado.

Nos centramos en el escenario de escalado básico, es decir, sin demasiada lógica.

[Autobombo]: Si estás interesado en temas de Docker y Kubernetes, échale un vistazo a mi curso de Docker y Kubernetes en CampusMVP.


Novedades .NET Core 2.1: Generic host
📅 Jun 7, 2018 · ☕ 6 min · ✍️ eiximenis

Ahora que .NET Core 2.1 ya es oficial ya podemos desgranar algunas de sus novedades más interesantes. La verdad es que, por fin, se vislumbra una madurez en la plataforma. Realmente a no ser que haya algún motivo de fuerza mayor (librería no disponible), .NET Core 2.1 debería ser la opción por defecto a la hora de empezar cualquier proyecto nuevo.


Monitorizando nuestros servicios en Kubernetes con Beatpulse
📅 Jun 3, 2018 · ☕ 8 min · ✍️ eiximenis

Disclaimer: En ese post hablo de una librería (Beatpulse) de la que soy contribuidor (lo aclaro, para que no haya ningún malentendido).

En todo sistema distribuído es importante disponer de un mecanismo que permita saber en todo momento si un servicio está funcionando o no. Es cierto que el concepto de “funcionando” es algo difuso de definir, pero yendo a mínimos deberíamos saber si un sistema se ha caído o no.


Tip: Acceder a Minikube desde WSL
📅 May 31, 2018 · ☕ 2 min · ✍️ eiximenis

Hoy me han preguntado eso, así que mira, aprovecho para apuntarlo aquí, por si alguien más tiene esta duda.

La situación es la siguiente: tienes minikube instalado y funcionando en Windows, pero quieres usarlo desde un kubectl ejecutándose en un terminal WSL. ¿Es posible?


Añadir soporte TLS a tu Kubernetes en Azure con Let's Encrypt
📅 Apr 13, 2018 · ☕ 7 min · ✍️ eiximenis

¡Buenas! En este post vamos a ver como añadir soporte TLS a tu clúster de Kubernetes desplegado en ACS o AKS. Hace tiempo escribí un post sobre como añadir certificados de desarrollo a un servicio NGINX que tuvieses en Kubernetes. Aunque lo dicho en aquel post sigue siendo válido, hay una manera mucho más sencilla con la condición de que usemos ingress para exponer nuestros servicios al exterior.

En este post parto de la suposición de que:

  1. Tienes un clúster de Kubernetes en ACS/AKS y kubectl configurado para atacar a él
  2. Tienes el controlador ingress de NGINX instalado en el clúster exponiendo cualquier servicio

Es decir, haciendo http://IP-CLUSTER/servicio obtienes alguna respuesta. Lo que queremos es poder usar https en su lugar.


Ejecutar pruebas de tus contenedores en VSTS
📅 Mar 7, 2018 · ☕ 7 min · ✍️ eiximenis

Si desarrollas con Docker es probable que uses multi-stage builds para crear tus contenedores, en este caso unificas bajo un mismo Dockerfile la creación del binario (usando una imagen de compilación) y la creación de la imagen final (basandote en una imagen de runtime).

Ahora bien, si usas un pipeline de CI/CD con VSTS… ¿como gestionar los tests de esos contenedores? Eso es lo que vamos a discutir en este post.


C# Varianza en delegados
📅 Feb 5, 2018 · ☕ 7 min · ✍️ eiximenis

¡Buenas! A raíz de una situación en la que me he encontrado en un proyecto real (de la que luego hablaré) me he decidido a escribir este post para comentar algunas cosillas sobre varianzas en los delegados mismos.

Cuando hablamos de varianzas en delegados hay que contemplar dos aspectos:

  • Varianzas entre los tipos definidos por el delegado y los tipos de la función asignada al delegado
  • Varianzas entre _el tipo del delegado _y otros tipos (en este caso object).
  • Las combinaciones entre esos dos puntos.