Añadir soporte TLS a tu Kubernetes en Azure con Let’s Encrypt

¡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.

Continúa leyendo Añadir soporte TLS a tu Kubernetes en Azure con Let’s Encrypt

Ejecutar pruebas de tus contenedores en VSTS

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.

Continúa leyendo Ejecutar pruebas de tus contenedores en VSTS

Dependencias condicionales en VS

Bueno, imagina que trabajas en un proyecto en NetCore que debe ser multiplataforma. En general el propio framework te provee de todo lo necesario, pero sigamos imaginando que algunas partes de tu proyecto dependen via P/Invoke de llamadas nativas.

En este caso puedes optar por tener todos los enlaces P/Invoke para cada plataforma en el mismo proyecto (no hay ningún problema) o bien tenerlos separados en proyectos por cada una de las plataformas.

Continúa leyendo Dependencias condicionales en VS

Kubernetes (3) – Controladores Ingress

Seguimos con esta serie de posts sobre Kubernetes. Los posts anteriores:

  1. Componentes de Kubernetes (donde vimos los distintos componentes de Kubernetes y como usar Minikube para ejecutarlo en local).
  2. Modelo de aplicación (donde vimos como crear nuestra primera aplicación en k8s).

En este tercer post veremos que son los recursos ingress y los controladores ingress y que ventajas nos aportan.

Continúa leyendo Kubernetes (3) – Controladores Ingress

El metapaquete Microsoft.AspNetCore.All

Todos estamos acostumbrados a usar los paquetes de NuGet en nuestros desarrollos. Pero a raíz de Net Core 2.0, apareció el concepto de metapaquete. Qué es exactamente un metapaquete y por qué existen?

La respuesta rápida es que un metapaquete de NuGet es simplemente un paquete que no incluye ningún ensamblado, solo referencia a otros paquetes. Es, en definitiva, un mecanismo para “agrupar” paquetes de NuGet bajo un mismo número de version.

Continúa leyendo El metapaquete Microsoft.AspNetCore.All

Kubernetes (2) – Modelo de aplicación

Si conoces compose conocerás su “modelo de aplicación”. Es un modelo sencillo, contiene básicamente servicios. Un servicio en compose no es nada más que una imagen de Docker y su configuración asociada.  Luego cuando levantamos una aplicación compose con docker-compose up se crea uno (o varios) contenedor por cada servicio y listos.

Pero Kubernetes tiene su propio modelo de aplicación radicalmente distinto. En este post vamos a ver (de forma simplificada) cual es el modelo de aplicación que tiene Kubernetes y ¡desplegaremos nuestra primera aplicación!

Continúa leyendo Kubernetes (2) – Modelo de aplicación

Docker multi-stage builds… o como compilar (casi) cualquier cosa sin tener que instalar nada.

Poco a poco los contenedores, y Docker en especial, se han ido abriendo paso en nuestro workflow diario. Y si al principio era tan solo un mecanismo para encapsular aplicaciones, luego también vimos en ellos una magnífica opción para evitar tener que instalar mil dependencias en las máquinas de desarrollo y finalmente para compilar cualquier proyecto… sin tener que instalar ningún SDK en local.

Continúa leyendo Docker multi-stage builds… o como compilar (casi) cualquier cosa sin tener que instalar nada.

Configurar SSL en un cluster de k8s

¡Buenas! En esta entrada voy a resumir los pasos seguidos para añadir soporte SSL a un cluster Kubernetes. En mi caso lo tengo desplgado en ACS pero eso es irrelevante.

Lo único que si usas ACS y quieres usar una IP determinada, recuerda que la IP pública que vayas a usar debe estar creada anteriormente. Si no, por más que la especifiques dentro de la configuración del servicio (usando loadBalancerIP), Kubernetes no va a poder levantar el servicio.

Continúa leyendo Configurar SSL en un cluster de k8s

Nuevo blog: eiximenis.github.io

Actualizado (17/2/2016): Antes me quejo, antes actualizan geeks.ms 😛 Después de la actualización uno de los motivos para salirme de geeks.ms ha desaparecido. Después de meditarlo he decidido que todo lo que sea de .NET y JS lo iré dejando en geeks.ms. En mi otro blog colocaré todo aquello que no tenga que ver con esas tecnologías y con las que estoy trasteando ahora mismo y que me apetezca escribir. Son posts que considero, por mi propia opinión personal, que su sitio “natural” no es geeks.ms y estos los hospedaré en Git Hub Pages. El resto seguirá por aquí. 🙂

