nginx-ingress
Presentación
Kubernetes utiliza kube-proxy para exponer Services y proporcionar balanceo de carga. La implementación es en la capa de transporte. Cuando se trata de aplicaciones de Internet, donde se genera un bucket de información, el reenvío debe estar más detallado, controlado de manera precisa y flexible por políticas y balanceadores de carga para ofrecer un mayor rendimiento.
Aquí es donde entran las entradas. Los ingresos proporcionan funciones de reenvío de la capa de aplicación, como hosts virtuales, balanceo de carga, proxy SSL y enrutamiento HTTP, para Services a los que se puede acceder directamente fuera de un clúster.
Kubernetes ha lanzado oficialmente el controlador de ingreso basado en Nginx. nginx-ingress es un complemento que utiliza ConfigMaps para almacenar configuraciones de Nginx. El controlador de entrada de Nginx genera configuraciones de Nginx para una entrada y escribe las configuraciones en el pod de Nginx con la API de Kubernetes. Estas configuraciones se pueden modificar y actualizar mediante recarga.
El complemento de nginx-ingress en CCE se implementa usando el gráfico y la imagen de comunidad de código abierto. CCE no mantiene el complemento. Por lo tanto, no se recomienda que el complemento de nginx-ingress se use comercialmente.
Puede visitar la comunidad de código abierto para obtener más información.
- Al instalar el complemento, puede agregar configuraciones definiendo la configuración de Nginx. Las configuraciones tienen efecto globalmente. Este parámetro se genera configurando el archivo nginx.conf y afecta a todas las entradas gestionadas. Puede buscar los parámetros relacionados en el ConfigMap. Si los parámetros configurados no se incluyen en las opciones enumeradas en ConfigMap, las configuraciones no surten efecto.
- Después de instalar el complemento, puede interconectarse con Nginx y agregar annotations de Kubernetes a una entrada específica para personalizar su comportamiento al crear una entrada en la consola de CCE. Para obtener más información sobre el campo de annotations de Kubernetes, consulte Anotaciones.
- No modifique o elimine manualmente el balanceador de carga y el oyente que son creados automáticamente por CCE. De lo contrario, la carga de trabajo será anormal. Si los ha modificado o eliminado por error, debe desinstalar el complemento de nginx-ingress y volver a instalarlo.
Cómo funciona nginx-ingress
nginx-ingress consiste en el objeto de ingreso, el controlador de ingreso y Nginx. El controlador de ingreso ensambla las entradas en el archivo de configuración de Nginx (nginx.conf) y recarga Nginx para hacer que las configuraciones cambiadas surtan efecto. Cuando detecta que el pod en un Service cambia, cambia dinámicamente la configuración del grupo de servidores ascendentes de Nginx. En este caso, el proceso de Nginx no necesita ser recargado. Figura 1 muestra cómo funciona nginx-ingress.
- Una entrada es un grupo de reglas de acceso que reenvía solicitudes a los servicios especificados en función de nombres de dominio o direcciones URL. Las entradas se almacenan en el servicio de almacenamiento de objetos etcd, y se agregan, eliminan, modifican y consultan con las API.
- El controlador de entrada supervisa los cambios de objetos de recursos como entradas, Services, puntos de conexión, secretos (principalmente certificados y claves TLS), nodos y ConfigMaps en tiempo real y realiza automáticamente operaciones en Nginx.
- Nginx implementa el balanceo de carga y control de acceso en la capa de aplicación.
Restricciones
- Este complemento solo se puede instalar en clústeres de CCE de v1.15 o posterior.
- kubernetes.io/ingress.class: "nginx" debe agregarse a la anotación de la entrada creada invocando a una API.
- Los balanceadores de carga dedicados deben ser del tipo de red (TCP/UDP) que admita las redes privadas (con una IP privada).
- El nodo donde nginx-ingress-controller se está ejecutando y los contenedores que se está ejecutando en el nodo no puede acceder a Nginx Ingress. En este caso, realice el despliegue de antiafinidad para las cargas de trabajo y nginx-ingress-controlador. Para obtener más información, véase Despliegue de antiafinidad para cargas de trabajo y nginx-ingress-controller.
Requisitos previos
Antes de crear una carga de trabajo, debe tener un clúster disponible. Si no hay ningún clúster disponible, cree uno según Compra de un clúster de CCE.
Instalación del complemento
- La vulnerabilidad de CVE-2021-25746 se ha corregido en nginx-ingress-controller de v1.2.0 (correspondiente al complemento 2.1.0 de CCE nginx-ingress). Las reglas se agregan para deshabilitar algunas anotaciones propensas al acceso no autorizado.
- La vulnerabilidad de CVE-2021-25745 se ha corregido en nginx-ingress-controller de v1.2.0 (correspondiente al complemento 2.1.0 de CCE nginx-ingress). Las reglas se agregan para deshabilitar algunas rutas de acceso propensas al acceso no autorizado.
- Inicie sesión en la consola de CCE.
- En el panel de navegación de la izquierda, elija Add-ons y haga clic en Install en nginx-ingress.
- Establezca los parámetros de configuración.
- Cluster: Seleccione un clúster.
- Specifications: Seleccione o personalice las especificaciones adicionales según sea necesario.
- Pods: Establezca el número de pods en función de los requisitos de servicio.
- Containers: Establezca una cuota de contenedor adecuada en función de los requisitos de servicio.
- Load Balancer: Seleccione un balanceador de carga compartido o dedicado. Si no hay ningún balanceador de carga disponible, cree uno primero. El balanceador de carga tiene al menos dos oyentes, y los puertos 80 y 443 no están ocupados por oyentes.
- Nginx Parameters: La configuración del archivo nginx.conf afectará a todas las entradas gestionadas. Puede buscar parámetros relacionados con ConfigMaps. Si los parámetros que ha configurado no están incluidos en las opciones enumeradas en esos ConfigMaps, los parámetros no tendrán efecto.
Por ejemplo, puede utilizar el parámetro keep-alive-requests para describir cómo establecer el número máximo de solicitudes para mantener las conexiones activas en 100.
{ "keep-alive-requests": "100" }
- Default 404 Service: De forma predeterminada, se utiliza el servicio 404 proporcionado por el complemento. Para personalizar el servicio 404, escriba el nombre del espacio de nombres/servicio. Si el servicio no existe, se producirá un error en la instalación del complemento.
- Haga clic en Install.
Despliegue de antiafinidad para cargas de trabajo y nginx-ingress-controller
El nodo donde nginx-ingress-controller se está ejecutando y los contenedores que se está ejecutando en el nodo no puede acceder a Nginx Ingress. Para evitar este problema, debe configurar una regla antiafinidad para indicar al planificador que no coubique la carga de trabajo y nginx-ingress-controller en el mismo nodo.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: nginx:aplpine imagePullPolicy: IfNotPresent name: nginx imagePullSecrets: - name: default-secret affinity: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: # Use the labels of nginx-ingress-controller to implement anti-affinity. - key: app operator: In values: - nginx-ingress - key: component operator: In values: - controller namespaces: - kube-system topologyKey: kubernetes.io/hostname
Historial de cambios
Versión del complemento |
Versión de clúster admitida |
Versión de la comunidad (solo para clústeres de v1.17 y posteriores) |
---|---|---|
2.2.3 |
/v1.25.*/ |
|
2.2.1 |
/v1.25.*/ |
|
2.1.3 |
/v1.(19|21|23).*/ |
|
2.1.1 |
/v1.(19|21|23).*/ |
|
2.1.0 |
/v1.(19|21|23).*/ |
|
2.0.1 |
/v1.(19|21|23).*/ |
|
1.3.2 |
/v1.(15|17|19|21).*/ |
|
1.2.6 |
/v1.(15|17|19).*/ |
|
1.2.5 |
/v1.(15|17|19).*/ |
|
1.2.3 |
/v1.(15|17|19).*/ |
|
1.2.2 |
/v1.(15|17).*/ |