Microk8s mi primer prueba
Microk8s tiene soporte empresarial de Canonical lo que lo convierte en una buena opción para producción. Estuve probando cómo funciona y quedé impresionado tanto por estabilidad como por sencillez.
Para ingresar al Dashboard debemos utilizar la dirección que aparece en pantalla pero reemplazando "127.0.0.1" por la IP de la VM:
Instalación
Primero desplegué un Ubuntu Cloud Image y la configuré con mi usuario y una IP fija tal como explico en mi articulo sobre cómo Instalar Ubuntu Cloud Image y configurar con mi usuario y password y luego me conecté por SSH.
Instalé Microk8s simplemente con el siguiente comando
sudo snap install microk8s --classic
En mi VM Ubuntu no habilité el Firewall, pero si lo hubiera hecho, habría tenido que ejecutar:
sudo ufw allow in on cni0
sudo ufw allow out on cni0
sudo ufw default allow routed
Luego algunas configuraciones extra para el usuario:
sudo usermod -a -G microk8s $USER
sudo mkdir ~/.kube && sudo chown -R $USER ~/.kube
sudo newgrp microk8s
Y verifiqué si está todo bien:
microk8s status
microk8s enable dns
microk8s enable dashboard
microk8s dashboard-proxy
Para ingresar al Dashboard debemos utilizar la dirección que aparece en pantalla pero reemplazando "127.0.0.1" por la IP de la VM:
Una de las maravillas de Microk8s es que el Ingress se configura para que utilice la IP de la Máquina Virtual, por lo tanto no hace falta usar un Load Balancer para que funcione y, técnicamente, tampoco un FQDN. Y eso hice siguiendo los pasos del artículo de Phenixnap para configurar el servicio. En resumen:
microk8s enable ingress
curl 127.0.0.1 # debemos ver Nginx
Editamos el config map:
microk8s kubectl -n ingress edit configmaps nginx-load-balancer-microk8s-conf
Y agregamos las siguientes líneas justo después de "kind: ConfigMap" para que quede así:
kind: ConfigMap
data:
use-forwarded-headers: "true"
Desplegué una aplicación de demo:
microk8s kubectl create ns dotnet-demo
microk8s kubectl -n dotnet-demo create deploy dotnet-demo-app --image=bdamian/dotnet-demo-app
Luego creé un servicio del tipo ClusterIp para mi aplicación:
microk8s kubectl -n dotnet-demo expose deployment dotnet-demo-app --type=ClusterIP --port=80
Y creé el Ingress:
cat <<EOF | microk8s kubectl -n dotnet-demo apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dotnet-demo-ingress
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: dotnet-demo-app
port:
number: 80
EOF
Ahora, navegando la IP de la VM ya puedo ver mi aplicación:
Habilitamos cert-manager:
microk8s enable cert-manager
Creamos un Issuer en el namespace:
cat <<EOF | microk8s kubectl -n dotnet-demo apply -f -
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: demo-issuer
namespace: dotnet-demo
spec:
selfSigned: {}
EOF
Creamos el certificado autofirmado:
cat <<EOF | microk8s kubectl -n dotnet-demo apply -f -
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: dotnet-demo-tls
namespace: dotnet-demo
spec:
dnsNames:
- '*.default.svc.cluster.local'
- '*.default'
issuerRef:
name: demo-issuer
secretName: dotnet-demo-tls-secret
EOF
Y ahora modificamos el Ingress para que tome el certificado:
cat <<EOF | microk8s kubectl -n dotnet-demo apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: dotnet-demo-ingress
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: dotnet-demo-app
port:
number: 80
tls:
- secretName: dotnet-demo-tls-secret
EOF
Probando Load Balancer
Si bien el servicio de Ingress no requiere de un Load Balancer, hay casos en los que necesitamos uno. Para habilitar el addon de Load Balancer, primero determiné algunas IPs libres en el mismo segmento donde está desplegado el Ubuntu. Luego ejecuté:
microk8s enable metallb:10.12.1.246-10.12.1.249
Creé un servicio del tipo Load Balancer para probar metallb:
microk8s kubectl -n dotnet-demo expose deployment dotnet-demo-app --name=dotnet-demo-app-lb --type=LoadBalancer --port=80
Revisé el servicio para ver la IP y luego navegué la aplicación:
microk8s kubectl -n dotnet-demo get svc dotnet-demo-app-lb
Conclusión
Microk8s es una gran solución para varios escenarios, por ejemplo:- Tener Kubernetes en nuestra PC para desarrollo
- Kubernetes para IoT
- Kubernetes para ambiente de testing (ya que permite agregar nodos y tiene soporte oficial)
- Para publicar pequeñas aplicaciones en una sola Máquina Virtual.
Comentarios
Publicar un comentario