Instalación y configuración de Ingress NGINX en Kubernetes#


Instala ingress-nginx desde el equipo local#

Descarga el archivo YAML que contiene la definición de los recursos de Kubernetes para instalar el ingress controller en el cluster

usuario@laptop ~ % INGRESS_NGINX_VERSION=v1.6.4
usuario@laptop ~ % wget -c -nv -O ingress-nginx-${INGRESS_NGINX_VERSION}.yaml  https://github.com/kubernetes/ingress-nginx/raw/controller-${INGRESS_NGINX_VERSION}/deploy/static/provider/cloud/deploy.yaml

Instala el ingress controller en el cluster de Kubernetes utilizando el archivo YAML que descargaste en el paso anterior

usuario@laptop ~ % file ingress-nginx-${INGRESS_NGINX_VERSION}.yaml
ingress-nginx-${INGRESS_NGINX_VERSION}.yaml: ASCII text

usuario@laptop ~ % kubectl apply -f ingress-nginx-${INGRESS_NGINX_VERSION}.yaml
namespace/ingress-nginx created
serviceaccount/ingress-nginx created
serviceaccount/ingress-nginx-admission created
role.rbac.authorization.k8s.io/ingress-nginx created
role.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrole.rbac.authorization.k8s.io/ingress-nginx created
clusterrole.rbac.authorization.k8s.io/ingress-nginx-admission created
rolebinding.rbac.authorization.k8s.io/ingress-nginx created
rolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx created
clusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission created
configmap/ingress-nginx-controller created
service/ingress-nginx-controller created
service/ingress-nginx-controller-admission created
deployment.apps/ingress-nginx-controller created
job.batch/ingress-nginx-admission-create created
job.batch/ingress-nginx-admission-patch created
ingressclass.networking.k8s.io/nginx created
validatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission created

Espera a que el pod del ingress controller esté listo

usuario@laptop ~ % kubectl get pods --selector=app.kubernetes.io/component=controller --namespace ingress-nginx
NAME                                       READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-c69664497-lxdtj   1/1     Running   0          30s

El ingress controller no abre de manera predeterminada los puertos 80 y 443 para recibir tráfico de HTTP y HTTPS

  • Aplica un parche al recurso deployment del ingress controller para hacer que utilice la red del host para que escuche en los puertos 80 y 443 del equipo
usuario@laptop ~ % kubectl patch deployment/ingress-nginx-controller -n ingress-nginx --patch '{"spec":{"template":{"spec":{"hostNetwork":true}}}}'
deployment.apps/ingress-nginx-controller patched

Ejecuta el siguiente comando para esperar a que el pod del ingress controller esté listo para recibir conexiones

usuario@laptop ~ % kubectl wait --for=condition=ready pod -n ingress-nginx  -l=app.kubernetes.io/component=controller  --timeout=180s
pod/ingress-nginx-controller-6b557cfc48-28pxz condition met

Revisa que el nuevo pod esté en ejecución

usuario@laptop ~ $ kubectl get pods -l=app.kubernetes.io/component=controller -n ingress-nginx
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-6b557cfc48-28pxz   1/1     Running   0          60s

Verifica que ingress-nginx esté activo en el equipo remoto#

Verifica que los puertos 80 y 443 estén asociados al proceso nginx

root@example:~# netstat -ntulp | egrep -w '80|443'
tcp      0     0     0.0.0.0:443      0.0.0.0:*      LISTEN   4096/nginx: master
tcp      0     0     0.0.0.0:80       0.0.0.0:*      LISTEN   4096/nginx: master
tcp6     0     0     :::443           :::*           LISTEN   4096/nginx: master
tcp6     0     0     :::80            :::*           LISTEN   4096/nginx: master

Verifica la instalación de ingress-nginx#

Revisa que el deployment se encuentre con estado READY 1/1

usuario@laptop ~ % kubectl get deployments -n ingress-nginx
NAME                       READY   UP-TO-DATE   AVAILABLE   AGE
ingress-nginx-controller   1/1     1            1           4m30s

Revisa que el estado del pod sea Running

usuario@laptop ~ % kubectl get pods -n ingress-nginx --field-selector=status.phase==Running
NAME                                        READY   STATUS    RESTARTS   AGE
ingress-nginx-controller-6b557cfc48-28pxz   1/1     Running   0          5m

Revisa que el servicio ingress-nginx-controller se encuentre activo

usuario@laptop ~ % kubectl get service ingress-nginx-controller -n ingress-nginx
NAME                       TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
ingress-nginx-controller   LoadBalancer   10.43.16.207   <pending>     80:30880/TCP,443:30994/TCP   10m

Revisa que te puedas conectar a los puertos 80 y 443 del servidor con netcat

usuario@laptop ~ % nc -vz tonejito.cf 80
tonejito.cf [20.58.191.222] 80 (http) open

usuario@laptop ~ % nc -vz tonejito.cf 443
tonejito.cf [20.58.191.222] 443 (https) open

Note

  • Reemplaza tonejito.cf con el nombre DNS de tu cluster de Kubernetes.

Verifica que ingress-nginx responda peticiones HTTP#

Intenta acceder a la página con el nombre de dominio del equipo

  • Obtendrás un error 404 de HTTP, esto es normal porque no se ha configurado nada aún
usuario@laptop ~ % curl -vk# 'http://tonejito.cf/'
*   Trying 20.58.191.222:80...
* Connected to tonejito.cf (20.58.191.222) port 80 (#0)
> GET / HTTP/1.1
> Host: tonejito.cf
> User-Agent: curl/7.88.1
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 404 Not Found
< Date: Fri, 26 May 2023 06:37:54 GMT
< Content-Type: text/html
< Content-Length: 146
< Connection: keep-alive
<
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Connection #0 to host tonejito.cf left intact

Abre la página web del servidor utilizando un navegador web

  • También recibirás un error 404 de HTTP porque aún no se realiza la configuración de la siguiente sección
Ingress-Nginx - Página inicial

Verifica la configuración#

Reinicia el equipo remoto para verificar que los cambios sean persistentes

root@example:~# reboot

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 el deployment y pod del ingress controller se encuentran listos y puedes visualizar la página web predeterminada en tu nombre de dominio

Página anterior Arriba Página siguiente