# Publicar nuestro ambientes Kubernetes mediante Cloudflare.

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400383914/950c3165-9b9e-4128-81b8-a7421bd81a22.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400426101/a0014521-ad7c-4b34-9ebc-053c2d31f238.png align="center")

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.

```yaml
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](https://kubernetes.io/docs/concepts/configuration/secret/#using-secrets-as-environment-variables) y utilizarlo a través de la variable de entorno. Hay varias formas mas, pero para fines prácticos vamos a seguir asi.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400449586/b8fa18e0-5b15-45f6-92db-6679163fc352.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400466816/de64b9af-d098-4ce7-911e-352942b88aff.png align="center")

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.

```yaml
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**.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400533780/105ee688-d12b-4272-ae93-815c9dd1970d.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400577301/3b74b3b6-d9f5-418c-b633-46a6015d58a2.png align="center")

Salvamos! Vamos a revisar nuestros tuneles.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400547142/13c7cb70-8e4f-48bd-9914-67cedf42482e.png align="center")

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2024/01/7.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1707400593355/22589577-4e71-46bb-a053-c0186a251183.png align="center")

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