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
y443
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 |