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-controller
el usuario declarado nginx-ingress
como 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-controller
monitorear los api-server
cambios (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.
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 Controller
lograr 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-controller
traerá negocio lo que preocupa
Aquí la consola de servicio de contenedor en la nube de Tencent (en lo sucesivo TKE
) la predeterminada recomendada ingress controller
como ejemplo, hay algunos problemas de la siguiente manera:
- 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.
- Se ha utilizado el negocio original
nginx-inrgess
, y la operación y mantenimiento se ha acostumbrado a la configuraciónnginx.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 Ingress
el clúster, ingrese el clúster, qué componentes de administración, implementación e instalación Nginx Ingess
, de la siguiente manera:
Los componentes están instalados y funcionando normalmente
Plan de empleo
TKE proporciona una variedad nginx-ingress-controller
de 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 +
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 .
Al utilizar este esquema de implementación, debe prestar atención a los siguientes elementos:
-
Esté listo para implementar el
nginx-ingress-controller
grupo de nodos, establezca defectos en el grupo de nodosTaint
yLabel
evite que se envíen otros Pod al grupo de nodos. -
Asegúrese de que la implementación exitosa de los
nginx-ingress-operator
componentes 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
- Selección del método de implementación
Opción 2: Implementación + HPA
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.
Al utilizar este esquema de implementación, debe prestar atención a los siguientes elementos:
-
Configurado para implementarse en un
nginx-ingress-controller
nodo de etiqueta de clúster -
Asegúrese de que la implementación exitosa de los
nginx-ingress-operator
componentes 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-controller
nodos exclusivos, evite otros recursos comerciales resultantes de la ocupación no disponible - Se pueden configurar otros parámetros según las necesidades comerciales
- Selección del método de implementación
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-operator
y nginx-ingress-controller
el 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):
- El propio complemento de red del clúster es
VPC-CNI
- Complemento de clúster para su propia red
Global Router
y activadoVPC-CNI
el soporte (ambos modos se mezclan)
Usamos el ejemplo de carga implementado por el grupo de nodos. La
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-CNI
el modo de red, se puede obtener mediante LoadBalancer
mé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:
- 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.
- 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.
- 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.
- 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 ingress
no 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 Label
y luego la forma DaemonSet de implementar en esos nodos (es decir, el nginx-ingress-controller
escenario 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
Ver datos de monitoreo
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-controller
recopilación de registros y el poder adquisitivo, pero algunas cosas a tener en cuenta son las siguientes:
- Requisito previo: asegúrese de que la función de recopilación de registros esté habilitada en el clúster actual
- En el
nginx-ingress-controller
ejemplo, las opciones de configuración relacionadas con la adquisición del registro.
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-controller
hay 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-controller
soporte 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.