El mundo ha cambiado. Lo siento en el agua, lo siento en la tierra, lo huelo en el aire.

Sirvan esas palabras de Fangorn para decir que abro un nuevo blog, alojado en GitHub pages, que podeis encontrar en eiximenis.github.io. Llevaba ya bastante tiempo meditando un cambio y al final, después de hablar con Álex Casquete, me he decantado por usar Jekyll y hospedar el blog en GitHub pages.

¿Por qué el cambio?

Hace ya casi ocho años que abrí el blog en geeks.ms y la verdad es que muchas cosas han cambiado en este tiempo. Por un lado, la propia plataforma de geeks se queda un poco corta, en especial los templates para móvil son bastante malos. Hace años era un mal menor, ahora es importante, cada vez se consumen más y más blogs desde móviles. Es importante para mí que mi blog se vea bien en dispositivos móviles, y eso con geeks era complicado. Y no hay que negar que al community server se le notan los años y algunas tareas eran complicadas o tediosas… y suerte de Live Writer, porque si no, ¡si que hubiese sido infernal!

No es tampoco la única razón: en todo esto tiempo he intentado mantener este blog centrado en .NET y el desarrollo web (las tecnologías que más uso en mi día a día). Pero desarrollo en muchas otras tecnologías, quizá no a nivel profesional, pero también me apetece contar cosas sobre esas otras tecnologías que poco o nada tienen que ver con .NET o con Microsoft. Tengo la sensación que este blog no es el lugar apropiado (aunque nunca nadie me ha dicho que puedo o no puedo publicar en geeks).

La verdad es que el cambio siempre me ha dado mucha pereza… pero ahora creo que es el momento.

¿Eso significa que este blog en geeks muere?

No, lo que se llama morir no. Cuando publique un post que tenga que ver con .NET en mi nuevo blog, publicaré aquí un resúmen con el enlace completo al blog nuevo. No haré crossposting al uso, primero porque no me gusta y segundo porque no sé como hacerlo desde Jekyll. Así que cuando publique algo que vea que tiene sentido que también esté aquí, publicaré aquí un pequeño resúmen y pondré el enlace al post completo en mi blog.

Pero al margen de eso no habrán nuevas actualizaciones en este blog.

¿Por qué Jekyll?

Realmente Jekyll no es un sistema de blogs tradicional, como puedan ser blogger, el community server que hospeda geeks o el más famoso wordpress. Jekyll es un generador de sitios estáticos: toma unas plantillas que tienen una sintaxis específica (parecida a mustache, que ellos llaman “Liquid templates”), procesa todas esas plantillas y genera ficheros .html planos. Luego esos ficheros puedes servirlos con cualquier servidor web estático.

La idea es muy simple y es una maravilla.

Primero porque los posts pasan a ser código. En el caso de jekyll los posts se suelen codificar en markdown (aunque puedes usar directamente html) y luego mediante una plantilla se convierte a html y se le pone el layout. Jekyll genera resúmenes, paginadores, tags ¡e incluso un feed! Pero no hay base de datos alguna, no hay un sistema CMS por debajo, ni nada parecido.

A pesar de no haber base de datos, es posible dar soporte a comentarios gracias a Disqus, o sea que el tema de los comentarios también está solucionado 😉

Y luego está la integración con GitHub Pages. Jekyll es el motor que hay debajo de GitHub Pages, por lo que eso significa que si hospedas tu blog allí, no subes los contenidos estáticos que te genera Jekyll, si no que subes las plantillas y GitHub las ejecuta y actualiza tu GitHub pages con el resultado de ejecutar Jekyll. Eso tiene la ventaja de que tu blog pasa a ser un repositorio de GitHub: si tienes que editar un post, simplemente editas el markdown asociado, haces push y automáticamente GitHub hace el resto. El inconveniente es que debes ceñirte al entorno que tengan en GitHub pages: hay ciertos plugins de Jekyll que no puedes usar y cosas similares. Nada es perfecto 🙂

¿Qué habrá en el nuevo blog?
Pues básicamente lo mismo que en este, pero hablando de más cosas, no solo de .NET. Pero va a haber lo mismo: artículos técnicos, algún artículo de opinión de vez en cuando y todo aquello que me apetezca hablar.

¡O sea que nada más! Si me has estado siguiendo todo este tiempo en geeks.ms, ya sabes donde encontrarme ahora.

¡Nos seguimos leyendo!