Accediendo a nuestras aplicaciones Kubernetes con Ingress
Partimos del escenario donde tenemos desplegado nuestras dos aplicaciones con las que hemos estado trabajando en prácticas anteriores: guestbook y letschat.
kubectl get deploy,services
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
deployment.extensions/guestbook 3 3 3 3 1d
deployment.extensions/letschat 3 3 3 3 1d
deployment.extensions/mongo 1 1 1 1 1d
deployment.extensions/redis-master 1 1 1 1 1d
deployment.extensions/redis-slave 3 3 3 3 1d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/frontend ClusterIP 10.104.59.122 <none> 80/TCP 1d
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 1d
service/letschat ClusterIP 10.111.18.129 <none> 8080/TCP 1d
service/mongo ClusterIP 10.104.219.60 <none> 27017/TCP 1d
service/redis-master ClusterIP 10.98.46.85 <none> 6379/TCP 1d
service/redis-slave ClusterIP 10.110.200.207 <none> 6379/TCP 1d
Como podemos ver los servicios que dan acceso a las aplicaciones lo hemos creado del tipo ClusterIP por lo que ahora mismo no tenemos forma de acceder a ellos desde el exterior. Vamos a crear un recurso Ingress para acceder de ello por medio de dos nombres, para ello lo definimos en el fichero ingress.yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress-name-based
annotations:
traefik.ingress.kubernetes.io/affinity: "true"
spec:
rules:
- host: www.guestbook.com
http:
paths:
- path: "/"
backend:
serviceName: frontend
servicePort: 80
- host: www.letschat.com
http:
paths:
- path: "/"
backend:
serviceName: letschat
servicePort: 8080
- Como vemos en un fichero podemos definir varías reglas de encaminamiento.
- Podemos configurar el proxy inverso utilizando Annotations, en este caso
traefik.ingress.kubernetes.io/affinitynos permite activa la persistencia en las sesiones. Para ver más opciones de configuración en traefik puedes ver la documentación oficial.
Creamos el recurso ingress:
kubectl create -f ingress.yaml
ingress.extensions "ingress-name-based" created
kubectl get ingress
NAME HOSTS ADDRESS PORTS AGE
ingress-name-based www.guestbook.com,www.letschat.com 80 15s
Vamos a utilizar resolución estática, por lo tanto añado la resolución a la IP de cualquier nodo del cluster al fichero /etc/hosts:
172.22.200.178 www.guestbook.com www.letschat.com
Y ya podemos acceder:


Para seguir investigando
- Las distintas aplicaciones que podemos usar para crear un
Ingress Controller(HAproxy, nginx, traefik,…) nos dan diferentes opciones de configuración. - Traefik también ofrece la posibilidad de usar rutas basadas en path, trabajar con certificados TLS, autentificación básica, …
- Otra opción para acceder al
Ingress controlleres desplegarlo con unDeploymenty crear un servicio del tipo LoadBalancer para acceder a él, en este caso es muy fácil escalarlo.
Índice de entradas sobre Kubernetes
Este artículo corresponde a una serie de entradas donde he hablado sobre Kubernetes:
- Instalación de kubernetes con kubeadm
- Desplegando una aplicación en Kubernetes
- Recursos de Kubernetes: Pods
- Recursos de Kubernetes: ReplicaSet
- Recursos de Kubernetes: Deployment
- Kubernetes: Desplegando la aplicación Mediawiki
- Kubernetes: Desplegando la aplicación GuestBook (Parte 1)
- Recursos de Kubernetes: Services
- El servicio DNS en Kubernetes
- Kubernetes: Desplegando la aplicación GuestBook (Parte 2)
- Kubernetes: Desplegando la aplicación LetsChat
- Recursos de Kubernetes: Ingress
- Accediendo a nuestras aplicaciones Kubernetes con Ingress
- Recursos de Kubernetes: Namespaces
- Kubernetes. Configurando nuestras aplicaciones: variables de entornos, ConfigMap, Secrets
- Kubernetes. Desplegando WordPress con MariaDB
- Almacenamiento en Kubernetes. PersistentVolumen. PersistentVolumenClaims
- Kubernetes. Desplegando WordPress con MariaDB con almacenamiento persistente
- Integración de Kubernetes con OpenStack