Utilice Tencent Cloud Container Service para jugar a Nginx Ingress

El autor Lin Yuxin, ingeniero de productos de contenedores en la nube de Tencent. Actualmente, es el principal responsable de la investigación y el desarrollo de la consola Tencent Cloud TKE.

Visión general

En la comunidad de código abierto, hay muchas formas de implementar el controlador de entrada de Kubernetes. Nginx Ingress es solo una de ellas. Por supuesto, también es el controlador de entrada más utilizado en la comunidad. No solo es potente, sino también de rendimiento. Extremadamente alto. Este artículo presenta principalmente cómo usar Tencent Cloud Container Service para implementar la implementación de Nginx Ingress de varias maneras, y presentará brevemente los principios de implementación, las ventajas y desventajas y los escenarios aplicables de cada método.

¿Qué es Nginx Ingress?

Nginx Ingress es un objeto Kubernetes por nginx-ingress-controllerel usuario declarado nginx-ingresscomo transformación de reglas de reenvío nginx. El problema central que debe resolverse es el reenvío del tráfico y el equilibrio de carga en dirección este-oeste.
El principio de funcionamiento principal es nginx-ingress-controllermonitorear los api-servercambios (Kubernetes Informers) y cambiar la configuración de la instancia de Nginx mediante la observación de los cambios de Kubernetes en objetos como Ingress, Service, Endpoint, Secret y ConfigMap para reenviar el tráfico.

img

Actualmente en la comunidad, existen principalmente los siguientes dos métodos de implementación para Nginx Ingress

Por qué necesita Nginx Ingress

Entre la comunidad de código abierto, para Ingress Controllerlograr una variedad de formas, cada una de las cuales tiene sus escenarios aplicables de Controlador y sus ventajas y desventajas, ¿por qué se recomienda su uso nginx-ingress-controller? Hablemos de, si no lo usas nginx-ingress-controllertraerá negocio lo que preocupa

Aquí la consola de servicio de contenedor en la nube de Tencent (en lo sucesivo TKE) la predeterminada recomendada ingress controllercomo ejemplo, hay algunos problemas de la siguiente manera:

  1. La capacidad de entrada de tipo CLB no puede satisfacer las necesidades de los servicios existentes, como la imposibilidad de compartir la misma entrada de red externa, admitir el backend de reenvío predeterminado, etc.
  2. Se ha utilizado el negocio original nginx-inrgess, y la operación y mantenimiento se ha acostumbrado a la configuración nginx.conf, no quiero hacer demasiados cambios.

Uso nginx-ingress-controller, puede resolver los problemas anteriores.

Qué prerrequisitos se necesitan

Implementar nginx-ingress-operator

Implementación e instalación de componentes

Tencent servicio en la nube en el contenedor entre la consola, seleccione la necesidad de implementar Nginx Ingressel clúster, ingrese el clúster, qué componentes de administración, implementación e instalación Nginx Ingess, de la siguiente manera:

img

Los componentes están instalados y funcionando normalmente

img

Plan de empleo

TKE proporciona una variedad nginx-ingress-controllerde soluciones de implementación y formas de acceder a LB para adaptarse a diferentes escenarios comerciales. A continuación se presentarán diferentes soluciones.

plan de implementación de nginx-ingress-controller

Opción 1: grupo de nodos DaemonSet +

img

Como puerta de enlace de acceso de tráfico clave, Nginx es un componente vital. No se recomienda implementar Nginx y otros servicios en el mismo nodo. Se puede implementar estableciendo taints en el grupo de nodos. Para obtener instrucciones relacionadas sobre los grupos de nodos, puede consultar la descripción general del grupo de nodos de Tencent Cloud Container Service .

img

