2.3. L’opérateur d’entrée dans Red Hat OpenShift Service sur AWS
L’opérateur Ingress implémente l’API IngressController et est le composant responsable de l’accès externe à Red Hat OpenShift Service sur les services de cluster AWS.
2.3.1. Le service OpenShift de Red Hat sur AWS Ingress Operator Copier lienLien copié sur presse-papiers!
Lorsque vous créez votre service Red Hat OpenShift sur le cluster AWS, les pods et les services exécutés sur le cluster reçoivent chacun leurs propres adresses IP. Les adresses IP sont accessibles à d’autres pods et services en cours d’exécution à proximité, mais ne sont pas accessibles aux clients externes.
L’opérateur Ingress permet aux clients externes d’accéder à votre service en déployant et en gérant un ou plusieurs contrôleurs Ingress basés sur HAProxy pour gérer le routage. Les ingénieurs de fiabilité du site Red Hat (SRE) gèrent l’opérateur Ingress pour Red Hat OpenShift Service sur les clusters AWS. Bien que vous ne puissiez pas modifier les paramètres de l’opérateur Ingress, vous pouvez afficher les configurations, l’état et les journaux par défaut du contrôleur Ingress, ainsi que l’état de l’opérateur Ingress.
2.3.2. L’actif de configuration Ingress Copier lienLien copié sur presse-papiers!
Le programme d’installation génère une ressource Ingress dans le groupe API config.openshift.io, cluster-ingress-02-config.yml.
Définition YAML de la ressource Ingress
Le programme d’installation stocke cette ressource dans le fichier cluster-ingress-02-config.yml dans le répertoire manifestes. Cette ressource Ingress définit la configuration à l’échelle du cluster pour Ingress. Cette configuration Ingress est utilisée comme suit:
- L’opérateur Ingress utilise le domaine à partir de la configuration du cluster Ingress comme domaine pour le contrôleur Ingress par défaut.
- L’opérateur de serveur d’API OpenShift utilise le domaine à partir de la configuration du cluster Ingress. Ce domaine est également utilisé lors de la génération d’un hôte par défaut pour une ressource Route qui ne spécifie pas un hôte explicite.
2.3.3. Ingress Paramètres de configuration du contrôleur Copier lienLien copié sur presse-papiers!
La ressource personnalisée IngressController (CR) inclut des paramètres de configuration optionnels que vous pouvez configurer pour répondre aux besoins spécifiques de votre organisation.
Le paramètre | Description |
---|---|
| domaine est un nom DNS desservi par le contrôleur Ingress et est utilisé pour configurer plusieurs fonctionnalités:
La valeur de domaine doit être unique parmi tous les contrôleurs Ingress et ne peut pas être mise à jour. En cas de vide, la valeur par défaut est ingress.config.openshift.io/cluster .spec.domain. |
| les répliques sont le nombre de répliques du contrôleur Ingress. Dans le cas contraire, la valeur par défaut est 2. |
| endpointPublishingStrategy est utilisé pour publier les points de terminaison Ingress Controller sur d’autres réseaux, activer l’intégration de l’équilibreur de charge et fournir l’accès à d’autres systèmes. Dans les environnements cloud, utilisez le champ loadBalancer pour configurer la stratégie de publication des points de terminaison pour votre contrôleur Ingress. Les champs endpointPublishingStrategy suivants peuvent être configurés:
Dans le cas contraire, la valeur par défaut est basée sur infrastructure.config.openshift.io/cluster .status.platform:
|
| La valeur defaultCertificate est une référence à un secret qui contient le certificat par défaut qui est servi par le contrôleur Ingress. Lorsque les Routes ne spécifient pas leur propre certificat, le certificat par défaut est utilisé. Le secret doit contenir les clés et données suivantes: * tls.crt: contenu du fichier de certificat * tls.key: contenu du fichier clé Dans le cas contraire, un certificat wildcard est automatiquement généré et utilisé. Le certificat est valable pour le domaine et les sous-domaines Ingress Controller, et l’AC du certificat généré est automatiquement intégrée au magasin de confiance du cluster. Le certificat en service, qu’il soit généré ou spécifié par l’utilisateur, est automatiquement intégré au service Red Hat OpenShift sur le serveur OAuth intégré à AWS. |
| le namespaceSelector est utilisé pour filtrer l’ensemble d’espaces de noms desservis par le contrôleur Ingress. Ceci est utile pour la mise en œuvre de fragments. |
| RouteSelector est utilisé pour filtrer l’ensemble de Routes desservies par le contrôleur Ingress. Ceci est utile pour la mise en œuvre de fragments. |
| le nodePlacement permet un contrôle explicite sur la planification du contrôleur d’Ingress. Dans le cas contraire, les valeurs par défaut sont utilisées. Note Le paramètre nodePlacement comprend deux parties, nodeSelector et tolérances. À titre d’exemple: |
| le fichier tlsSecurityProfile spécifie les paramètres des connexions TLS pour les contrôleurs Ingress. Dans le cas contraire, la valeur par défaut est basée sur la ressource apiservers.config.openshift.io/cluster. Lors de l’utilisation des types de profils anciens, intermédiaires et modernes, la configuration efficace du profil est sujette à changement entre les versions. À titre d’exemple, compte tenu d’une spécification pour utiliser le profil intermédiaire déployé sur la version X.Y.Z.Z, une mise à niveau pour libérer X.Y.Z+1 peut entraîner l’application d’une nouvelle configuration de profil sur le contrôleur Ingress, ce qui entraîne un déploiement. La version TLS minimale pour les contrôleurs Ingress est 1.1, et la version TLS maximum est 1.3. Note Les chiffrements et la version TLS minimale du profil de sécurité configuré sont reflétés dans le statut TLSProfile. Important L’opérateur Ingress convertit le TLS 1.0 d’un profil Old ou Custom en 1.1. |
| clientTLS authentifie l’accès du client au cluster et aux services; par conséquent, l’authentification TLS mutuelle est activée. Dans le cas contraire, le client TLS n’est pas activé. clientTLS a les sous-champs requis, spec.clientTLS.clientCertificatePolicy et spec.clientTLS.ClientCA. Le sous-champ ClientCertificatePolicy accepte l’une des deux valeurs requises ou facultatives. Le sous-champ ClientCA spécifie une carte de configuration qui se trouve dans l’espace de noms openshift-config. La carte de configuration doit contenir un paquet de certificats CA. AllowedSubjectPatterns est une valeur optionnelle qui spécifie une liste d’expressions régulières, qui sont appariées avec le nom distingué sur un certificat client valide pour filtrer les requêtes. Les expressions régulières doivent utiliser la syntaxe PCRE. Au moins un modèle doit correspondre au nom distingué d’un certificat client; sinon, le contrôleur Ingress rejette le certificat et nie la connexion. Dans le cas contraire, le Contrôleur Ingress ne rejette pas les certificats basés sur le nom distingué. |
| RouteAdmission définit une politique pour traiter de nouvelles revendications d’itinéraire, telles que l’autorisation ou le refus de revendications dans les espaces de noms. le nom de namespaceOwnership décrit comment les revendications des noms d’hôte doivent être traitées dans les espaces de noms. La valeur par défaut est Strict.
WildcardPolicy décrit comment les routes avec les stratégies de wildcard sont gérées par le contrôleur d’Ingress.
|
| la journalisation définit les paramètres de ce qui est enregistré où. Lorsque ce champ est vide, les journaux opérationnels sont activés mais les journaux d’accès sont désactivés.
|
| httpHeaders définit la stratégie pour les en-têtes HTTP. En définissant l’en-tête HTTP d’IngressControllerHTTPHeaders, vous spécifiez quand et comment le contrôleur d’ingénierie définit les en-têtes HTTP Forwarded, X-Forwarded-Forwarded-Host, X-Forwarded-Port, X-Forwarded-Proto et X-Forwarded-Proto-Version. La stratégie par défaut est définie à l’annexe.
En définissant l’en-têteNameCaseAdjustments, vous pouvez spécifier les ajustements de cas qui peuvent être appliqués aux noms d’en-tête HTTP. Chaque ajustement est spécifié comme un nom d’en-tête HTTP avec la capitalisation souhaitée. Ainsi, spécifier X-Forwarded-For indique que l’en-tête x-forwarded-for HTTP doit être ajusté pour avoir la capitalisation spécifiée. Ces ajustements ne sont appliqués qu’aux routes de texte clair, terminées par bord et recryptées, et uniquement lorsque vous utilisez HTTP/1. En ce qui concerne les en-têtes de requête, ces ajustements sont appliqués uniquement pour les itinéraires qui ont l’annotation réelle haproxy.router.openshift.io/h1-adjust-case=true. Dans le cas des en-têtes de réponse, ces ajustements sont appliqués à toutes les réponses HTTP. Dans le cas où ce champ est vide, aucun en-tête de requête n’est ajusté. actions spécifie les options pour effectuer certaines actions sur les en-têtes. Les en-têtes ne peuvent pas être réglés ou supprimés pour les connexions de passage TLS. Le champ actions a des sous-champs supplémentaires spec.httpHeader.actions.response et spec.httpHeader.actions.request:
|
| httpCompression définit la stratégie de compression du trafic HTTP.
|
| httpErrorCodePages spécifie les pages personnalisées de réponse au code d’erreur HTTP. IngressController utilise par défaut des pages d’erreur intégrées dans l’image IngressController. |
| httpCaptureCookies spécifie les cookies HTTP que vous souhaitez capturer dans les journaux d’accès. Lorsque le champ httpCaptureCookies est vide, les journaux d’accès ne capturent pas les cookies. Dans tout cookie que vous souhaitez capturer, les paramètres suivants doivent être dans votre configuration IngressController:
À titre d’exemple: httpCaptureCookies: - matchType: Exact maxLength: 128 name: MYCOOKIE
|
| httpCaptureHeaders spécifie les en-têtes HTTP que vous souhaitez capturer dans les journaux d’accès. Lorsque le champ httpCaptureHeaders est vide, les journaux d’accès ne capturent pas les en-têtes. httpCaptureHeaders contient deux listes d’en-têtes à capturer dans les journaux d’accès. Les deux listes de champs d’en-tête sont requête et réponse. Dans les deux listes, le champ nom doit spécifier le nom de l’en-tête et le champ de longueur max doit spécifier la longueur maximale de l’en-tête. À titre d’exemple: |
| LogningOptions spécifie les options pour régler les performances des pods Ingress Controller.
|
| logEmptyRequests spécifie les connexions pour lesquelles aucune demande n’est reçue et enregistrée. Ces requêtes vides proviennent de sondes de santé d’équilibreur de charge ou de connexions spéculatives du navigateur Web (préconnection) et l’enregistrement de ces demandes peut être indésirable. Cependant, ces requêtes peuvent être causées par des erreurs réseau, auquel cas la journalisation des requêtes vides peut être utile pour diagnostiquer les erreurs. Ces requêtes peuvent être causées par des scans de ports, et l’enregistrement des requêtes vides peut aider à détecter les tentatives d’intrusion. Les valeurs autorisées pour ce champ sont Log et Ignore. La valeur par défaut est Log. Le type LoggingPolicy accepte l’une ou l’autre des deux valeurs:
|
| HTTPEmptyRequestsPolicy décrit comment les connexions HTTP sont gérées si les temps de connexion sont écoulés avant la réception d’une demande. Les valeurs autorisées pour ce champ sont Répondre et Ignorer. La valeur par défaut est Répondre. Le type HTTPEmptyRequestsPolicy accepte l’une ou l’autre des deux valeurs:
Ces connexions proviennent de sondes de santé d’équilibreur de charge ou de connexions spéculatives par navigateur Web (préconnection) et peuvent être ignorées en toute sécurité. Cependant, ces demandes peuvent être causées par des erreurs de réseau, de sorte que le réglage de ce champ à Ignore peut entraver la détection et le diagnostic des problèmes. Ces requêtes peuvent être causées par des scans de ports, auquel cas l’enregistrement des requêtes vides peut aider à détecter les tentatives d’intrusion. |
2.3.3.1. Ingress Controller TLS Profils de sécurité Copier lienLien copié sur presse-papiers!
Les profils de sécurité TLS offrent aux serveurs un moyen de réguler les chiffrements qu’un client de connexion peut utiliser lors de la connexion au serveur.
2.3.3.1.1. Comprendre les profils de sécurité TLS Copier lienLien copié sur presse-papiers!
Il est possible d’utiliser un profil de sécurité TLS (Transport Layer Security) pour définir quels chiffrements TLS sont requis par divers services Red Hat OpenShift sur les composants AWS. Le Red Hat OpenShift Service sur les profils de sécurité AWS TLS est basé sur les configurations recommandées par Mozilla.
Il est possible de spécifier l’un des profils de sécurité TLS suivants pour chaque composant:
Le profil | Description |
---|---|
| Ce profil est destiné à être utilisé avec des clients ou des bibliothèques hérités. Le profil est basé sur la configuration recommandée par l’ancienne compatibilité rétrograde. L’ancien profil nécessite une version TLS minimale de 1.0. Note Dans le cas du contrôleur Ingress, la version TLS minimale est convertie de 1.0 à 1.1. |
| Ce profil est la configuration recommandée pour la majorité des clients. C’est le profil de sécurité TLS par défaut pour le contrôleur Ingress, le kubelet et le plan de contrôle. Le profil est basé sur la configuration de compatibilité intermédiaire recommandée. Le profil intermédiaire nécessite une version TLS minimale de 1.2. |
| Ce profil est destiné à une utilisation avec des clients modernes qui n’ont pas besoin de rétrocompatibilité. Ce profil est basé sur la configuration de compatibilité moderne recommandée. Le profil Moderne nécessite une version TLS minimale de 1.3. |
| Ce profil vous permet de définir la version TLS et les chiffrements à utiliser. Avertissement Faites preuve de prudence lors de l’utilisation d’un profil personnalisé, car les configurations invalides peuvent causer des problèmes. |
Lors de l’utilisation de l’un des types de profil prédéfinis, la configuration de profil efficace est sujette à changement entre les versions. À titre d’exemple, compte tenu d’une spécification pour utiliser le profil intermédiaire déployé sur la version X.Y.Z.Z, une mise à niveau pour libérer X.Y.Z+1 pourrait entraîner l’application d’une nouvelle configuration de profil, entraînant un déploiement.
2.3.3.1.2. Configuration du profil de sécurité TLS pour le contrôleur Ingress Copier lienLien copié sur presse-papiers!
Afin de configurer un profil de sécurité TLS pour un contrôleur Ingress, modifiez la ressource personnalisée IngressController (CR) pour spécifier un profil de sécurité TLS prédéfini ou personnalisé. Lorsqu’un profil de sécurité TLS n’est pas configuré, la valeur par défaut est basée sur le profil de sécurité TLS défini pour le serveur API.
Exemple IngressController CR qui configure l’ancien profil de sécurité TLS
Le profil de sécurité TLS définit la version minimale de TLS et les chiffrements TLS pour les connexions TLS pour les contrôleurs d’Ingress.
Les chiffrements et la version TLS minimale du profil de sécurité TLS configuré dans la ressource personnalisée IngressController (CR) sous Profil Status.Tls et le profil de sécurité TLS configuré sous Profil de sécurité Spec.Tls. Dans le cas du profil de sécurité TLS personnalisé, les chiffrements spécifiques et la version TLS minimale sont listés sous les deux paramètres.
L’image HAProxy Ingress Controller prend en charge TLS 1.3 et le profil Modern.
L’opérateur Ingress convertit également le TLS 1.0 d’un profil Old ou Custom en 1.1.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle cluster-admin.
Procédure
Editez le CR IngressController CR dans le projet openshift-ingress-operator pour configurer le profil de sécurité TLS:
oc edit IngressController default -n openshift-ingress-operator
$ oc edit IngressController default -n openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajouter le champ spec.tlsSecurityProfile:
Exemple IngressController CR pour un profil personnalisé
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez le type de profil de sécurité TLS (ancien, intermédiaire ou personnalisé). La valeur par défaut est intermédiaire.
- 2
- Indiquez le champ approprié pour le type sélectionné:
-
ancien: {}
-
intermédiaire: {}
-
coutume:
-
- 3
- Dans le cas du type personnalisé, spécifiez une liste de chiffrements TLS et une version minimale acceptée de TLS.
- Enregistrez le fichier pour appliquer les modifications.
La vérification
Assurez-vous que le profil est défini dans IngressController CR:
oc describe IngressController default -n openshift-ingress-operator
$ oc describe IngressController default -n openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.3.1.3. Configuration de l’authentification TLS mutuelle Copier lienLien copié sur presse-papiers!
Il est possible de configurer le contrôleur Ingress pour activer l’authentification mutuelle TLS (mTLS) en définissant une valeur spec.clientTLS. La valeur clientTLS configure le contrôleur Ingress pour vérifier les certificats clients. Cette configuration inclut la définition d’une valeur clientCA, qui est une référence à une carte de configuration. La carte de configuration contient le paquet de certificats CA codé par PEM qui est utilisé pour vérifier le certificat d’un client. En option, vous pouvez également configurer une liste de filtres sujets de certificat.
Lorsque la valeur clientCA spécifie un point de distribution de liste de révocation de certificat X509v3 (CRL), l’opérateur Ingress télécharge et gère une carte de configuration CRL basée sur le point de distribution HTTP URI X509v3 CRL spécifié dans chaque certificat fourni. Le contrôleur Ingress utilise cette carte de configuration lors de la négociation mTLS/TLS. Les demandes qui ne fournissent pas de certificats valides sont rejetées.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle cluster-admin.
- Il y a un paquet de certificats CA codé par PEM.
Dans le cas où votre groupe CA fait référence à un point de distribution de LCR, vous devez également inclure le certificat d’entité finale ou de feuille au paquet CA client. Ce certificat doit avoir inclus un URI HTTP sous les points de distribution CRL, comme décrit dans la RFC 5280. À titre d’exemple:
Issuer: C=US, O=Example Inc, CN=Example Global G2 TLS RSA SHA256 2020 CA1 Subject: SOME SIGNED CERT X509v3 CRL Distribution Points: Full Name: URI:http://crl.example.com/example.crl
Issuer: C=US, O=Example Inc, CN=Example Global G2 TLS RSA SHA256 2020 CA1 Subject: SOME SIGNED CERT X509v3 CRL Distribution Points: Full Name: URI:http://crl.example.com/example.crl
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procédure
Dans l’espace de noms openshift-config, créez une carte de configuration à partir de votre paquet CA:
oc create configmap \ router-ca-certs-default \ --from-file=ca-bundle.pem=client-ca.crt \ -n openshift-config
$ oc create configmap \ router-ca-certs-default \ --from-file=ca-bundle.pem=client-ca.crt \
1 -n openshift-config
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- La clé de données cartographique de configuration doit être ca-bundle.pem, et la valeur des données doit être un certificat CA au format PEM.
Éditer la ressource IngressController dans le projet openshift-ingress-operator:
oc edit IngressController default -n openshift-ingress-operator
$ oc edit IngressController default -n openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Ajoutez le champ spec.clientTLS et les sous-champs pour configurer le TLS mutuel:
Exemple IngressController CR pour un profil clientTLS qui spécifie les modèles de filtrage
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - En option, obtenez le Nom Distinguished (DN) pour AuthorSubjectPatterns en entrant la commande suivante.
openssl x509 -in custom-cert.pem -noout -subject
$ openssl x509 -in custom-cert.pem -noout -subject
subject= /CN=example.com/ST=NC/C=US/O=Security/OU=OpenShift
2.3.4. Afficher le contrôleur Ingress par défaut Copier lienLien copié sur presse-papiers!
L’opérateur Ingress est une caractéristique centrale du service OpenShift Red Hat sur AWS et est activé hors de la boîte.
Chaque nouveau Red Hat OpenShift Service sur l’installation AWS dispose d’un ingresscontroller nommé par défaut. Il peut être complété par des contrôleurs Ingress supplémentaires. En cas de suppression de l’ingresscontroller par défaut, l’opérateur Ingress le recréera automatiquement en une minute.
Procédure
Afficher le contrôleur Ingress par défaut:
oc describe --namespace=openshift-ingress-operator ingresscontroller/default
$ oc describe --namespace=openshift-ingress-operator ingresscontroller/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.5. Afficher le statut de l’opérateur Ingress Copier lienLien copié sur presse-papiers!
Consultez et inspectez l’état de votre opérateur Ingress.
Procédure
Consultez le statut de votre opérateur Ingress:
oc describe clusteroperators/ingress
$ oc describe clusteroperators/ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.6. Afficher les journaux du contrôleur Ingress Copier lienLien copié sur presse-papiers!
Consultez les journaux de vos contrôleurs Ingress.
Procédure
Consultez vos journaux Ingress Controller:
oc logs --namespace=openshift-ingress-operator deployments/ingress-operator -c <container_name>
$ oc logs --namespace=openshift-ingress-operator deployments/ingress-operator -c <container_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.7. Afficher l’état Ingress Controller Copier lienLien copié sur presse-papiers!
Il est possible d’afficher l’état d’un contrôleur d’Ingress particulier.
Procédure
Afficher l’état d’un contrôleur Ingress:
oc describe --namespace=openshift-ingress-operator ingresscontroller/<name>
$ oc describe --namespace=openshift-ingress-operator ingresscontroller/<name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.8. Création d’un contrôleur Ingress personnalisé Copier lienLien copié sur presse-papiers!
En tant qu’administrateur de cluster, vous pouvez créer un nouveau contrôleur d’Ingress personnalisé. Étant donné que le contrôleur Ingress par défaut peut changer pendant Red Hat OpenShift Service sur les mises à jour AWS, la création d’un contrôleur Ingress personnalisé peut être utile lors de la maintenance manuelle d’une configuration qui persiste entre les mises à jour de cluster.
Cet exemple fournit une spécification minimale pour un contrôleur d’Ingress personnalisé. Afin de personnaliser davantage votre contrôleur Ingress personnalisé, voir "Configuring the Ingress Controller".
Conditions préalables
- Installez le OpenShift CLI (oc).
- Connectez-vous en tant qu’utilisateur avec des privilèges cluster-admin.
Procédure
Créez un fichier YAML qui définit l’objet IngressController personnalisé:
Exemple de fichier custom-ingress-controller.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez le nom personnalisé de l’objet IngressController.
- 2
- Indiquez le nom du secret avec le certificat de wildcard personnalisé.
- 3
- La réplique minimale doit être UNE
- 4
- Indiquez le domaine à votre nom de domaine. Le domaine spécifié sur l’objet IngressController et le domaine utilisé pour le certificat doivent correspondre. À titre d’exemple, si la valeur de domaine est "custom_domain.mycompany.com", le certificat doit avoir SAN *.custom_domain.mycompany.com (avec le *. ajouté au domaine).
Créez l’objet en exécutant la commande suivante:
oc create -f custom-ingress-controller.yaml
$ oc create -f custom-ingress-controller.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9. Configuration du contrôleur Ingress Copier lienLien copié sur presse-papiers!
2.3.9.1. Définition d’un certificat par défaut personnalisé Copier lienLien copié sur presse-papiers!
En tant qu’administrateur, vous pouvez configurer un contrôleur Ingress pour utiliser un certificat personnalisé en créant une ressource secrète et en modifiant la ressource personnalisée IngressController (CR).
Conditions préalables
- Il faut avoir une paire de certificats/clés dans des fichiers codés PEM, où le certificat est signé par une autorité de certification de confiance ou par une autorité de certification privée de confiance que vous avez configurée dans un PKI personnalisé.
Le certificat répond aux exigences suivantes:
- Le certificat est valable pour le domaine d’entrée.
- Le certificat utilise l’extension subjectAltName pour spécifier un domaine wildcard, tel que *.apps.ocp4.example.com.
Il faut avoir un IngressController CR. Il est possible d’utiliser la valeur par défaut:
oc --namespace openshift-ingress-operator get ingresscontrollers
$ oc --namespace openshift-ingress-operator get ingresscontrollers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME AGE default 10m
NAME AGE default 10m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Lorsque vous avez des certificats intermédiaires, ils doivent être inclus dans le fichier tls.crt du secret contenant un certificat par défaut personnalisé. La commande est importante lorsque vous spécifiez un certificat; énumérez votre(s) certificat(s) intermédiaire(s) après tout certificat(s) serveur(s).
Procédure
Ce qui suit suppose que le certificat personnalisé et la paire de clés sont dans les fichiers tls.crt et tls.key dans le répertoire de travail actuel. Les noms de chemin réels sont remplacés par tls.crt et tls.key. Il est également possible de remplacer un autre nom par défaut lors de la création de la ressource Secret et de la référencer dans IngressController CR.
Cette action entraînera le redéploiement du contrôleur Ingress, en utilisant une stratégie de déploiement mobile.
Créez une ressource Secret contenant le certificat personnalisé dans l’espace de noms openshift-ingress à l’aide des fichiers tls.crt et tls.key.
oc --namespace openshift-ingress create secret tls custom-certs-default --cert=tls.crt --key=tls.key
$ oc --namespace openshift-ingress create secret tls custom-certs-default --cert=tls.crt --key=tls.key
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Actualisez l’IngressController CR pour faire référence au nouveau secret de certificat:
oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default \ --patch '{"spec":{"defaultCertificate":{"name":"custom-certs-default"}}}'
$ oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default \ --patch '{"spec":{"defaultCertificate":{"name":"custom-certs-default"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La mise à jour a été efficace:
echo Q |\ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null |\ openssl x509 -noout -subject -issuer -enddate
$ echo Q |\ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null |\ openssl x509 -noout -subject -issuer -enddate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow là où:
<domaine>
- Indique le nom de domaine de base de votre cluster.
Exemple de sortie
subject=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = *.apps.example.com issuer=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = example.com notAfter=May 10 08:32:45 2022 GM
subject=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = *.apps.example.com issuer=C = US, ST = NC, L = Raleigh, O = RH, OU = OCP4, CN = example.com notAfter=May 10 08:32:45 2022 GM
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceAlternativement, vous pouvez appliquer le YAML suivant pour définir un certificat par défaut personnalisé:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Le nom secret du certificat doit correspondre à la valeur utilisée pour mettre à jour le CR.
Lorsque l’IngressController CR a été modifié, l’opérateur Ingress met à jour le déploiement du contrôleur Ingress pour utiliser le certificat personnalisé.
2.3.9.2. La suppression d’un certificat par défaut personnalisé Copier lienLien copié sur presse-papiers!
En tant qu’administrateur, vous pouvez supprimer un certificat personnalisé que vous avez configuré un contrôleur Ingress à utiliser.
Conditions préalables
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle cluster-admin.
- L’OpenShift CLI (oc) a été installé.
- Auparavant, vous avez configuré un certificat par défaut personnalisé pour le contrôleur Ingress.
Procédure
Afin de supprimer le certificat personnalisé et de restaurer le certificat livré avec Red Hat OpenShift Service sur AWS, entrez la commande suivante:
oc patch -n openshift-ingress-operator ingresscontrollers/default \ --type json -p $'- op: remove\n path: /spec/defaultCertificate'
$ oc patch -n openshift-ingress-operator ingresscontrollers/default \ --type json -p $'- op: remove\n path: /spec/defaultCertificate'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Il peut y avoir un retard pendant que le cluster réconcilie la nouvelle configuration du certificat.
La vérification
Afin de confirmer que le certificat de cluster original est restauré, entrez la commande suivante:
echo Q | \ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null | \ openssl x509 -noout -subject -issuer -enddate
$ echo Q | \ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null | \ openssl x509 -noout -subject -issuer -enddate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow là où:
<domaine>
- Indique le nom de domaine de base de votre cluster.
Exemple de sortie
subject=CN = *.apps.<domain> issuer=CN = ingress-operator@1620633373 notAfter=May 10 10:44:36 2023 GMT
subject=CN = *.apps.<domain> issuer=CN = ingress-operator@1620633373 notAfter=May 10 10:44:36 2023 GMT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.3. Auto-échelle d’un contrôleur Ingress Copier lienLien copié sur presse-papiers!
Il est possible d’adapter automatiquement un contrôleur Ingress pour répondre de manière dynamique aux exigences de performance ou de disponibilité de routage, telles que l’exigence d’augmenter le débit.
La procédure suivante fournit un exemple pour la mise à l’échelle du contrôleur Ingress par défaut.
Conditions préalables
- L’OpenShift CLI (oc) est installé.
- En tant qu’utilisateur, vous avez accès à un service Red Hat OpenShift sur AWS en tant qu’utilisateur avec le rôle cluster-admin.
Le Custom Metrics Autoscaler Operator et un contrôleur KEDA associé ont été installés.
- Il est possible d’installer l’opérateur en utilisant OperatorHub sur la console Web. Après avoir installé l’opérateur, vous pouvez créer une instance de KedaController.
Procédure
Créez un compte de service à authentifier avec Thanos en exécutant la commande suivante:
oc create -n openshift-ingress-operator serviceaccount thanos && oc describe -n openshift-ingress-operator serviceaccount thanos
$ oc create -n openshift-ingress-operator serviceaccount thanos && oc describe -n openshift-ingress-operator serviceaccount thanos
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez manuellement le jeton secret de compte de service avec la commande suivante:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Définissez un objet TriggerAuthentication dans l’espace de noms openshift-ingress-operator en utilisant le jeton du compte de service.
Créez l’objet TriggerAuthentication et passez la valeur de la variable secrète au paramètre TOKEN:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Créer et appliquer un rôle pour la lecture des métriques à partir de Thanos:
Créez un nouveau rôle, thanos-metrics-reader.yaml, qui lit des métriques à partir de pods et de nœuds:
à propos de Thanos-metrics-reader.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquez le nouveau rôle en exécutant la commande suivante:
oc apply -f thanos-metrics-reader.yaml
$ oc apply -f thanos-metrics-reader.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Ajoutez le nouveau rôle au compte de service en entrant les commandes suivantes:
oc adm policy -n openshift-ingress-operator add-role-to-user thanos-metrics-reader -z thanos --role-namespace=openshift-ingress-operator
$ oc adm policy -n openshift-ingress-operator add-role-to-user thanos-metrics-reader -z thanos --role-namespace=openshift-ingress-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc adm policy -n openshift-ingress-operator add-cluster-role-to-user cluster-monitoring-view -z thanos
$ oc adm policy -n openshift-ingress-operator add-cluster-role-to-user cluster-monitoring-view -z thanos
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteL’argument add-cluster-role-to-user n’est requis que si vous utilisez des requêtes cross-namespace. L’étape suivante utilise une requête de l’espace de noms kube-metrics qui nécessite cet argument.
Créez un nouveau fichier ScaledObject YAML, ingress-autoscaler.yaml, qui cible le déploiement par défaut du contrôleur Ingress:
Exemple ScaledObject Définition
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- La ressource personnalisée que vous ciblez. Dans ce cas, le contrôleur Ingress.
- 2
- Facultatif: Le nombre maximum de répliques. En cas d’omission de ce champ, le maximum par défaut est défini à 100 répliques.
- 3
- Le point d’extrémité du service Thanos dans l’espace de noms de surveillance openshift.
- 4
- L’espace de noms Ingress Operator.
- 5
- Cette expression évalue cependant de nombreux nœuds de travail sont présents dans le cluster déployé.
ImportantLorsque vous utilisez des requêtes cross-namespace, vous devez cibler le port 9091 et non le port 9092 dans le champ serverAddress. Il faut aussi avoir des privilèges élevés pour lire les métriques à partir de ce port.
Appliquez la définition de ressource personnalisée en exécutant la commande suivante:
oc apply -f ingress-autoscaler.yaml
$ oc apply -f ingress-autoscaler.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
La vérification
Assurez-vous que le contrôleur Ingress par défaut est mis à l’échelle pour correspondre à la valeur retournée par la requête kube-state-metrics en exécutant les commandes suivantes:
La commande grep permet de rechercher dans le fichier Ingress Controller YAML des répliques:
oc get -n openshift-ingress-operator ingresscontroller/default -o yaml | grep replicas:
$ oc get -n openshift-ingress-operator ingresscontroller/default -o yaml | grep replicas:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
replicas: 3
replicas: 3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Faites entrer les gousses dans le projet openshift-ingress:
oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME READY STATUS RESTARTS AGE router-default-7b5df44ff-l9pmm 2/2 Running 0 17h router-default-7b5df44ff-s5sl5 2/2 Running 0 3d22h router-default-7b5df44ff-wwsth 2/2 Running 0 66s
NAME READY STATUS RESTARTS AGE router-default-7b5df44ff-l9pmm 2/2 Running 0 17h router-default-7b5df44ff-s5sl5 2/2 Running 0 3d22h router-default-7b5df44ff-wwsth 2/2 Running 0 66s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.4. Evoluation d’un contrôleur Ingress Copier lienLien copié sur presse-papiers!
Adaptez manuellement un contrôleur Ingress pour répondre aux exigences de performance de routage ou de disponibilité telles que l’exigence d’augmenter le débit. les commandes OC sont utilisées pour mettre à l’échelle la ressource IngressController. La procédure suivante fournit un exemple pour la mise à l’échelle de l’IngreressController par défaut.
La mise à l’échelle n’est pas une action immédiate, car il faut du temps pour créer le nombre désiré de répliques.
Procédure
Afficher le nombre actuel de répliques disponibles pour le logiciel IngressController par défaut:
oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
2
2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Adaptez le logiciel IngressController par défaut au nombre de répliques souhaité à l’aide de la commande oc patch. L’exemple suivant met à l’échelle le IngressController par défaut à 3 répliques:
oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"replicas": 3}}' --type=merge
$ oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"replicas": 3}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
ingresscontroller.operator.openshift.io/default patched
ingresscontroller.operator.openshift.io/default patched
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Assurez-vous que l’IngreressController par défaut a mis à l’échelle le nombre de répliques que vous avez spécifiées:
oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
3
3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceAlternativement, vous pouvez appliquer le YAML suivant pour mettre à l’échelle un contrôleur Ingress en trois répliques:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Lorsque vous avez besoin d’une quantité différente de répliques, modifiez la valeur des répliques.
2.3.9.5. Configuration de la journalisation des accès Ingress Copier lienLien copié sur presse-papiers!
Il est possible de configurer le contrôleur Ingress pour activer les journaux d’accès. Lorsque vous avez des clusters qui ne reçoivent pas beaucoup de trafic, vous pouvez vous connecter à un sidecar. Lorsque vous avez des clusters de trafic élevés, afin d’éviter de dépasser la capacité de la pile de journalisation ou de vous intégrer à une infrastructure de journalisation en dehors de Red Hat OpenShift Service sur AWS, vous pouvez transférer les journaux à un point de terminaison syslog personnalisé. Il est également possible de spécifier le format des journaux d’accès.
L’enregistrement des conteneurs est utile pour activer les journaux d’accès sur les clusters à faible trafic lorsqu’il n’y a pas d’infrastructure de journalisation Syslog existante, ou pour une utilisation à court terme lors du diagnostic des problèmes avec le contrôleur Ingress.
Le syslog est nécessaire pour les clusters à fort trafic où les journaux d’accès pourraient dépasser la capacité de la pile OpenShift Logging, ou pour les environnements où toute solution de journalisation doit s’intégrer à une infrastructure de journalisation Syslog existante. Les cas d’utilisation Syslog peuvent se chevaucher.
Conditions préalables
- Connectez-vous en tant qu’utilisateur avec des privilèges cluster-admin.
Procédure
Configurer la connexion d’accès Ingress à un sidecar.
Afin de configurer la journalisation des accès Ingress, vous devez spécifier une destination à l’aide de spec.logging.access.destination. Afin de spécifier l’enregistrement à un conteneur sidecar, vous devez spécifier Container spec.logging.access.destination.type. L’exemple suivant est une définition Ingress Controller qui se connecte à une destination Container:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque vous configurez le contrôleur Ingress pour se connecter à un sidecar, l’opérateur crée un conteneur nommé logs à l’intérieur du Pod de contrôleur Ingress:
oc -n openshift-ingress logs deployment.apps/router-default -c logs
$ oc -n openshift-ingress logs deployment.apps/router-default -c logs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
2020-05-11T19:11:50.135710+00:00 router-default-57dfc6cd95-bpmk6 router-default-57dfc6cd95-bpmk6 haproxy[108]: 174.19.21.82:39654 [11/May/2020:19:11:50.133] public be_http:hello-openshift:hello-openshift/pod:hello-openshift:hello-openshift:10.128.2.12:8080 0/0/1/0/1 200 142 - - --NI 1/1/0/0/0 0/0 "GET / HTTP/1.1"
2020-05-11T19:11:50.135710+00:00 router-default-57dfc6cd95-bpmk6 router-default-57dfc6cd95-bpmk6 haproxy[108]: 174.19.21.82:39654 [11/May/2020:19:11:50.133] public be_http:hello-openshift:hello-openshift/pod:hello-openshift:hello-openshift:10.128.2.12:8080 0/0/1/0/1 200 142 - - --NI 1/1/0/0/0 0/0 "GET / HTTP/1.1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Configurer la journalisation des accès Ingress à un point de terminaison Syslog.
Afin de configurer la journalisation des accès Ingress, vous devez spécifier une destination à l’aide de spec.logging.access.destination. Afin de spécifier la connexion à une destination de point de terminaison Syslog, vous devez spécifier Syslog pour spec.logging.access.destination.type. Dans le cas où le type de destination est Syslog, vous devez également spécifier un point d’extrémité de destination en utilisant spec.logging.access.destination.syslog.address et vous pouvez spécifier une installation en utilisant spec.logging.access.destination.syslog.facility. L’exemple suivant est une définition Ingress Controller qui se connecte à une destination Syslog:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteLe port de destination syslog doit être UDP.
L’adresse de destination syslog doit être une adresse IP. Il ne prend pas en charge le nom d’hôte DNS.
Configurer la journalisation des accès Ingress avec un format de journal spécifique.
Il est possible de spécifier spec.logging.access.httpLogFormat pour personnaliser le format du journal. L’exemple suivant est une définition du contrôleur Ingress qui se connecte à un point de terminaison syslog avec l’adresse IP 1.2.3.4 et le port 10514:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Désactiver l’enregistrement des accès Ingress.
Afin de désactiver la journalisation des accès Ingress, laissez spec.logging ou spec.logging.access vide:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Autoriser le contrôleur Ingress à modifier la longueur du journal HAProxy lors de l’utilisation d’un sidecar.
Employez spec.logging.access.destination.syslog.maxLength si vous utilisez spec.logging.access.destination.type: Syslog.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Employez spec.logging.access.destination.container.maxLength si vous utilisez spec.logging.access.destination.type: Container.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.6. Configuration du nombre de threads Ingress Controller Copier lienLien copié sur presse-papiers!
L’administrateur de cluster peut définir le nombre de threads pour augmenter le nombre de connexions entrantes qu’un cluster peut gérer. Il est possible de corriger un contrôleur Ingress existant pour augmenter la quantité de threads.
Conditions préalables
- Ce qui suit suppose que vous avez déjà créé un contrôleur Ingress.
Procédure
Actualisez le contrôleur Ingress pour augmenter le nombre de threads:
oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"threadCount": 8}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"threadCount": 8}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteLorsque vous avez un nœud capable d’exécuter de grandes quantités de ressources, vous pouvez configurer spec.nodePlacement.nodeSelector avec des étiquettes correspondant à la capacité du nœud prévu, et configurer spec.tuningOptions.threadCount à une valeur appropriée.
2.3.9.7. Configuration d’un contrôleur Ingress pour utiliser un équilibreur de charge interne Copier lienLien copié sur presse-papiers!
Lors de la création d’un contrôleur Ingress sur les plates-formes cloud, le contrôleur Ingress est publié par défaut par un équilibreur de charge dans le cloud public. En tant qu’administrateur, vous pouvez créer un contrôleur Ingress qui utilise un équilibreur de charge dans le cloud interne.
Lorsque vous souhaitez modifier la portée d’un IngressController, vous pouvez modifier le paramètre .spec.endpointPublishingStrategy.loadBalancer.scope après la création de la ressource personnalisée (CR).
Figure 2.1. Diagramme de LoadBalancer
Le graphique précédent montre les concepts suivants relatifs à Red Hat OpenShift Service sur AWS Ingress LoadBalancerService endpoint stratégie:
- Il est possible de charger l’équilibre externe, à l’aide de l’équilibreur de charge du fournisseur de cloud, ou en interne, à l’aide de l’équilibreur de charge OpenShift Ingress Controller.
- Il est possible d’utiliser l’adresse IP unique de l’équilibreur de charge et les ports plus familiers, tels que 8080 et 4200, comme indiqué sur le cluster représenté dans le graphique.
- Le trafic de l’équilibreur de charge externe est dirigé vers les pods, et géré par l’équilibreur de charge, comme indiqué dans le cas d’un nœud vers le bas. Consultez la documentation de Kubernetes Services pour plus de détails sur la mise en œuvre.
Conditions préalables
- Installez le OpenShift CLI (oc).
- Connectez-vous en tant qu’utilisateur avec des privilèges cluster-admin.
Procédure
Créez une ressource personnalisée IngressController (CR) dans un fichier nommé <name>-ingress-controller.yaml, comme dans l’exemple suivant:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez le contrôleur Ingress défini à l’étape précédente en exécutant la commande suivante:
oc create -f <name>-ingress-controller.yaml
$ oc create -f <name>-ingress-controller.yaml
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <name> par le nom de l’objet IngressController.
Facultatif: Confirmer que le contrôleur Ingress a été créé en exécutant la commande suivante:
oc --all-namespaces=true get ingresscontrollers
$ oc --all-namespaces=true get ingresscontrollers
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.8. Définir l’intervalle de contrôle de santé Ingress Controller Copier lienLien copié sur presse-papiers!
L’administrateur du cluster peut définir l’intervalle de contrôle de santé pour définir combien de temps le routeur attend entre deux contrôles de santé consécutifs. Cette valeur est appliquée globalement par défaut pour tous les itinéraires. La valeur par défaut est de 5 secondes.
Conditions préalables
- Ce qui suit suppose que vous avez déjà créé un contrôleur Ingress.
Procédure
Actualisez le contrôleur Ingress pour modifier l’intervalle entre les contrôles de santé arrière:
oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"healthCheckInterval": "8s"}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"healthCheckInterval": "8s"}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NoteAfin de remplacer l’intervale healthCheckInterval pour une seule route, utilisez l’itinéraire annotation router.openshift.io/haproxy.health.check.interval
2.3.9.9. Configuration du contrôleur Ingress par défaut pour que votre cluster soit interne Copier lienLien copié sur presse-papiers!
Il est possible de configurer le contrôleur Ingress par défaut pour que votre cluster soit interne en le supprimant et en le recréant.
Lorsque vous souhaitez modifier la portée d’un IngressController, vous pouvez modifier le paramètre .spec.endpointPublishingStrategy.loadBalancer.scope après la création de la ressource personnalisée (CR).
Conditions préalables
- Installez le OpenShift CLI (oc).
- Connectez-vous en tant qu’utilisateur avec des privilèges cluster-admin.
Procédure
Configurez le contrôleur Ingress par défaut pour que votre cluster soit interne en le supprimant et en le recréant.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.10. Configuration de la politique d’admission d’itinéraire Copier lienLien copié sur presse-papiers!
Les administrateurs et les développeurs d’applications peuvent exécuter des applications dans plusieurs espaces de noms avec le même nom de domaine. C’est pour les organisations où plusieurs équipes développent des microservices qui sont exposés sur le même nom d’hôte.
Autoriser les réclamations dans les espaces de noms ne devrait être activé que pour les clusters ayant confiance entre les espaces de noms, sinon un utilisateur malveillant pourrait prendre en charge un nom d’hôte. C’est pourquoi la politique d’admission par défaut interdit les revendications de nom d’hôte dans les espaces de noms.
Conditions préalables
- Les privilèges d’administrateur de cluster.
Procédure
Éditez le champ .spec.routeAdmission de la variable ressource ingresscontroller à l’aide de la commande suivante:
oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
$ oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de configuration du contrôleur Ingress
spec: routeAdmission: namespaceOwnership: InterNamespaceAllowed ...
spec: routeAdmission: namespaceOwnership: InterNamespaceAllowed ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceAlternativement, vous pouvez appliquer les YAML suivants pour configurer la politique d’admission d’itinéraire:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.11. En utilisant des routes wildcard Copier lienLien copié sur presse-papiers!
Le contrôleur HAProxy Ingress a pris en charge les routes wildcard. L’opérateur Ingress utilise wildcardPolicy pour configurer la variable d’environnement ROUTER_ALLOW_WILDCARD_ROUTES du contrôleur Ingress.
Le comportement par défaut du contrôleur Ingress est d’admettre des itinéraires avec une stratégie de carte sauvage de None, qui est rétrocompatible avec les ressources existantes IngressController.
Procédure
Configurez la stratégie de wildcard.
À l’aide de la commande suivante pour modifier la ressource IngressController:
oc edit IngressController
$ oc edit IngressController
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans la section Spécification, définissez le champ wildcardPolicy sur WildcardsDisallowed ou WildcardsAllowed:
spec: routeAdmission: wildcardPolicy: WildcardsDisallowed # or WildcardsAllowed
spec: routeAdmission: wildcardPolicy: WildcardsDisallowed # or WildcardsAllowed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.12. 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.
2.3.9.12.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.
2.3.9.12.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:
|
2.3.9.13. Configurer ou supprimer les en-têtes de requête et de réponse HTTP dans un contrôleur Ingress 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 migrer une application s’exécutant sur votre cluster pour utiliser TLS mutuel, ce qui nécessite que votre application vérifie un en-tête de requête X-Forwarded-Client-Cert, mais le Red Hat OpenShift Service sur AWS Ingress Controller fournit un en-tête de requête X-SSL-Client-Der.
La procédure suivante modifie le contrôleur d’ingrédient pour définir l’en-tête de requête X-Forwarded-Client-Cert, et supprimer l’en-tête de requête X-SSL-Client-Der.
Conditions préalables
- L’OpenShift CLI (oc) a été installé.
- En tant qu’utilisateur, vous avez accès à un service Red Hat OpenShift sur AWS en tant qu’utilisateur avec le rôle cluster-admin.
Procédure
Éditer la ressource Ingress Controller:
oc -n openshift-ingress-operator edit ingresscontroller/default
$ oc -n openshift-ingress-operator edit ingresscontroller/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow De remplacer l’en-tête de requête HTTP X-SSL-Client-Der par l’en-tête de requête HTTP X-Forwarded-Client-Cert:
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 demande.
- 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, une valeur dynamique est ajoutée.
NoteLes valeurs d’en-tête dynamiques pour les réponses HTTP sont ré.hdr et ssl_c_der. Les valeurs d’en-tête dynamiques pour les requêtes HTTP sont req.hdr et ssl_c_der. Les valeurs dynamiques de requête et de réponse peuvent utiliser les convertisseurs inférieur et base64.
- Enregistrez le fichier pour appliquer les modifications.
2.3.9.14. En utilisant des en-têtes X-Forwarded Copier lienLien copié sur presse-papiers!
Configurez le contrôleur HAProxy Ingress pour spécifier une stratégie pour gérer les en-têtes HTTP, y compris Forwarded et X-Forwarded-For. L’opérateur Ingress utilise le champ HTTPHeaders pour configurer la variable d’environnement ROUTER_SET_FORWARDED_HEADERS de la variable Ingress Controller.
Procédure
Configurez le champ HTTPHeaders pour le contrôleur Ingress.
À l’aide de la commande suivante pour modifier la ressource IngressController:
oc edit IngressController
$ oc edit IngressController
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans la section Spécification, définissez le champ de stratégie HTTPHeaders pour ajouter, remplacer, IfNone ou jamais:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Exemples de cas d’utilisation
En tant qu’administrateur de cluster, vous pouvez:
Configurez un proxy externe qui injecte l’en-tête X-Forwarded-For dans chaque requête avant de le transmettre à un contrôleur Ingress.
Afin de configurer le contrôleur Ingress pour passer l’en-tête sans modification, vous spécifiez la stratégie jamais. Le contrôleur Ingress ne définit alors jamais les en-têtes, et les applications ne reçoivent que les en-têtes fournis par le proxy externe.
Configurez le contrôleur Ingress pour passer l’en-tête X-Forwarded-For que votre proxy externe définit sur les requêtes de cluster externe via un module non modifié.
Afin de configurer le contrôleur Ingress pour définir l’en-tête X-Forwarded-For sur les requêtes de cluster interne, qui ne passent pas par le proxy externe, spécifiez la stratégie if-none. Lorsqu’une requête HTTP a déjà l’en-tête défini par le proxy externe, le contrôleur Ingress le conserve. En cas d’absence de l’en-tête parce que la requête n’est pas passée par le proxy, le contrôleur d’intruss ajoute l’en-tête.
En tant que développeur d’applications, vous pouvez:
Configurez un proxy externe spécifique à l’application qui injecte l’en-tête X-Forwarded-Forwarded.
Afin de configurer un contrôleur d’Ingress pour passer l’en-tête à travers non modifié pour la Route d’une application, sans affecter la politique d’autres Routes, ajouter une annotation haproxy.router.openshift.openshift.io/set-forwarded-headers: if-none ou haproxy.router.openshift.io/set-forwarded-headers: jamais sur la Route pour l’application.
NoteL’annotation de haproxy.router.openshift.io/set-forwarded-headers peut être définie sur une base par route, indépendamment de la valeur globale définie pour le contrôleur Ingress.
2.3.9.15. Activer ou désactiver HTTP/2 sur les contrôleurs Ingress Copier lienLien copié sur presse-papiers!
Activer ou désactiver la connectivité HTTP/2 transparente de bout en bout dans HAProxy. Les propriétaires d’applications peuvent utiliser les capacités du protocole HTTP/2, y compris la connexion unique, la compression d’en-tête, les flux binaires, et plus encore.
Activer ou désactiver la connectivité HTTP/2 pour un contrôleur d’Ingress individuel ou pour l’ensemble du cluster.
Lorsque vous activez ou désactivez la connectivité HTTP/2 pour un contrôleur Ingress individuel et pour l’ensemble du cluster, la configuration HTTP/2 pour le contrôleur Ingress prime sur la configuration HTTP/2 pour le cluster.
Afin d’activer l’utilisation de HTTP/2 pour une connexion du client à une instance HAProxy, une route doit spécifier un certificat personnalisé. L’itinéraire qui utilise le certificat par défaut ne peut pas utiliser HTTP/2. Cette restriction est nécessaire pour éviter les problèmes de fusion de connexion, où le client réutilise une connexion pour différents itinéraires utilisant le même certificat.
Considérez les cas d’utilisation suivants pour une connexion HTTP/2 pour chaque type d’itinéraire:
- Dans le cas d’une route de recryptage, la connexion de HAProxy au pod d’application peut utiliser HTTP/2 si l’application prend en charge l’utilisation de la Négociation du protocole Application-Level (ALPN) pour négocier HTTP/2 avec HAProxy. Il est impossible d’utiliser HTTP/2 avec une route recryptée à moins que le contrôleur Ingress n’ait activé HTTP/2.
- Dans le cas d’un parcours de passage, la connexion peut utiliser HTTP/2 si l’application prend en charge l’utilisation d’ALPN pour négocier HTTP/2 avec le client. Il est possible d’utiliser HTTP/2 avec un parcours de passage si le contrôleur Ingress a activé ou désactivé HTTP/2.
- La connexion utilise HTTP/2 si le service spécifie uniquement appProtocol: kubernetes.io/h2c. Il est possible d’utiliser HTTP/2 avec une route sécurisée à durée limite si le contrôleur Ingress est activé ou désactivé par HTTP/2.
- Dans le cas d’un itinéraire non sécurisé, la connexion utilise HTTP/2 si le service spécifie uniquement appProtocol: kubernetes.io/h2c. Il est possible d’utiliser HTTP/2 avec une route non sécurisée si le contrôleur Ingress a activé ou désactivé HTTP/2.
En ce qui concerne les routes non-passées, le Contrôleur Ingress négocie sa connexion à l’application indépendamment de la connexion du client. Cela signifie qu’un client peut se connecter au contrôleur Ingress et négocier HTTP/1.1. Le contrôleur d’Ingress peut alors se connecter à l’application, négocier HTTP/2 et transmettre la demande de la connexion HTTP/1.1 client en utilisant la connexion HTTP/2 à l’application.
Cette séquence d’événements provoque un problème si le client tente par la suite de mettre à niveau sa connexion à partir de HTTP/1.1 vers le protocole WebSocket. Considérez que si vous avez une application qui a l’intention d’accepter des connexions WebSocket, et que l’application tente de permettre la négociation de protocole HTTP/2, le client échoue toute tentative de mise à niveau vers le protocole WebSocket.
2.3.9.15.1. Activer HTTP/2 Copier lienLien copié sur presse-papiers!
Activer HTTP/2 sur un contrôleur Ingress spécifique, ou activer HTTP/2 pour l’ensemble du cluster.
Procédure
Afin d’activer HTTP/2 sur un contrôleur Ingress spécifique, entrez la commande oc annotate:
oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=true
$ oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=true
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <ingresscontroller_name> par le nom d’un contrôleur Ingress pour activer HTTP/2.
Afin d’activer HTTP/2 pour l’ensemble du cluster, entrez la commande oc annotate:
oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=true
$ oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Alternativement, vous pouvez appliquer le code YAML suivant pour activer HTTP/2:
2.3.9.15.2. Désactiver HTTP/2 Copier lienLien copié sur presse-papiers!
Il est possible de désactiver HTTP/2 sur un contrôleur Ingress spécifique, ou de désactiver HTTP/2 pour l’ensemble du cluster.
Procédure
Afin de désactiver HTTP/2 sur un contrôleur Ingress spécifique, entrez la commande oc annotate:
oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=false
$ oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=false
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <ingresscontroller_name> par le nom d’un contrôleur Ingress pour désactiver HTTP/2.
Afin de désactiver HTTP/2 pour l’ensemble du cluster, entrez la commande oc annotate:
oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=false
$ oc annotate ingresses.config/cluster ingress.operator.openshift.io/default-enable-http2=false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Alternativement, vous pouvez appliquer le code YAML suivant pour désactiver HTTP/2:
2.3.9.16. Configuration du protocole PROXY pour un contrôleur Ingress Copier lienLien copié sur presse-papiers!
L’administrateur de cluster peut configurer le protocole PROXY lorsqu’un contrôleur Ingress utilise soit les types de stratégie de publication HostNetwork, NodePortService ou Private Endpoint. Le protocole PROXY permet à l’équilibreur de charge de préserver les adresses client d’origine pour les connexions que le contrôleur Ingress reçoit. Les adresses clientes d’origine sont utiles pour enregistrer, filtrer et injecter des en-têtes HTTP. Dans la configuration par défaut, les connexions que le contrôleur Ingress reçoit ne contiennent que l’adresse source associée à l’équilibreur de charge.
Le contrôleur Ingress par défaut avec des clusters fournis par l’installateur sur des plates-formes non cloud utilisant une IP virtuelle d’Ingress (VIP) Keepalived ne prend pas en charge le protocole PROXY.
Le protocole PROXY permet à l’équilibreur de charge de préserver les adresses client d’origine pour les connexions que le contrôleur Ingress reçoit. Les adresses clientes d’origine sont utiles pour enregistrer, filtrer et injecter des en-têtes HTTP. Dans la configuration par défaut, les connexions que le contrôleur Ingress reçoit ne contiennent que l’adresse IP source associée à l’équilibreur de charge.
Dans le cas d’une configuration d’itinéraire de passage, les serveurs de Red Hat OpenShift Service sur les clusters AWS ne peuvent pas observer l’adresse IP source du client d’origine. Lorsque vous devez connaître l’adresse IP source du client d’origine, configurez la journalisation des accès Ingress pour votre contrôleur Ingress afin que vous puissiez afficher les adresses IP source du client.
Le service OpenShift Red Hat sur AWS définit les en-têtes Forwarded et X-Forwarded-Forwarded-Forwarded-Forwarded afin que les charges de travail des applications vérifient l’adresse IP source du client.
En savoir plus sur l’enregistrement des accès Ingress, voir « Configuring Ingress access logging ».
La configuration du protocole PROXY pour un contrôleur Ingress n’est pas prise en charge lors de l’utilisation du type de stratégie de publication du point de terminaison LoadBalancerService. Cette restriction est due au fait que lorsque Red Hat OpenShift Service sur AWS s’exécute dans une plate-forme cloud, et qu’un contrôleur Ingress spécifie qu’un équilibreur de charge de service doit être utilisé, l’opérateur Ingress configure le service d’équilibrage de charge et active le protocole PROXY en fonction de l’exigence de la plate-forme pour préserver les adresses source.
Il faut configurer Red Hat OpenShift Service sur AWS et l’équilibreur de charge externe pour utiliser le protocole PROXY ou TCP.
Cette fonctionnalité n’est pas prise en charge dans les déploiements cloud. Cette restriction est due au fait que lorsque Red Hat OpenShift Service sur AWS s’exécute dans une plate-forme cloud, et qu’un contrôleur Ingress spécifie qu’un équilibreur de charge de service doit être utilisé, l’opérateur Ingress configure le service d’équilibrage de charge et active le protocole PROXY en fonction de l’exigence de la plate-forme pour préserver les adresses source.
Il faut configurer le service OpenShift Red Hat sur AWS et l’équilibreur de charge externe pour utiliser le protocole PROXY ou utiliser le protocole de contrôle de transmission (TCP).
Conditions préalables
- C’est vous qui avez créé un contrôleur Ingress.
Procédure
Modifiez la ressource Ingress Controller en entrant la commande suivante dans votre CLI:
oc -n openshift-ingress-operator edit ingresscontroller/default
$ oc -n openshift-ingress-operator edit ingresscontroller/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Définir la configuration PROXY:
Lorsque votre contrôleur Ingress utilise le type de stratégie de publication du point de terminaison HostNetwork, définissez le sous-champ spec.endpointPublishingStrategy.hostNetwork.protocol sur PROXY:
Exemple de configuration hostNetwork à PROXY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lorsque votre contrôleur Ingress utilise le type de stratégie de publication NodePortService, définissez le sous-champ spec.endpointPublishingStrategy.nodePort.protocol sur PROXY:
Exemple de configuration nodePort à PROXY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans le cas où votre contrôleur Ingress utilise le type de stratégie de publication de points de terminaison privés, définissez le sous-champ spec.endpointPublishingStrategy.priv.protocol sur PROXY:
Exemple de configuration privée à PROXY
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.17. Définir un domaine de cluster alternatif à l’aide de l’option appsDomain Copier lienLien copié sur presse-papiers!
En tant qu’administrateur de cluster, vous pouvez spécifier une alternative au domaine du cluster par défaut pour les itinéraires créés par l’utilisateur en configurant le champ appsDomain. Le champ appsDomain est un domaine optionnel pour Red Hat OpenShift Service sur AWS à utiliser au lieu de la valeur par défaut, qui est spécifiée dans le champ de domaine. Lorsque vous spécifiez un domaine alternatif, il remplace le domaine du cluster par défaut dans le but de déterminer l’hôte par défaut pour une nouvelle route.
À titre d’exemple, vous pouvez utiliser le domaine DNS pour votre entreprise comme domaine par défaut pour les routes et les entrées pour les applications s’exécutant sur votre cluster.
Conditions préalables
- « vous avez déployé un service Red Hat OpenShift sur le cluster AWS.
- L’interface de ligne de commande oc a été installée.
Procédure
Configurez le champ appsDomain en spécifiant un domaine par défaut alternatif pour les itinéraires créés par l’utilisateur.
Éditer la ressource du cluster d’entrée:
oc edit ingresses.config/cluster -o yaml
$ oc edit ingresses.config/cluster -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Éditer le fichier YAML:
Exemple d’applicationsConfiguration de la main pour tester.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indique le domaine par défaut. Après l’installation, vous ne pouvez pas modifier le domaine par défaut.
- 2
- En option: Domaine pour Red Hat OpenShift Service sur l’infrastructure AWS à utiliser pour les routes d’application. Au lieu du préfixe par défaut, les applications, vous pouvez utiliser un préfixe alternatif comme le test.
Assurez-vous qu’une route existante contient le nom de domaine spécifié dans le champ appsDomain en exposant l’itinéraire et en vérifiant le changement de domaine d’itinéraire:
NoteAttendez que l’apiserver ouvert termine les mises à jour de roulement avant d’exposer l’itinéraire.
Exposer l’itinéraire:
oc expose service hello-openshift
$ oc expose service hello-openshift route.route.openshift.io/hello-openshift exposed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
oc get routes
$ oc get routes NAME HOST/PORT PATH SERVICES PORT TERMINATION WILDCARD hello-openshift hello_openshift-<my_project>.test.example.com hello-openshift 8080-tcp None
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.18. Conversion de la coque d’en-tête HTTP Copier lienLien copié sur presse-papiers!
HAProxy minuscules les noms d’en-tête HTTP par défaut; par exemple, changer Host: xyz.com pour héberger: xyz.com. Lorsque les applications héritées sont sensibles à la capitalisation des noms d’en-tête HTTP, utilisez le champ API Ingress Controller spec.httpHeaders.headerNameCaseAdjustements pour une solution permettant d’adapter les applications héritées jusqu’à ce qu’elles puissent être corrigées.
Le service OpenShift Red Hat sur AWS inclut HAProxy 2.8. Lorsque vous souhaitez mettre à jour cette version de l’équilibreur de charge basé sur le Web, assurez-vous d’ajouter la section spec.httpHeaders.headerNameCaseAdjustments au fichier de configuration de votre cluster.
En tant qu’administrateur de cluster, vous pouvez convertir le cas d’en-tête HTTP en entrant la commande patch oc ou en définissant le champ HeaderNameCaseAdjustments dans le fichier Ingress Controller YAML.
Conditions préalables
- L’OpenShift CLI (oc) a été installé.
- En tant qu’utilisateur, vous avez accès au cluster avec le rôle cluster-admin.
Procédure
Capitalisez un en-tête HTTP en utilisant la commande oc patch.
Changez l’en-tête HTTP de l’hôte à l’hôte en exécutant la commande suivante:
oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"httpHeaders":{"headerNameCaseAdjustments":["Host"]}}}'
$ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"httpHeaders":{"headerNameCaseAdjustments":["Host"]}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Créez un fichier YAML ressource Route afin que l’annotation puisse être appliquée à l’application.
Exemple d’un itinéraire nommé my-application
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Définissez haproxy.router.openshift.io/h1-adjust-case afin que le contrôleur Ingress puisse ajuster l’en-tête de requête hôte comme spécifié.
Indiquez les ajustements en configurant le champ HeaderNameCaseAdjustments dans le fichier de configuration du contrôleur d’Ingress YAML.
L’exemple suivant de fichier Ingress Controller YAML ajuste l’en-tête hôte à Host pour les requêtes HTTP/1 aux itinéraires annotés de manière appropriée:
Exemple Contrôleur d’Ingress YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow L’exemple suivant permet des ajustements de cas d’en-tête de réponse HTTP en utilisant l’annotation de cas haproxy.router.openshift.io/h1-adjust-case:
Exemple d’itinéraire YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Définissez haproxy.router.openshift.io/h1-adjust-case sur true.
2.3.9.19. Compression de routeur Copier lienLien copié sur presse-papiers!
Configurez le contrôleur HAProxy Ingress pour spécifier la compression du routeur à l’échelle mondiale pour des types MIME spécifiques. La variable mimeTypes permet de définir les formats des types MIME auxquels la compression est appliquée. Les types sont: application, image, message, multipartie, texte, vidéo, ou un type personnalisé préfacé par "X-". Afin de voir la notation complète pour les types et sous-types MIME, voir la RFC1341.
La mémoire allouée à la compression peut affecter les connexions maximales. En outre, la compression de grands tampons peut provoquer une latence, comme le regex lourd ou de longues listes de regex.
Les types MIME ne bénéficient pas tous de la compression, mais HAProxy utilise toujours des ressources pour essayer de compresser si vous en avez besoin. Généralement, les formats de texte, tels que html, css et js, les formats bénéficient de compression, mais les formats qui sont déjà compressés, tels que l’image, l’audio et la vidéo, profitent peu en échange du temps et des ressources consacrées à la compression.
Procédure
Configurez le champ httpCompression pour le contrôleur Ingress.
À l’aide de la commande suivante pour modifier la ressource IngressController:
oc edit -n openshift-ingress-operator ingresscontrollers/default
$ oc edit -n openshift-ingress-operator ingresscontrollers/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans spec, définissez le champ de stratégie httpCompression sur mimeTypes et spécifiez une liste de types MIME qui devraient avoir une compression appliquée:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.20. Exposer les métriques du routeur Copier lienLien copié sur presse-papiers!
Il est possible d’exposer les métriques de routeur HAProxy par défaut au format Prometheus sur le port de statistiques par défaut, 1936. Les systèmes de collecte et d’agrégation des métriques externes tels que Prometheus peuvent accéder aux métriques de routeur HAProxy. Les métriques de routeur HAProxy sont affichées dans un navigateur au format HTML et virgule (CSV).
Conditions préalables
- J’ai configuré votre pare-feu pour accéder au port de statistiques par défaut, 1936.
Procédure
Obtenez le nom de la pod de routeur en exécutant la commande suivante:
oc get pods -n openshift-ingress
$ oc get pods -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME READY STATUS RESTARTS AGE router-default-76bfffb66c-46qwp 1/1 Running 0 11h
NAME READY STATUS RESTARTS AGE router-default-76bfffb66c-46qwp 1/1 Running 0 11h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Accédez au nom d’utilisateur et au mot de passe du routeur, que le routeur stocke dans les fichiers /var/lib/haproxy/conf/metrics-auth/statsUsername et /var/lib/haproxy/conf/metrics-auth/statsword:
Obtenez le nom d’utilisateur en exécutant la commande suivante:
oc rsh <router_pod_name> cat metrics-auth/statsUsername
$ oc rsh <router_pod_name> cat metrics-auth/statsUsername
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Accédez au mot de passe en exécutant la commande suivante:
oc rsh <router_pod_name> cat metrics-auth/statsPassword
$ oc rsh <router_pod_name> cat metrics-auth/statsPassword
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Obtenez les certificats IP et métriques du routeur en exécutant la commande suivante:
oc describe pod <router_pod>
$ oc describe pod <router_pod>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Bénéficiez des statistiques brutes au format Prometheus en exécutant la commande suivante:
curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
$ curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Accédez aux métriques en toute sécurité en exécutant la commande suivante:
curl -u user:password https://<router_IP>:<stats_port>/metrics -k
$ curl -u user:password https://<router_IP>:<stats_port>/metrics -k
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Accédez au port de statistiques par défaut, 1936, en exécutant la commande suivante:
curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
$ curl -u <user>:<password> http://<router_IP>:<stats_port>/metrics
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple 2.1. Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Lancez la fenêtre de statistiques en entrant l’URL suivante dans un navigateur:
http://<user>:<password>@<router_IP>:<stats_port>
http://<user>:<password>@<router_IP>:<stats_port>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Facultatif: Obtenez les statistiques au format CSV en entrant l’URL suivante dans un navigateur:
http://<user>:<password>@<router_ip>:1936/metrics;csv
http://<user>:<password>@<router_ip>:1936/metrics;csv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.21. Personnalisation des pages de réponse au code d’erreur HAProxy Copier lienLien copié sur presse-papiers!
En tant qu’administrateur de cluster, vous pouvez spécifier une page de réponse de code d’erreur personnalisée pour 503, 404, ou les deux pages d’erreur. Le routeur HAProxy sert une page d’erreur 503 lorsque le pod d’application n’est pas en cours d’exécution ou une page d’erreur 404 lorsque l’URL demandée n’existe pas. Ainsi, si vous personnalisez la page de réponse du code d’erreur 503, la page est servie lorsque le pod d’application n’est pas en cours d’exécution, et la page de réponse HTTP par défaut du code d’erreur 404 est desservie par le routeur HAProxy pour une route incorrecte ou une route non existante.
Les pages de réponse de code d’erreur personnalisées sont spécifiées dans une carte de configuration puis corrigées sur le contrôleur d’Ingress. Les touches map de configuration ont deux noms de fichiers disponibles comme suit: error-page-503.http et error-page-404.http.
Les pages personnalisées de réponse au code d’erreur HTTP doivent suivre les directives de configuration de la page d’erreur HAProxy HTTP. En voici un exemple du service par défaut Red Hat OpenShift sur AWS HAProxy routeur http 503 page de réponse au code d’erreur. Le contenu par défaut peut être utilisé comme modèle pour créer votre propre page personnalisée.
Le routeur HAProxy ne sert par défaut qu’une page d’erreur 503 lorsque l’application n’est pas en cours d’exécution ou lorsque l’itinéraire est incorrect ou inexistant. Ce comportement par défaut est le même que le comportement sur Red Hat OpenShift Service sur AWS 4.8 et antérieur. Lorsqu’une carte de configuration pour la personnalisation d’une réponse au code d’erreur HTTP n’est pas fournie et que vous utilisez une page de réponse au code d’erreur HTTP personnalisée, le routeur sert une page de réponse au code d’erreur 404 ou 503 par défaut.
Lorsque vous utilisez le service Red Hat OpenShift sur la page de code d’erreur AWS par défaut 503 comme modèle pour vos personnalisations, les en-têtes du fichier nécessitent un éditeur qui peut utiliser les terminaisons de ligne CRLF.
Procédure
Créer une carte de configuration nommée my-custom-error-code-pages dans l’espace de noms openshift-config:
oc -n openshift-config create configmap my-custom-error-code-pages \ --from-file=error-page-503.http \ --from-file=error-page-404.http
$ oc -n openshift-config create configmap my-custom-error-code-pages \ --from-file=error-page-503.http \ --from-file=error-page-404.http
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ImportantLorsque vous ne spécifiez pas le format correct pour la page de réponse du code d’erreur personnalisé, une panne de pod de routeur se produit. Afin de résoudre cette panne, vous devez supprimer ou corriger la carte de configuration et supprimer les pods de routeurs concernés afin qu’ils puissent être recréés avec les informations correctes.
Corrigez le contrôleur Ingress pour référencer les pages de code my-custom-error-config map par nom:
oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"httpErrorCodePages":{"name":"my-custom-error-code-pages"}}}' --type=merge
$ oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"httpErrorCodePages":{"name":"my-custom-error-code-pages"}}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow L’opérateur Ingress copie la carte my-custom-error-code-pages de configuration de l’espace de noms openshift-config vers l’espace de noms openshift-ingress. L’opérateur nomme la carte de configuration en fonction du modèle, <your_ingresscontroller_name>-errorpages, dans l’espace de noms openshift-ingress.
Afficher la copie:
oc get cm default-errorpages -n openshift-ingress
$ oc get cm default-errorpages -n openshift-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME DATA AGE default-errorpages 2 25s
NAME DATA AGE default-errorpages 2 25s
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- L’exemple de nom de la carte de configuration est des pages d’erreur par défaut parce que la ressource personnalisée (CR) par défaut du contrôleur Ingress a été corrigée.
Confirmez que la carte de configuration contenant la page de réponse d’erreur personnalisée monte sur le volume du routeur où la clé map de configuration est le nom de fichier qui a la réponse de code d’erreur HTTP personnalisée:
503 réponse de code d’erreur personnalisée HTTP personnalisée:
oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-503.http
$ oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-503.http
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 404 réponse de code d’erreur personnalisée HTTP personnalisée:
oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-404.http
$ oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-404.http
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
La vérification
Contrôlez votre code d’erreur personnalisé en réponse HTTP:
Créer un projet de test et une application:
oc new-project test-ingress
$ oc new-project test-ingress
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc new-app django-psql-example
$ oc new-app django-psql-example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 503 réponse de code d’erreur http personnalisée:
- Arrêtez toutes les gousses pour l’application.
Exécutez la commande curl suivante ou visitez le nom d’hôte de route dans le navigateur:
curl -vk <route_hostname>
$ curl -vk <route_hostname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
404 réponse d’erreur http personnalisée:
- Consultez un itinéraire inexistant ou un itinéraire incorrect.
Exécutez la commande curl suivante ou visitez le nom d’hôte de route dans le navigateur:
curl -vk <route_hostname>
$ curl -vk <route_hostname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Cochez si l’attribut errorfile est correctement dans le fichier haproxy.config:
oc -n openshift-ingress rsh <router> cat /var/lib/haproxy/conf/haproxy.config | grep errorfile
$ oc -n openshift-ingress rsh <router> cat /var/lib/haproxy/conf/haproxy.config | grep errorfile
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3.9.22. Configuration des connexions maximales du contrôleur Ingress Copier lienLien copié sur presse-papiers!
L’administrateur de cluster peut définir le nombre maximum de connexions simultanées pour les déploiements de routeurs OpenShift. Il est possible de corriger un contrôleur Ingress existant pour augmenter le nombre maximum de connexions.
Conditions préalables
- Ce qui suit suppose que vous avez déjà créé un contrôleur Ingress
Procédure
Actualisez le contrôleur Ingress pour modifier le nombre maximum de connexions pour HAProxy:
oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"maxConnections": 7500}}}'
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"maxConnections": 7500}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AvertissementLorsque vous définissez la valeur spec.tuningOptions.maxConnections supérieure à la limite actuelle du système d’exploitation, le processus HAProxy ne démarre pas. Consultez le tableau dans la section « Paramètres de configuration du contrôleur d’entrée » pour plus d’informations sur ce paramètre.
2.3.10. Configurations de Red Hat OpenShift sur AWS Ingress Operator Copier lienLien copié sur presse-papiers!
Le tableau suivant détaille les composants de l’opérateur Ingress et si Red Hat Site Fiability Engineers (SRE) maintient ce composant sur Red Hat OpenShift Service sur les clusters AWS.
Composant d’entrée | Géré par | Configuration par défaut? |
---|---|---|
Contrôleur d’Ingress de mise à l’échelle | DE SRE | ♪ oui ♪ |
Compte de fil d’opérateur d’entrée | DE SRE | ♪ oui ♪ |
Enregistrement d’accès au contrôleur d’entrée | DE SRE | ♪ oui ♪ |
Ingress Controller sharding | DE SRE | ♪ oui ♪ |
Ingress Controller Politique d’admission d’itinéraire | DE SRE | ♪ oui ♪ |
Ingress Controller itinéraires de wildcard | DE SRE | ♪ oui ♪ |
Contrôleur d’entrée X-Forwarded en-têtes | DE SRE | ♪ oui ♪ |
Compression d’itinéraire du contrôleur d’entrée | DE SRE | ♪ oui ♪ |