Implementación de ingress en Kubernetes#


Crea servicios para direccionar tráfico a los pods#

Normalmente los pods no se acceden directamente en el cluster de Kubernetes, sino que se utilizan servicios que tienen un selector que sirve para buscar algún pod y enviarle el tráfico de red

Utiliza la opción expose de kubectl para crear un servicio que apunte a los pods de un deployment especifico

  • Repite esta acción para los tres deployments que tienes: root-nginx, linux-doc y tareas-redes
usuario@laptop ~ % kubectl expose deployment root-nginx   --port=80
service/root-nginx exposed

usuario@laptop ~ % kubectl expose deployment linux-doc    --port=80
service/linux-doc exposed

usuario@laptop ~ % kubectl expose deployment tareas-redes --port=80
service/tareas-redes exposed

Verifica que los servicios hayan sido creados y que apunten al puerto 80

usuario@laptop ~ % kubectl get services
NAME           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes     ClusterIP   10.43.0.1       <none>        443/TCP   1d
root-nginx     ClusterIP   10.43.179.184   <none>        80/TCP    60s
linux-doc      ClusterIP   10.43.119.249   <none>        80/TCP    40s
tareas-redes   ClusterIP   10.43.190.157   <none>        80/TCP    20s

Crea las rutas para dirigir tráfico a los servicios#

Utiliza el archivo recurso-ingress.yaml para crear un recurso de tipo ingress que utiliza rutas para exponer los servicios internos del cluster y que estos reciban tráfico

Edita el archivo recurso-ingress.yaml

  • Establece las anotaciones rewrite-target con el valor / que significa la raíz del sitio web
  • Establece la ruta para el host catch-all y apúntala al servicio root-nginx en el puerto 80
  • Establece la ruta para el host kernel.example.com y apúntala la raíz del sitio al servicio linux-doc en el puerto 80
  • Establece la ruta para el host tareas.example.com y apúntala la raíz del sitio al servicio tareas-redes en el puerto 80

Warning

  • Reemplaza example.com con tu nombre de dominio

Crea el recurso ingress utilizando el archivo YAML que editaste

usuario@laptop ~ % kubectl apply -f recurso-ingress.yaml
ingress.networking.k8s.io/ingress-nginx created

Verificar la conectividad a los sitios web#

Puerto TCP#

Verifica que el equipo responda en el puerto 80 TCP

usuario@laptop ~ % nc -vz k3s.example.com 80
Connection to k3s.example.com port 80 [tcp/http] succeeded!

Host default#

Revisa que puedas alcanzar el servicio root-nginx en la siguiente URL

  • http://example.com/

Warning

  • Reemplaza example.com con tu nombre de dominio
  • Asegúrate de utilizar HTTP para visitar el sitio web
usuario@laptop ~ % curl -vk#L 'http://example.com/' | egrep '</?title>'
*   Trying 20.58.191.222:80...
* Connected to example.com (20.58.191.222) port 80 (#0)
> GET / HTTP/1.1
> Host: example.com
> User-Agent: curl/7.87.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 26 May 2023 08:01:37 GMT
< Content-Type: text/html
< Content-Length: 592
< Connection: keep-alive
< Last-Modified: Fri, 26 May 2023 07:30:23 GMT
< ETag: "6470600f-250"
< Accept-Ranges: bytes
<
{ [592 bytes data]
######################################################################### 100.0%
* Connection #0 to host example.com left intact

    <title>Examen 4 - Redes 2023-2</title>

Visita la misma URL con un navegador web y asegúrate de que se muestre la página de indice del host "catch-all"

Página en Kubernetes mostrada a través de ingress

Sitio web con la documentación del kernel Linux#

Revisa que puedas alcanzar el servicio linux-doc en la siguiente URL

  • http://kernel.example.com/

Warning

  • Reemplaza example.com con tu nombre de dominio
  • Asegúrate de utilizar HTTP para visitar el sitio web
usuario@laptop ~ % curl -vk#L 'http://kernel.example.com/' | egrep '</?title>'
*   Trying 20.58.191.222:80...
* Connected to kernel.tonejito.cf (20.58.191.222) port 80 (#0)
> GET / HTTP/1.1
> Host: kernel.tonejito.cf
> User-Agent: curl/7.87.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 26 May 2023 08:05:05 GMT
< Content-Type: text/html
< Content-Length: 145412
< Connection: keep-alive
< Last-Modified: Fri, 29 Apr 2022 09:36:50 GMT
< ETag: "626bb1b2-23804"
< Accept-Ranges: bytes
<
{ [4096 bytes data]
######################################################################### 100.0%
* Connection #0 to host kernel.example.com left intact

    <title>The Linux Kernel documentation &mdash; The Linux Kernel  documentation</title>

Visita la misma URL con un navegador web y asegúrate de que se muestre el sitio web de la documentación del kernel Linux

Página en Kubernetes mostrada a través de ingress

Sitio web de tareas de la materia#

Revisa que puedas alcanzar el servicio tareas-redes en la siguiente URL

  • http://tareas.example.com/

Warning

  • Reemplaza example.com con tu nombre de dominio
  • Asegúrate de utilizar HTTP para visitar el sitio web
usuario@laptop ~ % curl -vk#L 'http://tareas.example.com/' | egrep '</?title>'
*   Trying 20.58.191.222:80...
* Connected to tareas.tonejito.cf (20.58.191.222) port 80 (#0)
> GET / HTTP/1.1
> Host: tareas.tonejito.cf
> User-Agent: curl/7.87.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Fri, 26 May 2023 08:05:45 GMT
< Content-Type: text/html
< Content-Length: 12443
< Connection: keep-alive
< Last-Modified: Tue, 31 May 2022 01:47:02 GMT
< ETag: "62957396-309b"
< Accept-Ranges: bytes
<
{ [2800 bytes data]
######################################################################### 100.0%
* Connection #0 to host tareas.example.com left intact

    <title>Redes - Tareas 2023-2</title>

Visita la misma URL con un navegador web y asegúrate de que se muestre el sitio web de tareas de la materia

Página en Kubernetes mostrada a través de ingress

Danger

  • Verifica que TODAS las configuraciones que hiciste estén presentes respués de reiniciar la máquina antes de continuar con la siguiente sección

Note

  • Continúa en la siguiente página si pudiste ver las páginas por medio de HTTP con los nombres de dominio utilizando un navegador web
    • http://example.com/
    • http://kernel.example.com/
    • http://tareas.example.com/
  • Reemplaza example.com con tu nombre de dominio

Página anterior Arriba Página siguiente