Al utilizar este esquema de implementación, debe prestar atención a los siguientes elementos:

  • Esté listo para implementar el nginx-ingress-controllergrupo de nodos, establezca defectos en el grupo de nodos Tainty Labelevite que se envíen otros Pod al grupo de nodos.

  • Asegúrese de que la implementación exitosa de los nginx-ingress-operatorcomponentes instalados , la implementación por encima de la Guía de referencia

  • Ingrese los detalles del componente, cree

    nginx-ingress-controller

    Instancia (pueden existir varias instancias en un solo clúster al mismo tiempo)

    • Selección del método de implementación 指定节点池DaemonSet部署
    • Establecer tolerancia a la mancha
    • Establecer solicitud / límite, donde la solicitud debe establecerse más pequeña que la configuración del modelo del grupo de nodos (el nodo en sí tiene recursos reservados para evitar que la instancia no esté disponible debido a recursos insuficientes), el límite no se puede establecer
    • Se pueden configurar otros parámetros según las necesidades comerciales
Opción 2: Implementación + HPA

img

Con la solución deployment + HPA para la implementación, puede configurar la contaminación y la tolerancia de acuerdo con las necesidades comerciales, e implementar Nginx y Business Pods de manera descentralizada. Con HPA, establezca indicadores como CPU / memoria para escalado elástico.

img

Al utilizar este esquema de implementación, debe prestar atención a los siguientes elementos:

  • Configurado para implementarse en un nginx-ingress-controllernodo de etiqueta de clúster

  • Asegúrese de que la implementación exitosa de los nginx-ingress-operatorcomponentes instalados , guía de referencia de implementación anterior.

  • Ingrese los detalles del componente, cree

    nginx-ingress-controller

    Instancia (pueden existir varias instancias en un solo clúster al mismo tiempo)

    • Selección del método de implementación 自定义Deployment+HPA部署
    • Establecer la estrategia de activación de HPA
    • Establecer solicitud / límite
    • Establezca la política de programación de nodos, recomiende nginx-ingress-controllernodos exclusivos, evite otros recursos comerciales resultantes de la ocupación no disponible
    • Se pueden configurar otros parámetros según las necesidades comerciales

Acceso de front-end de Nginx al método de implementación de LB

Ella describió anteriormente, desplegado en clústeres entre TKE nginx-ingress-operatory nginx-ingress-controllerel despliegue y uso de procesos que el cumplimiento de los pasos anteriores, solo desplegado en un clúster de componentes relacionados Nginx, pero para recibir tráfico externo, configurar, configurar nginx La parte delantera LB. Actualmente, TKE ha completado el soporte de productización para Nginx Ingress. Puede elegir uno de los siguientes modos de implementación según sus necesidades comerciales.

Solución 1: el clúster en modo VPC-CNI usa CLB para comunicarse con el servicio Nginx (recomendado)

Condiciones previas (satisfacer una de ellas):

  1. El propio complemento de red del clúster es VPC-CNI
  2. Complemento de clúster para su propia red Global Routery activado VPC-CNIel soporte (ambos modos se mezclan)

Usamos el ejemplo de carga implementado por el grupo de nodos. La
img
solución actual tiene un buen rendimiento. La tarjeta de red elástica utilizada por todos los Pods. El Pod de la tarjeta de red elástica admite CLB para vincular directamente el Pod, que puede omitir el NodePort, y no necesita mantener manualmente el CLB, y admite el escalado automático. El contenido es la solución más ideal.

Solución 2: el clúster de modo de enrutador global utiliza el servicio de modo LoadBalancer normal

La implementación predeterminada del TKE actual del tipo de servicio LoadBalancer se basa en NodePort, CLB vinculará el NodePort de cada nodo como el RS de back-end, reenviará el tráfico al NodePort del nodo y luego el nodo enrutará la solicitud a la publicación correspondiente del Servicio a través de Iptables o IPVS End Pod (se refiere al Pod de Nginx Ingress Controller).

