Configuración de Ingress
Aprenda a configurar la configuración de Ingress para que se ajuste a sus necesidades de carga de trabajo.
Conservación de la dirección IP de origen
Para conservar las direcciones IP de origen, puede habilitar el protocolo PROXY para clústeres de VPC. Esta opción está disponible para clústeres que ejecutan la versión 4.13 o posterior.
El protocolo PROXY ofrece una forma cómoda de transportar información de conexión, como la dirección de un cliente, a través de varias capas de NAT o proxies TCP. Para más información sobre el protocolo PROXY, consulte la especificación HAProxy.
De forma predeterminada, el controlador de Ingress recibe conexiones que contienen sólo la dirección de origen asociada con el equilibrador de carga. Puede habilitar el protocolo PROXY en clústeres de VPC para configurar el equilibrador de carga para conservar la dirección de cliente original para las conexiones que recibe el controlador de Ingress.
Habilitación del protocolo PROXY
-
Edite el recurso del controlador de Ingress.
oc -n openshift-ingress-operator edit ingresscontroller/default -
En el recurso del controlador de Ingress, busque la sección
spec.endpointPublishingStrategy.loadBalancery defina los siguientes valores deproviderParameters.endpointPublishingStrategy: loadBalancer: providerParameters: type: IBM ibm: protocol: PROXY scope: External type: LoadBalancerService -
Guarda y aplica el recurso.
Inhabilitación del protocolo PROXY
-
Edite el recurso del controlador de Ingress.
oc -n openshift-ingress-operator edit ingresscontroller/default -
En el recurso del controlador de Ingress, busque la sección
spec.endpointPublishingStrategy.loadBalancery defina los siguientes valores deproviderParameters.endpointPublishingStrategy: loadBalancer: providerParameters: type: IBM ibm: protocol: TCP scope: External type: LoadBalancerService -
Guarda y aplica el recurso.
Personalización del direccionamiento de Ingress con anotaciones
Si quieres personalizar las reglas de enrutamiento de tu aplicación, puedes utilizar anotaciones « HAProxy » específicas para cada ruta en los recursos de Ingress que definas.
Estas anotaciones soportadas tienen el formato haproxy.router.openshift.io/<annotation> o router.openshift.io/<annotation>. Las anotaciones de IBM Cloud Kubernetes Service (ingress.bluemix.net/<annotation>)
y las anotaciones de NGINX (nginx.ingress.kubernetes.io/<annotation>) no están soportadas para el controlador de Ingress o el recurso de Ingress en Red Hat OpenShift versión 4.
Habilitación del registro de accesos
HTTP Los registros de acceso contienen información sobre las HTTP solicitudes entrantes. Disponer de registros de acceso resulta útil a la hora de depurar problemas complejos, pero el OpenShift router no admite el registro de acceso de forma
predeterminada. Para OpenShift los clústeres, puede configurar el registro de acceso para los enrutadores, lo que da como resultado tener un contenedor sidecar en el pod del enrutador que ejecuta un syslog servidor y escribe registros
de acceso en su stdout.
-
Edite la configuración de
IngressControllery añada la siguiente configuración a.spec.logging: access: destination: type: Container httpCaptureHeaders: request: - maxLength: 256 name: Host httpLogFormat: '{"time_date":"%t","client":"%ci","host":"%[capture.req.hdr(0)]","ssl_version":"%sslv","request_method":"%HM", "request_uri":"%HU","status":%ST,"upstream_addr":"%si:%sp","request_time":%Tt,"upstream_connect_time":%Tc, "upstream_header_time":%Tr,"termination_state":"%ts"}'edit, mandato
kubectl edit ingresscontroller -n openshift-ingress-operator default ingresscontroller.operator.openshift.io/default edited -
Compruebe si los pods del router están ejecutando dos contenedores.
kubectl get pod -n openshift-ingress -wSalida de ejemplo
NAME READY STATUS RESTARTS AGE router-default-66945cc7c4-4xlnh 2/2 Running 0 36s router-default-66945cc7c4-5cxpn 2/2 Running 0 36s -
Compruebe los registros de acceso.
kubectl logs -n openshift-ingress router-default-66945cc7c4-4xlnh -c logsSalida de ejemplo
... 2025-01-28T12:29:07.038592+00:00 router-default-7fc484bbb8-qfm5d router-default-7fc484bbb8-qfm5d haproxy[41]:{"time_date": "28/Jan/2025:12:29:06.879","client":"10.5.207.79","host":"alb-autoscale-example-service-default.pvg-classic-z9g5zltmgb1ir -1e7743ca80a399c9cff4eaf617434c72-0000.us-south.stg.kube.appdomain.cloud","ssl_version":"TLSv1.3","request_method": "GET","request_uri":"/","status":200,"upstream_addr":"172.30.210.252:8080","request_time":159,"upstream_connect_time":1, "upstream_header_time":2,"termination_state":"--"} 2025-01-28T12:29:09.572129+00:00 router-default-7fc484bbb8-qfm5d router-default-7fc484bbb8-qfm5d haproxy[41]: {"time_date": "28/Jan/2025:12:29:09.405","client":"10.5.207.79","host":"alb-autoscale-example-service-default.pvg-classic-z9g5zltmgb1ir -1e7743ca80a399c9cff4eaf617434c72-0000.us-south.stg.kube.appdomain.cloud","ssl_version":"TLSv1.3","request_method":"GET", "request_uri":"/","status":200,"upstream_addr":"172.30.210.252:8080","request_time":166,"upstream_connect_time":0, "upstream_header_time":3,"termination_state":"--"} ...
Ajuste de la gestión de las conexiones
Los parámetros clientTimeout y serverTimeout son configuraciones cruciales que dictan cuánto tiempo permanecen activas las conexiones entre los clientes, el controlador Ingress y los servidores backend. Estos tiempos
de espera desempeñan un papel importante en la optimización de la gestión de las solicitudes, sobre todo cuando se trata de conexiones de clientes de larga duración, respuestas retrasadas de los servidores backend y la salvaguarda de recursos
valiosos de ser ocupados innecesariamente.
Si prevés que los clientes mantendrán las conexiones abiertas durante más tiempo, es aconsejable aumentar la configuración de clientTimeout para hacer frente a estas situaciones. Por el contrario, si sus servidores backend tienen
una alta latencia debido a grandes volúmenes de tráfico o cargas de procesamiento, el ajuste de serverTimeout puede proporcionar el margen necesario para que los servidores completen el procesamiento de sus solicitudes antes de
que el controlador Ingress finalice la conexión.
Puede modificar los parámetros anteriores en su recurso IngressController:
apiVersion: operator.openshift.io/v1
kind: IngressController
...
spec:
tuningOptions:
clientTimeout: 5s
serverTimeout: 5s
Para obtener más información sobre las opciones de ajuste, consulte la OpenShift documentación.
Ajuste de los tiempos de espera
Si sus clústeres están expuestos con IBM CloudCloud Internet Services (CIS) / Cloudflare y utilizan un firewall de aplicaciones web (WAF) o un equilibrio de carga global, debe establecer clientTimeout y serverTimeout en valores superiores a 900 segundos para evitar terminaciones prematuras de la conexión. Para más información, consulte la documentación de Cloudflare.
-
Identifique su controlador de entrada: Empiece por enumerar sus recursos en
IngressController. Esto se puede conseguir con el comandooc get ingresscontrollers -n openshift-ingress-operator -
Actualice los parámetros de tiempo de espera: Para modificar los parámetros
clientTimeoutyserverTimeoutpara unIngressControllerespecífico, puede ejecutar un comando patch. Por ejemplo, el siguiente comando actualiza el tiempo de espera de los controladores de entrada dedefaulta 905 segundos:oc patch ingresscontrollers default --patch '{"spec": {"tuningOptions":{"clientTimeout": "905s", "serverTimeout": "905s"}}}' --type=merge -n openshift-ingress-operator -
Sólo clústeres VPC: En los casos en los que esté operando dentro de una Nube Privada Virtual (VPC), es necesario ajustar el tiempo de espera de conexión inactiva del equilibrador de carga VPC junto con la configuración de su Controlador de Entrada. Recomendamos elegir un tiempo de espera de conexión inactiva mayor que la configuración de tiempo de espera de su controlador de entrada. El siguiente comando muestra cómo actualizar el tiempo de espera de conexión inactiva para el servicio
router-defaultLoadBalancer a 910 segundos:oc annotate svc -n openshift-ingress service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout="910" router-default