Búsqueda de sitios web

Cómo implementar Nginx en un clúster de Kubernetes


En nuestro último artículo, analizamos cómo configurar y ejecutar un clúster de Kubernetes. Analicemos cómo podemos implementar el servicio NGINX en nuestro clúster.

Ejecutaré esta implementación en una máquina virtual alojada por un proveedor de nube pública. Como ocurre con muchos servicios de nube pública, muchos generalmente mantienen un esquema de IP pública y privada para sus máquinas virtuales.

Entorno de prueba

Master Node - Public IP: 104.197.170.99 and Private IP: 10.128.15.195
Worker Node 1 - Public IP: 34.67.149.37 and Private IP: 10.128.15.196
Worker Node 2 - Public IP: 35.232.161.178 and Private IP: 10.128.15.197

Implementación de NGINX en un clúster de Kubernetes

Ejecutaremos esta implementación desde el nodo maestro.

Comencemos verificando el estado del clúster. Todos sus nodos deben estar en estado LISTO.

kubectl get nodes

Creamos un despliegue de NGINX usando la imagen NGINX.

kubectl create deployment nginx --image=nginx

Ahora puede ver el estado de su implementación.

kubectl get deployments

Si desea ver más detalles sobre su implementación, puede ejecutar el comando describe. Por ejemplo, es posible determinar cuántas réplicas de la implementación se están ejecutando. En nuestro caso, esperamos ver una réplica de 1 ejecutándose (es decir, 1/1 réplicas).

kubectl describe deployment nginx

Ahora que su implementación de Nginx está activa, es posible que desee exponer el servicio NGINX a una IP pública accesible en Internet.

Exponer su servicio Nginx a la red pública

Kubernetes ofrece varias opciones a la hora de exponer su servicio en función de una característica llamada Tipos de servicio de Kubernetes y son:

  1. ClusterIP: este tipo de servicio generalmente expone el servicio en una IP interna, accesible solo dentro del clúster y posiblemente solo dentro de los nodos del clúster.
  2. NodePort: esta es la opción más básica para exponer su servicio para que sea accesible fuera de su clúster, en un puerto específico (llamado NodePort) en cada nodo del clúster. Ilustraremos esta opción en breve.
  3. LoadBalancer: esta opción aprovecha los servicios externos de equilibrio de carga ofrecidos por varios proveedores para permitir el acceso a su servicio. Esta es una opción más confiable cuando se piensa en la alta disponibilidad de su servicio y tiene más funciones además del acceso predeterminado.
  4. ExternalName: este servicio redirige el tráfico a servicios fuera del clúster. Como tal, el servicio se asigna a un nombre DNS que podría alojarse fuera de su clúster. Es importante tener en cuenta que esto no utiliza proxy.

El tipo de servicio predeterminado es ClusterIP.

En nuestro escenario, queremos usar el tipo de servicio NodePort porque tenemos una dirección IP pública y privada y no necesitamos un balanceador de carga externo por ahora. Con este tipo de servicio, Kubernetes asignará este servicio en puertos en el rango 30000+.

kubectl create service nodeport nginx --tcp=80:80

Ejecute el comando get svc para ver un resumen del servicio y los puertos expuestos.

kubectl get svc

Ahora puede verificar que se pueda acceder a la página Nginx en todos los nodos mediante el comando curl.

curl master-node:30386
curl node-1:30386
curl node-2:30386

Como puede ver, se puede acceder a la página "¡BIENVENIDO A NGINX!".

Alcanzando direcciones IP PÚBLICAS efímeras

Como habrás notado, Kubernetes informa que no tengo ninguna IP pública activa registrada, o más bien ninguna IP EXTERNA registrada.

kubectl get svc

Verifiquemos si es cierto que no tengo una IP EXTERNA adjunta a mis interfaces usando el comando IP.

ip a

No hay IP pública como puedes ver.

Como mencioné anteriormente, actualmente estoy ejecutando esta implementación en una máquina virtual ofrecida por un proveedor de nube pública. Entonces, si bien no hay una interfaz particular asignada a una IP pública, el proveedor de VM ha emitido una dirección IP externa efímera.

Una dirección IP externa efímera es una dirección IP temporal que permanece adjunta a la VM hasta que se detiene la instancia virtual. Cuando se reinicia la instancia virtual, se asigna una nueva IP externa. Básicamente, es una forma sencilla para que los proveedores de servicios aprovechen las IP públicas inactivas.

El desafío aquí, aparte del hecho de que su IP pública no es estática, es que la IP pública efímera es simplemente una extensión (o proxy) de la IP privada y, por esa razón, el servicio solo se accederá en el puerto 30386. Eso significa que se accederá al servicio en la URL , es decir 104.197.170.99:30386, que si marca su navegador, debería poder ver la página de bienvenida.

Con eso, hemos implementado con éxito NGINX en nuestro clúster Kubernetes de 3 nodos.