Si su clúster no es compatible con VPC-CNIel modo de red, se puede obtener mediante LoadBalancermétodos de acceso de tráfico de acceso al servicio convencionales .
Esta es la forma más sencilla de implementar Nginx Ingress en TKE. El tráfico pasará a través de una capa de NodePort y será reenviado por otra capa. Sin embargo, pueden existir los siguientes problemas:

  1. La ruta de reenvío es larga. Una vez que el tráfico llega al NodePort, pasará por el equilibrio de carga interno de Kubernetes y se reenviará a Nginx a través de Iptables o IPVS, lo que aumentará el consumo de tiempo de la red.
  2. Después de NodePort, inevitablemente se producirá SNAT. Si el tráfico está demasiado concentrado, es fácil hacer que el puerto de origen se agote o que los conflictos de inserción de Conntrack provoquen la pérdida de paquetes y algunas anomalías en el tráfico.
  3. El NodePort de cada nodo también actúa como un equilibrador de carga. Si el CLB está vinculado al NodePort de una gran cantidad de nodos, el estado del equilibrio de carga se dispersará en cada nodo, lo que fácilmente conducirá a una carga global desigual.
  4. CLB realizará la detección de salud en el NodePort, y el paquete de detección eventualmente se reenviará al Nginx Ingress Pod. Si el número de nodos vinculados al CLB es mayor que el Nginx Ingress Pod, el paquete de detección causará una mayor presión sobre Nginx Ingress.
Solución 3: use HostNetwork + LB

Aunque la segunda solución es el método de implementación más simple, el tráfico pasará a través de una capa de NodePort y puede haber problemas como se describió anteriormente. Podemos permitir que Nginx Ingress use HostNetwork y CLB se vincule directamente con el puerto IP + del nodo (80,443). Debido al uso de HostNetwork, los pods nginx ingressno se pueden programar en el mismo nodo para evitar conflictos de monitoreo de puertos.
Dado que TKE no tiene un programa de producto, puede planificar con anticipación, elegir algunos de los nodos, específicamente para la implementación nginx-ingress-controller, los nodos marcados Labely luego la forma DaemonSet de implementar en esos nodos (es decir, el nginx-ingress-controllerescenario de implementación a).

Cómo integrar el monitoreo

TKE integra el servicio de monitoreo nativo en la nube de alto rendimiento de Tencent Cloud Container Team (Portal: https://console.cloud.tencent.com/tke2/prometheus ), y también se puede utilizar en el artículo publicado anteriormente "Cómo monitorear 100,000 contenedores con Prometheus "Kubernetes Cluster" para aprender sobre Prometheus, Kvass y cómo utilizar la tecnología de agrupación de Prometheus basada en kvass.

Vincular instancia de supervisión

img

Ver datos de monitoreo

img

Cómo recolectar y consumir registros

TKE Al integrar el servicio en la nube CLS de Log Tencent, proporciona una gama completa de capacidades de producto completas, logra la nginx-ingress-controllerrecopilación de registros y el poder adquisitivo, pero algunas cosas a tener en cuenta son las siguientes:

  1. Requisito previo: asegúrese de que la función de recopilación de registros esté habilitada en el clúster actual
  2. En el nginx-ingress-controllerejemplo, las opciones de configuración relacionadas con la adquisición del registro.

img

para resumir

Este documento revisa cómo usar la consola de servicio en la nube de Tencent. Fun Nginx Ingress container, principalmente introducido para la consola, nginx-ingress-controllerhay dos formas de implementación y recomendaciones, así como el acceso de front-end LB de tres formas, además de Nginx Ingress en el TKE. Implementación con un solo clic, TKE también brinda nginx-ingress-controllersoporte de productos implementados en clústeres relacionados con la capacidad de registro y monitoreo. Para aquellos que quieran usar Nginx Ingress en TKE, este artículo es una buena referencia y guía.

Supongo que te gusta

Origin blog.51cto.com/14120339/2575983
Recomendado
Clasificación