Skip to main content
Mario Galán

Main navigation

  • Home
  • Contact
  • EN
  • ES
User account menu
  • Log in

Creando un cluster Kubernetes con k0s y Ceph - 7 - Ingress con Traefik

El último paso para poder mostrar nuestras aplicaciones desplegadas es la instalación de un Ingress Controller en el cluster.

Esto nos permite consolidar muchos servicios en una única IP que estará gestionada por el LoadBalancer que previamente habíamos configurado. Por lo tanto, para poder instalar un Ingress controller necesitaremos tener funcionando previamente el LoadBalancer.

Existen muchas opciones de Ingress Controller para Kubernetes siendo las más habituales en cluster on-prem Nginx y Traefik.

En esta ocasión vamos a instalar Traefik que funciona como un pez en el agua en un entorno Kubernetes.

Requisitos

Los requisitos que necesitamos de Traefik serán los siguientes:

  • Puntos de entrada en HTTP (web) y HTTPS (websegure).
  • El punto de entrada HTTPS utilizará un certificado autogenerado wildcard local.
  • El punto de entrada HTTP recibirá tráfico desde un balanceador externo al cluster que realiza la función de terminación TLS.
  • El dashboard de Traefik deberá estar protegida por autenticación.

Certificados TLS

Para poder utilizar el Ingress listener de Traefik por HTTPS necesitaremos previamente instalar un certificado TLS en el cluster.

En nuestro caso vamos a utilizar un certificado wildcard generado por nuestro CA interno que tenemos para varios servicios no expuestos al exterior.  Para desarrollo local lo habitual es que tengamos que generar un certificado autofirmado. Se puede ampliar la información en la documentación de Traefik.

kubectl create secret tls local-wildcard-tls --cert=wildcard.crt --key=wildcard.key --namespace traefik

Instalación

La instalación la haremos nuevamente utilizando Helm y crearemos un namespace específico para Traefik.

helm repo add traefik https://traefik.github.io/charts
helm repo update
kubectl create namespace traefik

Y lo instanciaremos con un fichero de valores:

# values.yaml
ingressRoute:
  dashboard:
    enabled: true
    matchRule: Host(`traefik.gamesfromtheroof.com`)
    entryPoints:
      - web
providers:
  kubernetesGateway:
    enabled: true
gateway:
  listeners:
    web:
      namespacePolicy:
        from: All

Y finalmente lo instalamos con el siguiente comando:

helm install traefik traefik/traefik -f values.yaml --namespace traefik  --wait

Para encontrar la IP asignada a traefik ejecutaremos el siguiente comando:

kubectl get svc -n traefik

En nuestras pruebas será la 192.168.1.181 y ahí tendrá que resolver el nombre de dominio que hemos puesto en el fichero values.yaml.

Desplegando una aplicación de prueba

Para probar que Traefik está funcionando correctamente, desplegaremos una aplicación formada por un Deployment, Service e IngressRoute.

# whoami.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: whoami
spec:
  replicas: 2
  selector:
    matchLabels:
      app: whoami
  template:
    metadata:
      labels:
        app: whoami
    spec:
      containers:
        - name: whoami
          image: traefik/whoami
          ports:
            - containerPort: 80
# whoami-service.yaml
apiVersion: v1
kind: Service
metadata:
  name: whoami
spec:
  ports:
    - port: 80
  selector:
    app: whoami
# whoami-ingressroute.yaml
apiVersion: traefik.io/v1alpha1
kind: IngressRoute
metadata:
  name: whoami
spec:
  entryPoints:
    - web
  routes:
    - match: Host('test-traefik.com')
      kind: Rule
      services:
        - name: whoami
          port: 80

El dominio que elijamos deberá resolver a la IP de Traefik. Esto lo podremos hacer con un DNS local o directamente añadiéndolo a nuestro fichero hosts.

kubectl apply -f whoami.yaml -f whoami-service.yaml -f whoami-ingressroute.yaml

Y si todo está correcto podremos hacemos un curl y ver el resultado:

Limpiaremos el despliegue con el siguiente comando:

kubectl delete -f whoami.yaml -f whoami-service.yaml -f whoami-ingressroute.yaml

Llegados a este punto tenemos desplegado Traefik con una configuración básica pero que sabemos que es correcta.

En otros post veremos la configuración para aplicaciones, situaciones y despliegues más concretos.

Tags

  • k0s
  • kubernetes
  • Traefik

Comments

About text formats

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.
RSS feed
Powered by Drupal