Publicar nuestro ambientes Kubernetes mediante Cloudflare.

Publicar nuestro ambientes Kubernetes mediante Cloudflare.

ArgoTunnel para publicar nuestras aplicaciones

Muchas veces empezamos a jugar con nuestro cluster en nuestro equipo y llegamos a la necesidad, tal vez por gusto o ganas de mostrar nuestros conocimientos al mundo, de querer exponerlos. Una buena manera de hacerlo puede ser a traves de Cloudflare.

Con Cloudflare Tunnel se puede conectar el origen a Cloudflare y proporcionar servicio sin exponer ningún puerto en el servidor o clúster, minimizando así la superficie de ataque.

Para esta prueba vamos a tener que tener un dominio, configurado en Cloudflare. Vamos a ir a nuestro dominio, asociado, Access y luego lanzamos nuestra Zona de Confianza 0.

Ahora vamos a comentar con el deployment, en nuestro cluster de cloudfalred, que sera quien dialoge y genere los registros en la CDN. Les dejo el manifiesto, para poder aplicarlo en nuestro ambiente.

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: cloudflared
  name: cloudflared
spec:
  selector:
    matchLabels:
      app: cloudflared
  template:
    metadata:
      labels:
        app: cloudflared
    spec:
      containers:
      - name: cloudflared
        image: cloudflare/cloudflared:2022.7.1
        # image: ghcr.io/maggie0002/cloudflared:2022.7.1
        imagePullPolicy: Always
        args: ["tunnel", "--no-autoupdate", "run", "--token=TOKEN"]
      restartPolicy: Always
      terminationGracePeriodSeconds: 60

Vamos a necesitar el Token, para acceder a Clouflare. Para ello vamos a dar siguiente y seleccionar el despliegue de con Docker. Sustraemos el token y lo cambiamos en nuestro manifiesto. Con eso estamos listos para desplegar. Es importante entender que almacenar el token en el archivo yaml no es seguro. Para garantizar la seguridad puede almacenar el token en Kubernetes Secrets y utilizarlo a través de la variable de entorno. Hay varias formas mas, pero para fines prácticos vamos a seguir asi.

Aplicamos los el manifiesto de clouflared. Una vez aplicado, damos continuar para configurar nuestro registro. Pero antes vamos a desplegar nuestra aplicacion. En mi caso usare una imagen de microbot. Aca les dejo el deployment y el servicio, todo en uno.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: microbot
spec:
  selector:
    matchLabels:
      app: microbot
  template:
    metadata:
      labels:
        app: microbot
    spec:
      containers:
      - name: microbot
        image: cdkbot/microbot-amd64
        imagePullPolicy: Always
        ports:
        - containerPort: 80
      restartPolicy: Always
      terminationGracePeriodSeconds: 60
---
apiVersion: v1
kind: Service
metadata:
  name: microbot-svc
spec:
  type: ClusterIP
  ports:
    - targetPort: 80
      port: 80
  selector:
      app: microbot

Revisamos donde esta atendiendo el servicio, para configurar el tunel. En nuestro caso es microbot-svc:80.

Salvamos! Vamos a revisar nuestros tuneles.

Ahora revisamos y UALA! Nuestro deployment, local, publicado a internet via Cloudflare. Revisen en nuestra imagen el id del container, para chequear el funcionamiento.

Espero que les sirva, es una manera rapida y segura de tener nuestro ambiente de manera publica.