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/affinity
nos 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 controller
es desplegarlo con unDeployment
y 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
Comments
Javier Cóndor
Hola, muy interesante. Cuando muestras los servicios se muestra que usan los puertos 80 y 8080, pero cuando se hace el ejemplo se ve que toman puertos por encima de los 30000. ¿Cómo hiciste para que tome esos puertos? Si se usa tal cual no funciona el ingress, supongo que tengo que modificarlo con los puertos que me dio el kubectl no?
No me llegó a funcionar =(
Leave a Comment
Your email address will not be published. Required fields are marked *