GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo configurar el controlador de entrada NGINX en Kubernetes

Ingreso es uno de los conceptos importantes en Kubernetes, que permite a los usuarios externos acceder a aplicaciones en contenedores usando FQDN (nombre de dominio completo). Aunque Ingress no está habilitado ni instalado de forma predeterminada en el clúster de Kubernetes. Debemos habilitar este concepto central utilizando controladores de ingreso de terceros como Nginx, Traefik, HAProxy e Istio, etc.

En este tutorial, demostraremos cómo configurar y usar el controlador NGINX Ingress en Kubernetes Cluster.

Como se muestra en la imagen de arriba, los usuarios externos acceden a las aplicaciones mediante el controlador de entrada NGINX a través de FQDN y el controlador de entrada interno enruta la solicitud al servicio y luego el servicio enruta la solicitud a los puntos finales o pods del back-end.

Habilitar el controlador de entrada NGINX en Minikube

Minikube es un clúster de Kubernetes de un solo nodo, podemos habilitar fácilmente el controlador de entrada nginx en minikube ejecutando "complementos de minikube ” comando.

Ejecute el siguiente comando para verificar el estado del controlador de ingreso,

# minikube addons list

Ejecute el siguiente comando minikube para habilitar el controlador de ingreso,

[[email protected] ~]# minikube addons enable ingress
* The 'ingress' addon is enabled
[[email protected] ~]#

Si volvemos a ejecutar el comando "minikube addons list", esta vez debemos ver que el estado de ingreso está habilitado.

Ejecute el siguiente comando kubectl para verificar si el pod del controlador de ingreso se está ejecutando o no.

[[email protected] ~]# kubectl get pods --all-namespaces | grep -i nginx-controller
kube-system      ingress-nginx-controller-7bb4c67d67-gkjj5    1/1     Running            0          20m
[[email protected] ~]#

El resultado anterior confirma que nginx-controller se habilitó e inició correctamente su pod en el espacio de nombres del sistema kube.

Configurar el controlador de entrada en el clúster de Kubernetes (Baremetal)

Nota: Supongo que el clúster de Kubernetes está en funcionamiento.

Inicie sesión en el nodo maestro o el plano de control y ejecute el siguiente comando kubectl para instalar el ingreso.

$ kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/baremetal/deploy.yaml

Salida,

Verifique el estado de Ingress, ejecute debajo de los comandos de kubectl

[[email protected] ~]$ kubectl get pods -n ingress-nginx
NAME                                    READY     STATUS    RESTARTS   AGE
ingress-nginx-admission-create-4phb2     0/1      Completed   0        8m53s
ingress-nginx-admission-patch-m9t8z      0/1      Completed   2        8m53s
ingress-nginx-controller-f9d6fc8d8-r92jd 1/1      Running     0        8m53s
[[email protected] ~]$

$ kubectl get all -n ingress-nginx

Perfecto, la salida anterior confirma que el controlador de entrada se ha instalado correctamente.

Controlador de entrada de prueba

Para probar el controlador de entrada, primero agregue las siguientes entradas en haproxy. Mi módulo de controlador de ingreso se ejecuta en el nodo trabajador 2, por eso mencioné el nodo trabajador 2 junto con NodePort.

Guarde y cierre el archivo y luego reinicie el servicio haproxy.

Cree una implementación basada en nginx con el nombre 'myapp'

$ kubectl create deployment myapp --image=nginx
deployment.apps/myapp created
$

Cree un servicio exponiendo la implementación con el tipo 'NodePort'

$ kubectl expose deployment myapp --name=myapp --type=NodePort --port=80
service/myapp exposed
$

Verifique el estado de implementación y servicio, ejecute

$ kubectl get deployments myapp
$ kubectl get svc myapp

salida,

Crear recurso de ingreso para myapp

Cree el archivo demo-ingress.yaml con el siguiente contenido. Cuando aplicamos este archivo, creará un recurso de ingreso que permitirá acceder a la aplicación desde fuera del clúster de Kubernetes a través del nombre de host. Entonces, en este caso, el nombre de host de la aplicación es 'myapp.example.com'

$ vi demo-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-demo
spec:
  ingressClassName: nginx
  rules:
  - host: "myapp.example.com"
  http:
    paths:
    - pathType: Prefix
      path: /
      backend:
        service:
          name: myapp
          port:
            number: 80

guarde y cierre el archivo.

Ejecute debajo del comando kubectl para crear el recurso de ingreso anterior,

$ kubectl create -f demo-ingress.yaml
ingress.networking.k8s.io/ingress-demo created
$

Ejecute lo siguiente para verificar el estado del recurso de ingreso creado anteriormente

$ kubectl get ingress ingress-demo 
$kubectl describe ingress ingress-demo

Perfecto, la salida anterior confirma que los recursos de ingreso se crearon correctamente.

Antes de acceder a estas direcciones URL desde fuera del clúster, asegúrese de agregar la siguiente entrada en el archivo de hosts de su sistema desde donde pretendía acceder a ellas.

192.168.1.240                myapp.example.com

Ahora intente acceder a la URL desde el navegador web, escriba

http://miaplicación.ejemplo.com

Genial, lo anterior confirma que implementamos y configuramos con éxito el controlador de ingreso nginx en Kubernetes. Comparta sus valiosos comentarios y opiniones.


Linux
  1. Cómo generar un certificado autofirmado para Kubernetes

  2. Cómo configurar el clúster de Kubernetes (k8s) en HA con Kubeadm

  3. Cómo configurar el clúster de Kubernetes en Google Cloud Platform (GCP)

  4. Cómo configurar NGINX de alta disponibilidad con KeepAlived en Linux

  5. Cómo configurar Samba como controlador de dominio principal en Linux

Cómo configurar Nginx como proxy inverso para Apache en Ubuntu 18.04 VPS

Cómo configurar Nginx Cache en un servidor LAMP

Cómo configurar la caché de Nginx en el servidor LEMP

Cómo configurar Mantis Bug Tracker en Debian 10

Cómo configurar un servidor NGINX RTMP para transmisión

Cómo configurar Logstash en Linux con ElasticSearch, Redis, Nginx