Este tema me ha llevado bastante quebraderos de cabeza y hoy voy a explicar qué pasa y como recibir en la cabecera HTTP el X-Forwarded-For.

El objetivo es obtener la IP real del cliente origen cuando tenemos un LoadBalancer de Google Cloud en su Kubernetes con Container Engine. Ya que sino es así todos los logs de Apache/Nginx del backend van a registrar la IP interna del LoadBalancer y no tendremos la IP real del cliente, haciendo imposible por ejemplo la generación de estadísticas reales de visitas.

Cuando levantamos un Service (SVC) de Kubernetes lo hacemos de la siguiente manera:

El «type: LoadBalancer» va aprovisionar un LoadBalancer de la plataforma de GCP directamente a nuestro ReplicationController asignado con el «selector».

Este LoadBalancer va a ser del tipo TCP y ese será el motivo real por el cual no vayamos a recibir la cabecera X-Forwarded-For.

Esto no sucede igual en AWS, que quizás por defecto levantan un LoadBalancer HTTP así que en GCP hay que hacerlo de otro modo.

Así que el objetivo será levantar un LoadBalancer HTTP de la plataforma de GCP, eso lo haremos con Ingress de Kubernetes.

Vamos a modificar nuestro SVC actual cambiando el «type: LoadBalancer» por «type: NodePort«, aplicamos las nuevas configuraciones.

Ahora ya tenemos un SVC nginx-back que va a ser únicamente accesible desde dentro del clúster de Kubernetes. No tendremos visibilidad desde el exterior.

Para ello vamos a crear un Ingress que va aprovisionar un LoadBalancer HTTP en GCP. Vamos a crear un YAML nuevo:  vi nginx-back-ing.yaml

Ahora debemos tener un poco de paciencia para que se aprovisione correctamente el LoadBalancer HTTP e ir observando los cambios.

Hasta que la línea «backends» de la sección «Annotations» no aparezca como HEALTHY no será 100% funcional nuestro LoadBalancer HTTP en GCP con Ingress de Kubernetes.

 

(149 visitas en total, 1 visita/s hoy)
Tagged with →  
Share →

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.