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

  1. Editez la ressource de contrôleur Ingress.

    oc -n openshift-ingress-operator edit ingresscontroller/default
    
  2. Dans la ressource de contrôleur Ingress, recherchez la section spec.endpointPublishingStrategy.loadBalancer et définissez les valeurs providerParameters suivantes.

    endpointPublishingStrategy:
      loadBalancer:
        providerParameters:
          type: IBM
          ibm:
            protocol: PROXY
        scope: External
      type: LoadBalancerService
    
  3. Enregistrez et appliquez la ressource.

Désactivation du protocole PROXY

  1. Editez la ressource de contrôleur Ingress.

    oc -n openshift-ingress-operator edit ingresscontroller/default
    
  2. Dans la ressource de contrôleur Ingress, recherchez la section spec.endpointPublishingStrategy.loadBalancer et définissez les valeurs providerParameters suivantes.

    endpointPublishingStrategy:
      loadBalancer:
        providerParameters:
          type: IBM
          ibm:
            protocol: TCP
        scope: External
      type: LoadBalancerService
    
  3. 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.

  1. Modifiez la configuration de IngressController et 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
    
  2. Vérifier si les pods du routeur utilisent deux conteneurs.

    kubectl get pod -n openshift-ingress -w
    

    Exemple 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
    
  3. Vérifier les journaux d'accès.

    kubectl logs -n openshift-ingress router-default-66945cc7c4-4xlnh -c logs
    

    Exemple 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.

  1. 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
    
  2. Mettre à jour les paramètres de délai d'attente: Pour modifier les paramètres clientTimeout et serverTimeout pour un IngressController spé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ée default à 905 secondes :

    oc patch ingresscontrollers default --patch '{"spec": {"tuningOptions":{"clientTimeout": "905s", "serverTimeout": "905s"}}}' --type=merge -n openshift-ingress-operator
    
  3. 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-default LoadBalancer à 910 secondes :

    oc annotate svc -n openshift-ingress service.kubernetes.io/ibm-load-balancer-cloud-provider-vpc-idle-connection-timeout="910" router-default