Chapitre 9. Configuration des itinéraires
9.1. Configuration de l’itinéraire Copier lienLien copié sur presse-papiers!
9.1.1. Création d’une route HTTP Copier lienLien copié sur presse-papiers!
Créez un itinéraire pour héberger votre application à une URL publique. L’itinéraire peut être sécurisé ou non sécurisé, en fonction de la configuration de sécurité réseau de votre application. La route HTTP est une route non sécurisée qui utilise le protocole de routage HTTP de base et expose un service sur un port d’application non sécurisé.
La procédure suivante décrit comment créer une route HTTP simple vers une application Web, en utilisant l’application hello-openshift comme exemple.
Conditions préalables
- Installation de l’OpenShift CLI (oc).
- En tant qu’administrateur, vous êtes connecté.
- Il existe une application web qui expose un port et un point de terminaison TCP à l’écoute du trafic sur le port.
Procédure
Créez un projet appelé hello-openshift en exécutant la commande suivante:
oc new-project hello-openshift
$ oc new-project hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un pod dans le projet en exécutant la commande suivante:
oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/hello-openshift/hello-pod.json
$ oc create -f https://raw.githubusercontent.com/openshift/origin/master/examples/hello-openshift/hello-pod.json
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un service appelé hello-openshift en exécutant la commande suivante:
oc expose pod/hello-openshift
$ oc expose pod/hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez une route non sécurisée vers l’application hello-openshift en exécutant la commande suivante:
oc expose svc hello-openshift
$ oc expose svc hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
La vérification
Afin de vérifier que la ressource d’itinéraire que vous avez créée exécute la commande suivante:
oc get routes -o yaml <name of resource>
$ oc get routes -o yaml <name of resource>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Dans cet exemple, l’itinéraire est nommé hello-openshift.
Exemple de définition YAML de l’itinéraire non sécurisé créé
- 1
- Le champ hôte est un enregistrement DNS alias qui pointe vers le service. Ce champ peut être n’importe quel nom DNS valide, tel que www.example.com. Le nom DNS doit suivre les conventions de sous-domaine DNS952. Lorsqu’il n’est pas spécifié, un nom d’itinéraire est automatiquement généré.
- 2
- Le champ TargetPort est le port cible sur les pods qui est sélectionné par le service auquel cette route pointe.Note
Afin d’afficher votre domaine d’entrée par défaut, exécutez la commande suivante:
oc get ingresses.config/cluster -o jsonpath={.spec.domain}
$ oc get ingresses.config/cluster -o jsonpath={.spec.domain}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.2. Configuration des délais d’itinéraire Copier lienLien copié sur presse-papiers!
Il est possible de configurer les délais par défaut pour un itinéraire existant lorsque vous avez des services qui ont besoin d’un délai d’attente réduit, ce qui est nécessaire aux fins de la disponibilité de niveau de service (SLA), ou d’un délai d’attente élevé, pour les cas où le retard est lent.
Conditions préalables
- Il vous faut un contrôleur Ingress déployé sur un cluster en cours d’exécution.
Procédure
En utilisant la commande oc annotate, ajoutez le timeout à l’itinéraire:
oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/timeout=<timeout><time_unit>
$ oc annotate route <route_name> \ --overwrite haproxy.router.openshift.io/timeout=<timeout><time_unit>
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Les unités de temps prises en charge sont les microsecondes (nous), les millisecondes (ms), les secondes (s), les minutes (m), les heures (h) ou les jours (d).
L’exemple suivant définit un délai de deux secondes sur un itinéraire nommé myroute:
oc annotate route myroute --overwrite haproxy.router.openshift.io/timeout=2s
$ oc annotate route myroute --overwrite haproxy.router.openshift.io/timeout=2s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.3. HTTP Strict Transport Security Copier lienLien copié sur presse-papiers!
La stratégie HTTP Strict Transport Security (HSTS) est une amélioration de la sécurité, qui signale au client du navigateur que seul le trafic HTTPS est autorisé sur l’hôte de route. HSTS optimise également le trafic Web en signalant le transport HTTPS, sans utiliser de redirections HTTP. HSTS est utile pour accélérer les interactions avec les sites Web.
Lorsque la politique HSTS est appliquée, HSTS ajoute un en-tête Strict Transport Security aux réponses HTTP et HTTPS du site. Il est possible d’utiliser la valeur insecureEdgeTerminationPolicy dans un itinéraire pour rediriger HTTP vers HTTPS. Lorsque HSTS est appliqué, le client modifie toutes les requêtes de l’URL HTTP en HTTPS avant l’envoi de la requête, éliminant ainsi la nécessité d’une redirection.
Les administrateurs de clusters peuvent configurer HSTS pour faire ce qui suit:
- Activer le HSTS par route
- Désactiver le HSTS par route
- Appliquer HSTS par domaine, pour un ensemble de domaines, ou utiliser des étiquettes d’espace de noms en combinaison avec des domaines
HSTS ne fonctionne qu’avec des routes sécurisées, soit terminales soit recryptées. La configuration est inefficace sur les routes HTTP ou passthrough.
9.1.3.1. Activer HTTP Strict Transport Security par route Copier lienLien copié sur presse-papiers!
HTTP strict de sécurité de transport (HSTS) est implémenté dans le modèle HAProxy et appliqué à bord et recrypter les routes qui ont l’annotation haproxy.router.openshift.io/hsts_header.
Conditions préalables
- Il est connecté au cluster avec un utilisateur avec des privilèges d’administrateur pour le projet.
- Installation de l’OpenShift CLI (oc).
Procédure
Afin d’activer HSTS sur une route, ajoutez la valeur haproxy.router.openshift.io/hsts_header à la route terminale ou recryptée. Il est possible d’utiliser l’outil oc annotate pour le faire en exécutant la commande suivante. Afin d’exécuter correctement la commande, assurez-vous que le point-virgule (;) dans l’annotation de route haproxy.router.openshift.io/hsts_header est également entouré de guillemets doubles ("").
Exemple de commande annotée qui fixe l’âge maximum à 31536000 ms (environ 8,5 heures)
oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header=max-age=31536000;\ includeSubDomains;preload"
$ oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header=max-age=31536000;\ includeSubDomains;preload"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple d’itinéraire configuré avec une annotation
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- C’est nécessaire. l’âge maximal mesure la durée, en secondes, que la politique sur le TVH est en vigueur. Lorsqu’il est défini à 0, il annule la politique.
- 2
- En option. Lorsqu’il est inclus, includeSubDomains indique au client que tous les sous-domaines de l’hôte doivent avoir la même politique HSTS que l’hôte.
- 3
- En option. Lorsque l’âge maximum est supérieur à 0, vous pouvez ajouter la précharge dans haproxy.router.openshift.io/hsts_header pour permettre aux services externes d’inclure ce site dans leurs listes de préchargement HSTS. À titre d’exemple, des sites tels que Google peuvent construire une liste de sites qui ont un préchargement défini. Les navigateurs peuvent ensuite utiliser ces listes pour déterminer les sites avec lesquels ils peuvent communiquer via HTTPS, avant même qu’ils n’aient interagi avec le site. En l’absence de préchargement, les navigateurs doivent avoir interagi avec le site via HTTPS, au moins une fois, pour obtenir l’en-tête.
9.1.3.2. Désactivation de HTTP Strict Transport Security par route Copier lienLien copié sur presse-papiers!
Afin de désactiver HTTP strict de sécurité de transport (HSTS) par route, vous pouvez définir la valeur d’âge maximum dans l’annotation de route à 0.
Conditions préalables
- Il est connecté au cluster avec un utilisateur avec des privilèges d’administrateur pour le projet.
- Installation de l’OpenShift CLI (oc).
Procédure
Afin de désactiver le HSTS, définissez la valeur d’âge max dans l’annotation de route à 0, en entrant la commande suivante:
oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
$ oc annotate route <route_name> -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceAlternativement, vous pouvez appliquer le YAML suivant pour créer la carte de configuration:
Exemple de désactivation du TVH par route
metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=0
metadata: annotations: haproxy.router.openshift.io/hsts_header: max-age=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Afin de désactiver les HSTS pour chaque route dans un espace de noms, entrez la commande suivante:
oc annotate route --all -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
$ oc annotate route --all -n <namespace> --overwrite=true "haproxy.router.openshift.io/hsts_header"="max-age=0"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
La vérification
Afin d’interroger l’annotation pour tous les itinéraires, entrez la commande suivante:
oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'
$ oc get route --all-namespaces -o go-template='{{range .items}}{{if .metadata.annotations}}{{$a := index .metadata.annotations "haproxy.router.openshift.io/hsts_header"}}{{$n := .metadata.name}}{{with $a}}Name: {{$n}} HSTS: {{$a}}{{"\n"}}{{else}}{{""}}{{end}}{{end}}{{end}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Name: routename HSTS: max-age=0
Name: routename HSTS: max-age=0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.4. En utilisant des cookies pour garder l’état de route Copier lienLien copié sur presse-papiers!
Le service OpenShift Red Hat sur AWS fournit des sessions collantes, ce qui permet un trafic d’application étatique en s’assurant que tous les trafics atteignent le même point de terminaison. Cependant, si le point d’extrémité se termine, que ce soit par redémarrage, mise à l’échelle, ou un changement de configuration, cet état d’état peut disparaître.
Le service OpenShift de Red Hat sur AWS peut utiliser des cookies pour configurer la persistance des sessions. Le contrôleur d’entrée sélectionne un point de terminaison pour traiter les demandes de l’utilisateur et crée un cookie pour la session. Le cookie est réintégré dans la réponse à la demande et l’utilisateur renvoie le cookie avec la demande suivante dans la session. Le cookie indique au contrôleur d’entrée quel point de terminaison traite la session, s’assurant que les demandes du client utilisent le cookie afin qu’ils soient acheminés vers le même pod.
Les cookies ne peuvent pas être définis sur les routes de passage, car le trafic HTTP ne peut pas être vu. Au lieu de cela, un nombre est calculé en fonction de l’adresse IP source, qui détermine le backend.
En cas de changement de backend, le trafic peut être dirigé vers le mauvais serveur, ce qui le rend moins collant. Lorsque vous utilisez un balanceur de charge, qui cache l’IP source, le même nombre est défini pour toutes les connexions et le trafic est envoyé au même pod.
9.1.4.1. Annotation d’un itinéraire avec un cookie Copier lienLien copié sur presse-papiers!
Il est possible de définir un nom de cookie pour écraser le nom par défaut, généré automatiquement pour l’itinéraire. Cela permet à l’application recevant du trafic d’itinéraire de connaître le nom du cookie. La suppression du cookie peut forcer la prochaine demande à re-choisir un point de terminaison. Le résultat est que si un serveur est surchargé, ce serveur essaie de supprimer les requêtes du client et de les redistribuer.
Procédure
Annoter l’itinéraire avec le nom de cookie spécifié:
oc annotate route <route_name> router.openshift.io/cookie_name="<cookie_name>"
$ oc annotate route <route_name> router.openshift.io/cookie_name="<cookie_name>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow là où:
<route_nom>
- Indique le nom de l’itinéraire.
<cookie_name>
- Indique le nom du cookie.
A titre d’exemple, annoter l’itinéraire my_route avec le nom de cookie my_cookie:
oc annotate route my_route router.openshift.io/cookie_name="my_cookie"
$ oc annotate route my_route router.openshift.io/cookie_name="my_cookie"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Capturez le nom d’hôte de l’itinéraire dans une variable:
ROUTE_NAME=$(oc get route <route_name> -o jsonpath='{.spec.host}')
$ ROUTE_NAME=$(oc get route <route_name> -o jsonpath='{.spec.host}')
Copy to Clipboard Copied! Toggle word wrap Toggle overflow là où:
<route_nom>
- Indique le nom de l’itinéraire.
Enregistrez le cookie, puis accédez à l’itinéraire:
curl $ROUTE_NAME -k -c /tmp/cookie_jar
$ curl $ROUTE_NAME -k -c /tmp/cookie_jar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque vous vous connectez à l’itinéraire, utilisez le cookie enregistré par la commande précédente:
curl $ROUTE_NAME -k -b /tmp/cookie_jar
$ curl $ROUTE_NAME -k -b /tmp/cookie_jar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.5. Itinéraires basés sur le chemin Copier lienLien copié sur presse-papiers!
Les routes basées sur le chemin spécifient un composant de chemin qui peut être comparé à une URL, ce qui nécessite que le trafic pour l’itinéraire soit basé sur HTTP. Ainsi, plusieurs itinéraires peuvent être desservis en utilisant le même nom d’hôte, chacun avec un chemin différent. Les routeurs doivent correspondre à des itinéraires basés sur le chemin le plus spécifique au moins.
Le tableau suivant présente des exemples d’itinéraires et leur accessibilité:
Itinéraire | Lorsque comparé à | Accessible |
---|---|---|
www.example.com/test | www.example.com/test | ♪ oui ♪ |
www.example.com | C) Non | |
www.example.com/test et www.example.com | www.example.com/test | ♪ oui ♪ |
www.example.com | ♪ oui ♪ | |
www.example.com | www.example.com/text | (Matched par l’hôte, pas l’itinéraire) |
www.example.com | ♪ oui ♪ |
Itinéraire non sécurisé avec un chemin
- 1
- Le chemin est le seul attribut ajouté pour une route basée sur le chemin.
Le routage basé sur le chemin n’est pas disponible lors de l’utilisation de TLS passthrough, car le routeur ne met pas fin à TLS dans ce cas et ne peut pas lire le contenu de la demande.
9.1.6. Configuration d’en-tête HTTP Copier lienLien copié sur presse-papiers!
Le service OpenShift Red Hat sur AWS fournit différentes méthodes pour travailler avec les en-têtes HTTP. Lorsque vous configurez ou supprimez des en-têtes, vous pouvez utiliser des champs spécifiques dans le contrôleur d’Ingress ou un itinéraire individuel pour modifier les en-têtes de requête et de réponse. Il est également possible de définir certains en-têtes en utilisant des annotations d’itinéraire. Les différentes façons de configurer les en-têtes peuvent présenter des défis lorsque vous travaillez ensemble.
Il est possible de définir ou de supprimer uniquement des en-têtes au sein d’un IngressController ou Route CR, vous ne pouvez pas les ajouter. Lorsqu’un en-tête HTTP est défini avec une valeur, cette valeur doit être complète et ne pas nécessiter d’ajouter à l’avenir. Dans les situations où il est logique d’ajouter un en-tête, comme l’en-tête X-Forwarded-Forwarded, utilisez le champ spec.httpHeaders.forwardedHeaderPolicy, au lieu de spec.httpHeaders.actions.
9.1.6.1. Ordre de préséance Copier lienLien copié sur presse-papiers!
Lorsque le même en-tête HTTP est modifié à la fois dans le contrôleur Ingress et dans un itinéraire, HAProxy priorise les actions de certaines manières selon qu’il s’agit d’une requête ou d’un en-tête de réponse.
- Dans le cas des en-têtes de réponse HTTP, les actions spécifiées dans le contrôleur Ingress sont exécutées après les actions spécifiées dans un itinéraire. Cela signifie que les actions spécifiées dans le Contrôleur Ingress ont préséance.
- Dans le cas des en-têtes de requête HTTP, les actions spécifiées dans une route sont exécutées après les actions spécifiées dans le contrôleur Ingress. Cela signifie que les actions spécifiées dans l’itinéraire ont préséance.
À titre d’exemple, un administrateur de cluster définit l’en-tête de réponse X-Frame-Options avec la valeur DENY dans le contrôleur Ingress en utilisant la configuration suivante:
Exemple IngressController spec
Le propriétaire de route définit le même en-tête de réponse que l’administrateur du cluster défini dans le contrôleur Ingress, mais avec la valeur SAMEORIGIN en utilisant la configuration suivante:
Exemple de route Spécification
Lorsque les spécifications IngressController et Route configurent l’en-tête de réponse X-Frame-Options, alors la valeur définie pour cet en-tête au niveau global dans le contrôleur Ingress a préséance, même si un itinéraire spécifique permet des cadres. Dans le cas d’un en-tête de requête, la valeur spec de Route remplace la valeur spec d’IngressController.
Cette priorisation se produit parce que le fichier haproxy.config utilise la logique suivante, où le contrôleur Ingress est considéré comme l’extrémité avant et les itinéraires individuels sont considérés comme l’arrière-plan. La valeur d’en-tête DENY appliquée aux configurations d’extrémité avant remplace le même en-tête avec la valeur SAMEORIGIN définie dans l’arrière:
En outre, toutes les actions définies dans le contrôleur d’Ingress ou dans une route remplacent les valeurs définies à l’aide d’annotations d’itinéraire.
9.1.6.2. En-têtes de cas spéciaux Copier lienLien copié sur presse-papiers!
Les en-têtes suivants sont soit empêchés entièrement d’être réglés ou supprimés, soit autorisés dans des circonstances spécifiques:
Le nom de l’en-tête | Configurable en utilisant IngressController spec | Configurable à l’aide de Route spec | La raison de l’exclusion | Configurable en utilisant une autre méthode |
---|---|---|---|---|
| C) Non | C) Non | L’en-tête de requête HTTP proxy peut être utilisé pour exploiter les applications CGI vulnérables en injectant la valeur d’en-tête dans la variable d’environnement HTTP_PROXY. L’en-tête de requête HTTP proxy est également non standard et sujet à une erreur lors de la configuration. | C) Non |
| C) Non | ♪ oui ♪ | Lorsque l’en-tête de requête HTTP hôte est défini à l’aide de l’IngressController CR, HAProxy peut échouer lors de la recherche de la bonne route. | C) Non |
| C) Non | C) Non | L’en-tête de réponse HTTP strict-transport-sécurité est déjà géré à l’aide d’annotations de route et n’a pas besoin d’une implémentation séparée. | L’annotation de route haproxy.router.openshift.io/hsts_header |
cookie et set-cookie | C) Non | C) Non | Les cookies que HAProxy définit sont utilisés pour le suivi de session pour cartographier les connexions client à des serveurs back-end particuliers. La mise en place de ces en-têtes pourrait interférer avec l’affinité de la session de HAProxy et restreindre la propriété d’un cookie par HAProxy. | C’est oui:
|
9.1.7. Définir ou supprimer les en-têtes de requête et de réponse HTTP dans un itinéraire Copier lienLien copié sur presse-papiers!
Il est possible de définir ou de supprimer certains en-têtes de requête et de réponse HTTP à des fins de conformité ou pour d’autres raisons. Ces en-têtes peuvent être définis ou supprimés soit pour tous les itinéraires desservis par un contrôleur d’Ingress, soit pour des itinéraires spécifiques.
À titre d’exemple, vous voudrez peut-être activer une application Web à servir du contenu dans d’autres endroits pour des itinéraires spécifiques si ce contenu est écrit en plusieurs langues, même s’il existe un emplacement global par défaut spécifié par le contrôleur Ingress desservant les routes.
La procédure suivante crée un itinéraire qui définit l’en-tête de requête HTTP Content-Location de sorte que l’URL associée à l’application, https://app.example.com, dirige vers l’emplacement https://app.example.com/lang/en-us. Diriger le trafic d’application vers cet emplacement signifie que toute personne utilisant cette route spécifique accède au contenu Web écrit en anglais américain.
Conditions préalables
- L’OpenShift CLI (oc) a été installé.
- En tant qu’administrateur de projet, vous êtes connecté à un service Red Hat OpenShift sur AWS cluster.
- Il existe une application Web qui expose un port et un point de terminaison HTTP ou TLS à l’écoute du trafic sur le port.
Procédure
Créez une définition d’itinéraire et enregistrez-la dans un fichier appelé app-example-route.yaml:
Définition YAML de l’itinéraire créé avec les directives d’en-tête HTTP
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- La liste des actions que vous souhaitez effectuer sur les en-têtes HTTP.
- 2
- Le type d’en-tête que vous voulez changer. Dans ce cas, un en-tête de réponse.
- 3
- Le nom de l’en-tête que vous voulez changer. Dans le cas d’une liste d’en-têtes disponibles que vous pouvez définir ou supprimer, voir la configuration d’en-tête HTTP.
- 4
- Le type d’action en cours sur l’en-tête. Ce champ peut avoir la valeur Set ou Supprimer.
- 5
- Lorsque vous définissez des en-têtes HTTP, vous devez fournir une valeur. La valeur peut être une chaîne à partir d’une liste de directives disponibles pour cet en-tête, par exemple DENY, ou il peut s’agir d’une valeur dynamique qui sera interprétée à l’aide de la syntaxe de valeur dynamique de HAProxy. Dans ce cas, la valeur est définie à l’emplacement relatif du contenu.
Créez un itinéraire vers votre application Web existante en utilisant la définition de route nouvellement créée:
oc -n app-example create -f app-example-route.yaml
$ oc -n app-example create -f app-example-route.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Dans le cas des en-têtes de requête HTTP, les actions spécifiées dans les définitions de route sont exécutées après toutes les actions effectuées sur les en-têtes de requête HTTP dans le contrôleur Ingress. Cela signifie que toutes les valeurs définies pour ces en-têtes de requête dans un itinéraire auront préséance sur celles définies dans le contrôleur Ingress. Consultez la configuration de l’en-tête HTTP pour plus d’informations sur l’ordre de traitement des en-têtes HTTP.
9.1.8. Annotations spécifiques à la route Copier lienLien copié sur presse-papiers!
Le contrôleur Ingress peut définir les options par défaut pour tous les itinéraires qu’il expose. L’itinéraire individuel peut remplacer certaines de ces valeurs par défaut en fournissant des configurations spécifiques dans ses annotations. Le Red Hat ne prend pas en charge l’ajout d’une annotation d’itinéraire à une route gérée par l’opérateur.
Afin de créer une liste d’autorisation avec plusieurs sources IP ou sous-réseaux, utilisez une liste délimitée dans l’espace. Dans tout autre type de délimiteur, la liste est ignorée sans message d’avertissement ou d’erreur.
La variable | Description | La variable d’environnement utilisée par défaut |
---|---|---|
| Définit l’algorithme d’équilibrage de charge. Les options disponibles sont aléatoires, source, rondrobine et leastconn. La valeur par défaut est source pour les routes de passage TLS. Dans tous les autres itinéraires, la valeur par défaut est aléatoire. | Le ROUTER_TCP_BALANCE_SCHEME pour les routes de passage. Dans le cas contraire, utilisez ROUTER_LOAD_BALANCE_ALGORITHM. |
| Désactive l’utilisation de cookies pour suivre les connexions connexes. Lorsqu’il est défini sur 'vrai' ou 'TRUE', l’algorithme d’équilibre est utilisé pour choisir quel back-end sert les connexions pour chaque requête HTTP entrante. | |
| Indique un cookie optionnel à utiliser pour cet itinéraire. Le nom doit être composé de toute combinaison de lettres majuscules et minuscules, chiffres, "_" et "-". La valeur par défaut est le nom de clé interne haché pour l’itinéraire. | |
|
Définit le nombre maximum de connexions autorisées à une gousse de support à partir d’un routeur. | |
|
La définition de 'vrai' ou 'TRUE' permet de limiter le taux de fonctionnalité qui est implémentée par le biais de stick-tables sur le backend spécifique par route. | |
|
Limite le nombre de connexions TCP simultanées effectuées via la même adresse IP source. Il accepte une valeur numérique. | |
|
Limite le taux auquel un client avec la même adresse IP source peut faire des requêtes HTTP. Il accepte une valeur numérique. | |
|
Limite le taux auquel un client avec la même adresse IP source peut effectuer des connexions TCP. Il accepte une valeur numérique. | |
| Définit un temps d’attente côté serveur pour l’itinéraire. (Unités temporelles) |
|
| Ce délai s’applique à une connexion tunnel, par exemple, WebSocket sur des routes de texte clair, bord, recryptage ou passthrough. Avec le texte clair, le bord ou le recryptage des types d’itinéraires, cette annotation est appliquée en tant que tunnel d’expiration avec la valeur de timeout existante. Dans le cas des types d’itinéraires de passage, l’annotation prime sur toute valeur de temps d’attente existante. |
|
| Il est possible de définir soit un IngressController, soit la configuration d’entrée. Cette annotation redéploie le routeur et configure le proxy HA pour émettre l’option haproxy hard-stop-après global, qui définit le temps maximum autorisé pour effectuer un arrêt souple propre. |
|
| Définit l’intervalle pour les contrôles de santé back-end. (Unités temporelles) |
|
| Définit une liste d’autorisations pour l’itinéraire. La liste d’autorisation est une liste séparée d’adresses IP et de gammes CIDR pour les adresses source approuvées. Les demandes d’adresses IP qui ne figurent pas dans la liste d’autorisation sont supprimées. Le nombre maximum d’adresses IP et de plages CIDR directement visibles dans le fichier haproxy.config est de 61. [1] | |
| Définit un en-tête Strict-Transport-Security pour la route terminée ou recryptée. | |
| Définit le chemin de réécriture de la requête sur le backend. | |
| Définit une valeur pour restreindre les cookies. Les valeurs sont: Lax: le navigateur n’envoie pas de cookies sur les requêtes croisées, mais envoie des cookies lorsque les utilisateurs naviguent sur le site d’origine à partir d’un site externe. Il s’agit du comportement du navigateur par défaut lorsque la valeur SameSite n’est pas spécifiée. Strict : le navigateur n’envoie des cookies que pour les demandes du même site. Aucun : le navigateur envoie des cookies à la fois pour les demandes intersites et les demandes de même site. Cette valeur s’applique uniquement aux itinéraires recryptés et bordés. Consultez la documentation sur les cookies SameSite pour plus d’informations. | |
| Définit la politique de gestion des en-têtes Forwarded et X-Forwarded-Forwarded par route. Les valeurs sont: ajouter: ajoute l’en-tête, en préservant tout en-tête existant. C’est la valeur par défaut. le remplacement : définit l’en-tête, en supprimant tout en en-tête existant. jamais : ne règlez jamais l’en-tête, mais préservent les en-têtes existants. if-none: définit l’en-tête s’il n’est pas déjà réglé. |
|
Lorsque le nombre d’adresses IP et de gammes CIDR dans une liste d’autorisation dépasse 61, ils sont écrits dans un fichier séparé qui est ensuite référencé à partir de haproxy.config. Ce fichier est stocké dans le dossier var/lib/haproxy/router/allowlists.
NoteAfin de s’assurer que les adresses sont écrites à la liste d’autorisation, vérifiez que la liste complète des plages CIDR est répertoriée dans le fichier de configuration Ingress Controller. La limite de taille de l’objet etcd limite la taille d’une annotation d’itinéraire. De ce fait, il crée un seuil pour le nombre maximum d’adresses IP et de plages CIDR que vous pouvez inclure dans une liste d’autorisations.
Les variables d’environnement ne peuvent pas être modifiées.
Les variables de timeout du routeur
Les unités de temps sont représentées par un nombre suivi par l’unité: nous *(microsecondes), ms (millisecondes, par défaut), s (secondes), m (minutes), h *(heures), d (jours).
L’expression régulière est: [1-9][0-9]*(us\|ms\|s\|h\|d).
La variable | Défaut par défaut | Description |
---|---|---|
|
| Durée entre les contrôles de vivacité ultérieurs sur les extrémités arrière. |
|
| Contrôle la période d’attente TCP FIN pour le client qui se connecte à l’itinéraire. Lorsque le FIN envoyé pour fermer la connexion ne répond pas dans le délai imparti, HAProxy ferme la connexion. Ceci est inoffensif s’il est défini à une valeur faible et utilise moins de ressources sur le routeur. |
|
| Durée du temps qu’un client doit reconnaître ou envoyer des données. |
|
| Le temps de connexion maximum. |
|
| Contrôle le temps d’attente TCP FIN du routeur jusqu’au pod qui soutient l’itinéraire. |
|
| Durée du temps qu’un serveur doit reconnaître ou envoyer des données. |
|
| Durée pour que les connexions TCP ou WebSocket restent ouvertes. Cette période d’expiration se réinitialise chaque fois que HAProxy se recharge. |
|
| Définissez le temps maximum pour attendre l’apparition d’une nouvelle requête HTTP. Lorsque cela est défini trop bas, il peut causer des problèmes avec les navigateurs et les applications ne s’attendant pas à une petite valeur de conservation. Certaines valeurs de timeout efficaces peuvent être la somme de certaines variables, plutôt que le délai d’attente prévu spécifique. À titre d’exemple, ROUTER_SLOWLORIS_HTTP_KEEPALIVE ajuste le délai d’attente http-mainep-alive. Il est réglé sur 300s par défaut, mais HAProxy attend également sur tcp-request inspect-delay, qui est réglé sur 5s. Dans ce cas, le délai d’attente global serait de 300s plus 5s. |
|
| Durée de la transmission d’une requête HTTP. |
|
| Autorise la fréquence minimale pour le routeur à recharger et accepter de nouveaux changements. |
|
| Délai de collecte des métriques HAProxy. |
La configuration d’un itinéraire chronométrage personnalisé
- 1
- Indique le nouveau délai d’attente avec les unités prises en charge par HAProxy (nous, ms, s, m, h, d). Dans le cas où l’unité n’est pas fournie, ms est la valeur par défaut.
La définition d’une valeur de temps d’attente côté serveur pour les itinéraires de passage trop bas peut causer des connexions WebSocket fréquemment sur cette route.
Itinéraire qui n’autorise qu’une seule adresse IP spécifique
metadata: annotations: haproxy.router.openshift.io/ip_allowlist: 192.168.1.10
metadata:
annotations:
haproxy.router.openshift.io/ip_allowlist: 192.168.1.10
Itinéraire qui permet plusieurs adresses IP
metadata: annotations: haproxy.router.openshift.io/ip_allowlist: 192.168.1.10 192.168.1.11 192.168.1.12
metadata:
annotations:
haproxy.router.openshift.io/ip_allowlist: 192.168.1.10 192.168.1.11 192.168.1.12
Itinéraire permettant un réseau d’adresse IP CIDR
metadata: annotations: haproxy.router.openshift.io/ip_allowlist: 192.168.1.0/24
metadata:
annotations:
haproxy.router.openshift.io/ip_allowlist: 192.168.1.0/24
Itinéraire permettant à la fois une adresse IP et des réseaux CIDR d’adresse IP
metadata: annotations: haproxy.router.openshift.io/ip_allowlist: 180.5.61.153 192.168.1.0/24 10.0.0.0/8
metadata:
annotations:
haproxy.router.openshift.io/ip_allowlist: 180.5.61.153 192.168.1.0/24 10.0.0.0/8
Itinéraire spécifiant une cible de réécriture
- 1
- Définit / comme chemin de réécriture de la requête sur le backend.
La définition de l’annotation de cible haproxy.router.openshift.io/rewrite-target sur une route spécifie que le contrôleur Ingress devrait réécrire les chemins dans les requêtes HTTP en utilisant cette route avant de transmettre les requêtes à l’application backend. La partie du chemin de requête qui correspond au chemin spécifié dans spec.path est remplacée par la cible de réécriture spécifiée dans l’annotation.
Le tableau suivant fournit des exemples du comportement de réécriture de chemin pour diverses combinaisons de spec.path, de chemin de requête et de réécriture de cible.
Itinéraire.spec.path | Demander le chemin | La réécriture de la cible | Chemin de demande transmis |
---|---|---|---|
/foo | /foo | / | / |
/foo | /foo/ | / | / |
/foo | /foo/bar | / | /bar |
/foo | /foo/bar/ | / | /bar/ |
/foo | /foo | /bar | /bar |
/foo | /foo/ | /bar | /bar/ |
/foo | /foo/bar | /Baz | /Baz/bar |
/foo | /foo/bar/ | /Baz | /Baz/bar/ |
/foo/ | /foo | / | Le chemin n/a (request path ne correspond pas au chemin d’itinéraire) |
/foo/ | /foo/ | / | / |
/foo/ | /foo/bar | / | /bar |
Certains caractères spéciaux de haproxy.router.openshift.io/rewrite-target nécessitent une manipulation spéciale car ils doivent être échappés correctement. Consultez le tableau suivant pour comprendre comment ces caractères sont traités.
Caractère | À utiliser des caractères | Les notes |
---|---|---|
♪ | \# | Evitez # parce qu’il met fin à l’expression de réécriture |
% | % ou %% | Évitez les séquences étranges telles que %%% |
'' | ♪ | Éviter ' parce qu’il est ignoré |
Les autres caractères URL valides peuvent être utilisés sans s’échapper.
9.1.9. Création d’un itinéraire à l’aide du certificat par défaut via un objet Ingress Copier lienLien copié sur presse-papiers!
Lorsque vous créez un objet Ingress sans spécifier une configuration TLS, Red Hat OpenShift Service sur AWS génère un itinéraire non sécurisé. Afin de créer un objet Ingress qui génère une route sécurisée et terminée par bord à l’aide du certificat d’entrée par défaut, vous pouvez spécifier une configuration TLS vide comme suit.
Conditions préalables
- Il y a un service que vous voulez exposer.
- Accès à l’OpenShift CLI (oc).
Procédure
Créez un fichier YAML pour l’objet Ingress. Dans cet exemple, le fichier est appelé example-ingress.yaml:
Définition YAML d’un objet Ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Employez cette syntaxe exacte pour spécifier TLS sans spécifier un certificat personnalisé.
Créez l’objet Ingress en exécutant la commande suivante:
oc create -f example-ingress.yaml
$ oc create -f example-ingress.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
La vérification
Assurez-vous que Red Hat OpenShift Service sur AWS a créé la route attendue pour l’objet Ingress en exécutant la commande suivante:
oc get routes -o yaml
$ oc get routes -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.1.10. Création d’un itinéraire à l’aide du certificat CA de destination dans l’annotation Ingress Copier lienLien copié sur presse-papiers!
L’annotation route.openshift.io/destination-ca-certificate-secret peut être utilisée sur un objet Ingress pour définir un itinéraire avec un certificat CA de destination personnalisé.
Conditions préalables
- Il se peut que vous ayez une paire de certificats / clé dans les fichiers encodés PEM, où le certificat est valide pour l’hôte de route.
- Il se peut que vous ayez un certificat CA distinct dans un fichier codé PEM qui complète la chaîne de certificats.
- Il faut avoir un certificat CA de destination distinct dans un fichier encodé PEM.
- Il faut avoir un service que vous voulez exposer.
Procédure
Créez un secret pour le certificat CA de destination en entrant la commande suivante:
oc create secret generic dest-ca-cert --from-file=tls.crt=<file_path>
$ oc create secret generic dest-ca-cert --from-file=tls.crt=<file_path>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple:
oc -n test-ns create secret generic dest-ca-cert --from-file=tls.crt=tls.crt
$ oc -n test-ns create secret generic dest-ca-cert --from-file=tls.crt=tls.crt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
secret/dest-ca-cert created
secret/dest-ca-cert created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajouter la route.openshift.io/destination-ca-certificate-secret aux annotations d’Ingress:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- L’annotation fait référence à un secret de kubernetes.
Le secret référencé dans cette annotation sera inséré dans la route générée.
Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow