Soy Oscar Mas y me gustaría enseñaros que es Traefik (su pronunciación es Traffic). Traefik es un balanceador y un Reverse Proxy, en este post simplemente enseñaremos el Reverse Proxy.
Kubernetes en la versión 1.2.0 añadió un balanceador que incluye soporte para TLS and http-based traffic routing, a consecuencia de esto, lo más habitual es usar Traefik como un Reverse Proxy. Una de las ventajas de usar Traefik, es que soporta certificados SNI (Server Name Indication).
El esquema lógico de lo que vamos a realizar será el siguiente:
A continuación os detallo el funcionamiento de cada una de las partes que usaremos para que desde nuestra LAN podamos acceder a los pods que crearemos:
- Deployment: Desde el deployment crearemos los dos pods
- Service: Lo usaremos para que mediante el Puerto 80 (http) nos de acceso a los dos pods creados con el Deployment
- Ingress: Nos servirá para acceder al Service con un nombre FQDN, en nuestro caso: nginx.ilba.cat
- Traefik: Nos permitirá acceder desde el exterior (o sea desde nuestra red) al ingress.
La imagen que he usado es: scala-boot-test, la cual nos enseñará el nombre del host y la fecha. He usado esta imagen, ya que con una imagen de nginx, no podríamos apreciar el balanceo que nos proporciona nuestro service.
Crearemos nuestro Deployment y posteriormente verificaremos que se ha desplegado correctamente:
rootdevel@ub-nodo0-sbd:~$ cat nginx-deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 2
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: sirile/scala-boot-test
ports:
- containerPort: 80
rootdevel@ub-nodo0-sbd:~$ kubectl create -f nginx-deployment.yaml
rootdevel@ub-nodo0-sbd:~$ kubectl get deployments -o wide
rootdevel@ub-nodo0-sbd:~$ kubectl get pods -o wide
Crearemos nuestro Service y posteriormente verificaremos que se ha desplegado correctamente:
rootdevel@ub-nodo0-sbd:~$ cat nginx-service.yaml
apiVersion: v1
kind: Service
metadata:
labels:
name: nginxservice
name: nginxservice
spec:
ports:
- port: 80
selector:
app: nginx
type: ClusterIP
rootdevel@ub-nodo0-sbd:~$ kubectl create -f nginx-service.yaml
rootdevel@ub-nodo0-sbd:~$ kubectl get services -o wide
Crearemos nuestro Ingress y posteriormente verificaremos que se ha desplegado correctamente:
rootdevel@ub-nodo0-sbd:~$ cat nginx-ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: nginxingress
spec:
rules:
- host: nginx.ilba.cat
http:
paths:
- path: /
backend:
serviceName: nginxservice
servicePort: 80
rootdevel@ub-nodo0-sbd:~$ kubectl create -f nginx-ingress.yaml
ingress "nginxingress" created
rootdevel@ub-nodo0-sbd:~$ kubectl get ingress
Crearemos nuestro Traefik y posteriormente verificaremos que podemos accedr a los pods correctamente:
Antes de descargar la versión de Traefik miraremos cual es la ultima versión: https://github.com/containous/traefik/releases/ en mi caso es la versión 1.4.2.
rootdevel@ub-nodo0-sbd:~$ wget https://github.com/containous/traefik/releases/download/v1.4.2/traefik_linux-amd64 rootdevel@ub-nodo0-sbd:~$ mv traefik_linux-amd64 traefik && chmod u+x traefik
Crearemos nuestro fichero de traefik, el cual se enlazará con el sistema de proxy de Kubernetes para poder acceder a los pods:
rootdevel@ub-nodo0-sbd:~$ cat traefik.toml [web] address = ":8080" ReadOnly = true [kubernetes] # Kubernetes server endpoint endpoint = "http://127.0.0.1:8001"
Para no complicar mucho este post, en el siguiente post explicaré como lanzar Traefik y el proxy de Kubernetes mediante el systemd de Linux, en vez de tener que lanzarlos a mano:
rootdevel@ub-nodo0-sbd:~$ kubectl proxy rootdevel@ub-nodo0-sbd:~$ sudo ./traefik -c traefik.toml
Si accedemos al FQDN que hemos configurado en nuestro Ingress (nginx.ilba.cat) y vamos refrescando el navegador, podremos observar que vamos cambiando de pod cada vez que refrescamos el navegador.
También podremos acceder a la web que nos ofrece Traefik, en la cual podemos ver la configuración y el estado de nuestro Traefik, mediante la URL: http://192.168.0.216:8080. Os dejo un par de capturas para que lo podáis ver:
No te pierdas la serie completa sobre Kubernetes de Oscar Mas:
- Kubernetes – Introducción a Kubernetes
- Kubernetes – Instalación
- Kubernetes – RollingUpdate con Kubernetes
- Kubernetes – Dashboard
- Kubernetes – Volúmenes NFS
- Kubernetes – Registry
- Kubernetes – Traefik
- Kubernetes – Systemd con Traefik y Proxy de Kubernetes
- Kubernetes – Heapster Influx Grafana
- Kubernetes – Labels de Kubernetes
- Kubernetes – API: Swagger
- Kubernetes – API: Creando nuestro primer POD
- Kubernetes – API: Seguridad con Token






[…] Kubernetes – Traefik […]