Configuration d'Ingress
Découvrez comment configurer votre configuration Ingress pour répondre à vos besoins de charge de travail.
Conservation de l'adresse IP source
Pour préserver les adresses IP source, vous pouvez activer le protocole PROXY pour les clusters de VPC. Cette option est disponible pour les clusters qui exécutent la version 4.13 ou ultérieure.
Le protocole PROXY offre un moyen pratique de transporter des informations de connexion, telles que l'adresse d'un client, à travers plusieurs couches de NAT ou de proxies TCP. Pour plus d'informations sur le protocole PROXY, voir la spécification HAProxy.
Par défaut, le contrôleur Ingress reçoit les connexions qui contiennent uniquement l'adresse source associée à l'équilibreur de charge. Vous pouvez activer le protocole PROXY dans les clusters de VPC pour configurer l'équilibreur de charge afin de conserver l'adresse du client d'origine pour les connexions reçues par le contrôleur Ingress.
Activation du protocole PROXY
-
Editez la ressource de contrôleur Ingress.
oc -n openshift-ingress-operator edit ingresscontroller/default -
Dans la ressource de contrôleur Ingress, recherchez la section
spec.endpointPublishingStrategy.loadBalanceret définissez les valeursproviderParameterssuivantes.endpointPublishingStrategy: loadBalancer: providerParameters: type: IBM ibm: protocol: PROXY scope: External type: LoadBalancerService -
Enregistrez et appliquez la ressource.
Désactivation du protocole PROXY
-
Editez la ressource de contrôleur Ingress.
oc -n openshift-ingress-operator edit ingresscontroller/default -
Dans la ressource de contrôleur Ingress, recherchez la section
spec.endpointPublishingStrategy.loadBalanceret définissez les valeursproviderParameterssuivantes.endpointPublishingStrategy: loadBalancer: providerParameters: type: IBM ibm: protocol: TCP scope: External type: LoadBalancerService -
Enregistrez et appliquez la ressource.
Personnalisation du routage Ingress avec des annotations
Si vous souhaitez personnaliser les règles de routage de votre application, vous pouvez utiliser des annotations « HAProxy » spécifiques à chaque route dans les ressources Ingress que vous définissez.
Ces annotations prises en charge sont au format haproxy.router.openshift.io/<annotation> ou router.openshift.io/<annotation>. Les annotationsIBM Cloud Kubernetes Service (ingress.bluemix.net/<annotation>)
et les annotations NGINX (nginx.ingress.kubernetes.io/<annotation>) ne sont pas prises en charge pour le contrôleur Ingress ou Ingress dans la version 4 Red Hat OpenShift.
Activation de la journalisation des accès
HTTP Les journaux d'accès contiennent des informations sur les requêtes HTTP entrantes. Les journaux d'accès sont utiles pour déboguer des problèmes complexes, mais le OpenShift routeur ne prend pas en charge la journalisation des accès par
défaut. Pour OpenShift les clusters, vous pouvez configurer la journalisation des accès pour les routeurs, ce qui se traduit par la présence d'un conteneur sidecar dans le pod du routeur qui exécute un syslog serveur et écrit
les journaux d'accès dans son fichier stdout.
-
Modifiez la configuration de
IngressControlleret ajoutez la configuration suivante à.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, commande
kubectl edit ingresscontroller -n openshift-ingress-operator default ingresscontroller.operator.openshift.io/default edited -
Vérifier si les pods du routeur utilisent deux conteneurs.
kubectl get pod -n openshift-ingress -wExemple de sortie
NAME READY STATUS RESTARTS AGE router-default-66945cc7c4-4xlnh 2/2 Running 0 36s router-default-66945cc7c4-5cxpn 2/2 Running 0 36s -
Vérifier les journaux d'accès.
kubectl logs -n openshift-ingress router-default-66945cc7c4-4xlnh -c logsExemple de sortie
... 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":"--"} ...
Amélioration de la gestion des connexions
Les paramètres clientTimeout et serverTimeout sont des configurations cruciales qui dictent la durée pendant laquelle les connexions restent actives entre les clients, le contrôleur Ingress et les serveurs dorsaux.
Ces délais jouent un rôle important dans l'optimisation du traitement des demandes, en particulier lorsqu'il s'agit de connexions client de longue durée, de réponses retardées de la part des serveurs dorsaux et de la protection de ressources
précieuses contre une occupation inutile.
Si vous prévoyez que les clients garderont les connexions ouvertes pendant une période plus longue, il est conseillé d'augmenter le paramètre clientTimeout pour répondre à ces scénarios. Inversement, si vos serveurs dorsaux présentent
une latence élevée en raison de volumes de trafic importants ou de charges de traitement, le réglage de serverTimeout peut permettre aux serveurs d'achever le traitement des demandes avant que le contrôleur d'ingestion ne mette
fin à la connexion.
Vous pouvez modifier les paramètres ci-dessus dans votre ressource IngressController:
apiVersion: operator.openshift.io/v1
kind: IngressController
...
spec:
tuningOptions:
clientTimeout: 5s
serverTimeout: 5s
Pour plus d'informations sur les options de réglage, consultez la OpenShift documentation.
Réglage des délais d'attente
Si vos clusters sont exposés avec IBM CloudCloud Internet Services (CIS) / Cloudflare et utilisent un pare-feu d'application Web (WAF) ou un équilibrage de charge global, vous devez définir clientTimeout et serverTimeout sur des valeurs supérieures à 900 secondes afin d'éviter les interruptions prématurées de connexion. Pour plus d'informations, consultez la documentation de Cloudflare.
-
Identifiez votre contrôleur d'entrée: Commencez par dresser la liste de vos ressources
IngressController. Cette opération peut être réalisée à l'aide de la commande :oc get ingresscontrollers -n openshift-ingress-operator -
Mettre à jour les paramètres de délai d'attente: Pour modifier les paramètres
clientTimeoutetserverTimeoutpour unIngressControllerspécifique, vous pouvez exécuter une commande patch. Par exemple, la commande suivante met à jour le paramètre de délai d'attente pour les contrôleurs d'entréedefaultà 905 secondes :oc patch ingresscontrollers default --patch '{"spec": {"tuningOptions":{"clientTimeout": "905s", "serverTimeout": "905s"}}}' --type=merge -n openshift-ingress-operator -
Clusters VPC uniquement: dans les cas où vous opérez dans un nuage privé virtuel (VPC), il est nécessaire de régler le délai d'inactivité de la connexion de l'équilibreur de charge VPC en même temps que les paramètres du contrôleur d'entrée. Nous vous recommandons de choisir un délai de connexion inactive plus long que les paramètres de délai de votre contrôleur d'entrée. La commande ci-dessous montre comment mettre à jour le délai de connexion inactive pour le service
router-defaultLoadBalancer à 910 secondes :oc annotate svc -n openshift-ingress service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout="910" router-default