Mise en réseau
Configuration et gestion de la mise en réseau des clusters
Résumé
Chapitre 1. About networking
Red Hat OpenShift Networking est un écosystème de fonctionnalités, de plugins et de capacités de mise en réseau avancées qui étendent la mise en réseau de Kubernetes avec les fonctionnalités avancées liées à la mise en réseau dont votre cluster a besoin pour gérer son trafic réseau pour un ou plusieurs clusters hybrides. Cet écosystème de capacités de mise en réseau intègre l'entrée, la sortie, l'équilibrage de charge, le débit haute performance, la sécurité, la gestion du trafic inter- et intra-cluster et fournit un outil d'observabilité basé sur les rôles pour réduire ses complexités naturelles.
La liste suivante met en évidence certaines des fonctionnalités de Red Hat OpenShift Networking les plus couramment utilisées et disponibles sur votre cluster :
Réseau primaire du cluster fourni par l'un des plugins Container Network Interface (CNI) suivants :
- Plugin réseau OVN-Kubernetes, le plugin par défaut est le plugin réseau OVN-Kubernetes
- Plugin réseau SDN OpenShift, une alternative optionnelle
- Plugins de réseaux primaires alternatifs certifiés par des tiers
- Opérateur de réseau en grappe pour la gestion des plugins de réseau
- Opérateur d'entrée pour le trafic web crypté TLS
- Opérateur DNS pour l'attribution des noms
- MetalLB Operator pour l'équilibrage de la charge de trafic sur les clusters bare metal
- Prise en charge du basculement IP pour une haute disponibilité
- Prise en charge supplémentaire des réseaux matériels grâce à plusieurs plugins CNI, notamment pour les réseaux matériels macvlan, ipvlan et SR-IOV
- IPv4, IPv6 et adressage double pile
- Clusters hybrides Linux-Windows pour les charges de travail basées sur Windows
- Red Hat OpenShift Service Mesh pour la découverte, l'équilibrage de charge, l'authentification de service à service, la reprise sur panne, les métriques et la surveillance des services
- OpenShift à nœud unique
- Opérateur d'observabilité du réseau pour le débogage et l'analyse du réseau
- Technologies Submariner et Red Hat Application Interconnect pour la mise en réseau entre clusters
Chapitre 2. Comprendre la mise en réseau
Les administrateurs de clusters disposent de plusieurs options pour exposer au trafic externe les applications qui s'exécutent au sein d'un cluster et pour sécuriser les connexions réseau :
- Types de services, tels que les ports de nœuds ou les équilibreurs de charge
-
Les ressources de l'API, telles que
Ingress
etRoute
Par défaut, Kubernetes attribue à chaque pod une adresse IP interne pour les applications qui s'exécutent dans le pod. Les pods et leurs conteneurs peuvent fonctionner en réseau, mais les clients extérieurs au cluster n'ont pas accès au réseau. Lorsque vous exposez votre application au trafic externe, le fait de donner à chaque module sa propre adresse IP signifie que les modules peuvent être traités comme des hôtes physiques ou des machines virtuelles en termes d'allocation de ports, de mise en réseau, de nommage, de découverte de services, d'équilibrage de charge, de configuration d'applications et de migration.
Certaines plateformes en nuage proposent des API de métadonnées qui écoutent l'adresse IP 169.254.169.254, une adresse IP locale dans le bloc CIDR d'IPv4 169.254.0.0/16
.
Ce bloc CIDR n'est pas accessible depuis le réseau de pods. Les pods qui ont besoin d'accéder à ces adresses IP doivent recevoir un accès au réseau hôte en définissant le champ spec.hostNetwork
dans la spécification du pod sur true
.
Si vous autorisez un hôte pod à accéder au réseau, vous lui accordez un accès privilégié à l'infrastructure réseau sous-jacente.
2.1. OpenShift Container Platform DNS
Si vous exécutez plusieurs services, tels que des services front-end et back-end à utiliser avec plusieurs pods, des variables d'environnement sont créées pour les noms d'utilisateur, les IP de service, etc. afin que les pods front-end puissent communiquer avec les services back-end. Si le service est supprimé et recréé, une nouvelle adresse IP peut lui être attribuée, ce qui oblige à recréer les pods frontaux pour récupérer les valeurs mises à jour de la variable d'environnement IP du service. En outre, le service back-end doit être créé avant tous les pods front-end pour garantir que l'IP du service est générée correctement et qu'elle peut être fournie aux pods front-end en tant que variable d'environnement.
Pour cette raison, OpenShift Container Platform dispose d'un DNS intégré de sorte que les services peuvent être atteints par le DNS du service ainsi que par l'IP/port du service.
2.2. Opérateur Ingress de la plateforme de conteneurs OpenShift
Lorsque vous créez votre cluster OpenShift Container Platform, les pods et les services s'exécutant sur le cluster se voient attribuer chacun leur propre adresse IP. Les adresses IP sont accessibles aux autres pods et services fonctionnant à proximité, mais ne sont pas accessibles aux clients extérieurs. L'opérateur d'ingestion (Ingress Operator) met en œuvre l'API IngressController
et est le composant responsable de l'activation de l'accès externe aux services de cluster d'OpenShift Container Platform.
L'opérateur d'ingestion permet aux clients externes d'accéder à votre service en déployant et en gérant un ou plusieurs contrôleurs d'ingestion basés sur HAProxy pour gérer le routage. Vous pouvez utiliser l'opérateur d'ingestion pour acheminer le trafic en spécifiant les ressources OpenShift Container Platform Route
et Kubernetes Ingress
. Les configurations au sein du contrôleur d'ingestion, telles que la possibilité de définir le type endpointPublishingStrategy
et l'équilibrage de charge interne, fournissent des moyens de publier les points d'extrémité du contrôleur d'ingestion.
2.2.1. Comparaison des itinéraires et des entrées
La ressource Kubernetes Ingress dans OpenShift Container Platform met en œuvre le contrôleur Ingress avec un service de routeur partagé qui s'exécute en tant que pod dans le cluster. La façon la plus courante de gérer le trafic Ingress est d'utiliser le contrôleur Ingress. Vous pouvez faire évoluer et répliquer ce pod comme n'importe quel autre pod ordinaire. Ce service de routeur est basé sur HAProxy, qui est une solution d'équilibreur de charge open source.
La route OpenShift Container Platform fournit le trafic Ingress aux services dans le cluster. Les routes offrent des fonctionnalités avancées qui peuvent ne pas être prises en charge par les contrôleurs d'entrée Kubernetes standard, telles que le recryptage TLS, le passage TLS et le fractionnement du trafic pour les déploiements bleu-vert.
Le trafic entrant accède aux services du cluster par l'intermédiaire d'une route. Les routes et les entrées sont les principales ressources permettant de gérer le trafic entrant. Ingress offre des fonctionnalités similaires à celles d'une route, telles que l'acceptation de demandes externes et leur délégation en fonction de la route. Cependant, avec Ingress, vous ne pouvez autoriser que certains types de connexions : HTTP/2, HTTPS et identification du nom du serveur (SNI), et TLS avec certificat. Dans OpenShift Container Platform, les routes sont générées pour répondre aux conditions spécifiées par la ressource Ingress.
2.3. Glossaire des termes courants pour la mise en réseau de OpenShift Container Platform
Ce glossaire définit les termes courants utilisés dans le contenu des réseaux.
- l'authentification
- Pour contrôler l'accès à un cluster OpenShift Container Platform, un administrateur de cluster peut configurer l'authentification des utilisateurs et s'assurer que seuls les utilisateurs approuvés accèdent au cluster. Pour interagir avec un cluster OpenShift Container Platform, vous devez vous authentifier auprès de l'API OpenShift Container Platform. Vous pouvez vous authentifier en fournissant un jeton d'accès OAuth ou un certificat client X.509 dans vos demandes à l'API OpenShift Container Platform.
- Opérateur d'équilibreur de charge AWS
-
L'opérateur AWS Load Balancer (ALB) déploie et gère une instance de
aws-load-balancer-controller
. - Opérateur de réseau en grappe
- L'opérateur de réseau de cluster (CNO) déploie et gère les composants du réseau de cluster dans un cluster OpenShift Container Platform. Cela inclut le déploiement du plugin réseau Container Network Interface (CNI) sélectionné pour le cluster lors de l'installation.
- carte de configuration
-
Une carte de configuration permet d'injecter des données de configuration dans les pods. Vous pouvez référencer les données stockées dans une carte de configuration dans un volume de type
ConfigMap
. Les applications fonctionnant dans un pod peuvent utiliser ces données. - ressource personnalisée (CR)
- Un CR est une extension de l'API Kubernetes. Vous pouvez créer des ressources personnalisées.
- DNS
- Cluster DNS est un serveur DNS qui sert les enregistrements DNS pour les services Kubernetes. Les conteneurs démarrés par Kubernetes incluent automatiquement ce serveur DNS dans leurs recherches DNS.
- Opérateur DNS
- L'opérateur DNS déploie et gère CoreDNS pour fournir un service de résolution de noms aux pods. Cela permet la découverte de services Kubernetes basée sur le DNS dans OpenShift Container Platform.
- déploiement
- Un objet de ressource Kubernetes qui maintient le cycle de vie d'une application.
- domaine
- Le domaine est un nom DNS géré par le contrôleur d'entrée.
- évacuation
- Processus de partage de données vers l'extérieur par le biais du trafic sortant d'un réseau à partir d'un pod.
- Opérateur DNS externe
- L'opérateur DNS externe déploie et gère ExternalDNS pour fournir la résolution de nom pour les services et les routes du fournisseur DNS externe à OpenShift Container Platform.
- Itinéraire basé sur HTTP
- Une route basée sur 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é.
- Entrée
- La ressource Kubernetes Ingress dans OpenShift Container Platform met en œuvre le contrôleur Ingress avec un service de routeur partagé qui s'exécute en tant que pod dans le cluster.
- Contrôleur d'entrée
- L'opérateur d'ingestion gère les contrôleurs d'ingestion. L'utilisation d'un contrôleur d'ingestion est le moyen le plus courant d'autoriser l'accès externe à un cluster OpenShift Container Platform.
- l'infrastructure fournie par l'installateur
- Le programme d'installation déploie et configure l'infrastructure sur laquelle le cluster fonctionne.
- kubelet
- Un agent de nœud primaire qui s'exécute sur chaque nœud du cluster pour s'assurer que les conteneurs s'exécutent dans un pod.
- Opérateur NMState de Kubernetes
- L'opérateur Kubernetes NMState fournit une API Kubernetes pour effectuer une configuration réseau basée sur l'état à travers les nœuds du cluster OpenShift Container Platform avec NMState.
- kube-proxy
- Kube-proxy est un service proxy qui s'exécute sur chaque nœud et aide à mettre des services à la disposition de l'hôte externe. Il aide à transmettre les demandes aux bons conteneurs et est capable d'effectuer un équilibrage primitif de la charge.
- équilibreurs de charge
- OpenShift Container Platform utilise des répartiteurs de charge pour communiquer depuis l'extérieur du cluster avec les services s'exécutant dans le cluster.
- Opérateur MetalLB
-
En tant qu'administrateur de cluster, vous pouvez ajouter l'opérateur MetalLB à votre cluster afin que lorsqu'un service de type
LoadBalancer
est ajouté au cluster, MetalLB puisse ajouter une adresse IP externe pour le service. - multidiffusion
- Avec la multidiffusion IP, les données sont diffusées simultanément à de nombreuses adresses IP.
- espaces nominatifs
- Un espace de noms isole des ressources système spécifiques qui sont visibles par tous les processus. À l'intérieur d'un espace de noms, seuls les processus membres de cet espace peuvent voir ces ressources.
- la mise en réseau
- Informations sur le réseau d'un cluster OpenShift Container Platform.
- nœud
- Une machine de travail dans le cluster OpenShift Container Platform. Un nœud est soit une machine virtuelle (VM), soit une machine physique.
- Opérateur Ingress de la plateforme de conteneurs OpenShift
-
L'opérateur d'ingestion met en œuvre l'API
IngressController
et est le composant responsable de l'accès externe aux services d'OpenShift Container Platform. - nacelle
- Un ou plusieurs conteneurs avec des ressources partagées, telles que le volume et les adresses IP, fonctionnant dans votre cluster OpenShift Container Platform. Un pod est la plus petite unité de calcul définie, déployée et gérée.
- Opérateur PTP
-
L'opérateur PTP crée et gère les services
linuxptp
. - itinéraire
- La route OpenShift Container Platform fournit le trafic Ingress aux services dans le cluster. Les routes offrent des fonctionnalités avancées qui peuvent ne pas être prises en charge par les contrôleurs d'entrée Kubernetes standard, telles que le recryptage TLS, le passage TLS et le fractionnement du trafic pour les déploiements bleu-vert.
- mise à l'échelle
- Augmentation ou diminution de la capacité des ressources.
- service
- Expose une application en cours d'exécution sur un ensemble de pods.
- Opérateur de réseau de virtualisation d'E/S à racine unique (SR-IOV)
- L'opérateur de réseau SR-IOV (Single Root I/O Virtualization) gère les périphériques réseau SR-IOV et les attachements réseau dans votre cluster.
- les réseaux définis par logiciel (SDN)
- OpenShift Container Platform utilise une approche de mise en réseau définie par logiciel (SDN) pour fournir un réseau de cluster unifié qui permet la communication entre les pods à travers le cluster OpenShift Container Platform.
- Protocole de transmission de contrôle de flux (SCTP)
- SCTP est un protocole fiable basé sur des messages qui fonctionne sur un réseau IP.
- souillure
- Les taches et les tolérances garantissent que les pods sont planifiés sur les nœuds appropriés. Vous pouvez appliquer un ou plusieurs taints à un nœud.
- tolérance
- Vous pouvez appliquer des tolérances aux modules. Les tolérances permettent à l'ordonnanceur de programmer des pods dont les taches correspondent.
- console web
- Une interface utilisateur (UI) pour gérer OpenShift Container Platform.
Chapitre 3. Accès aux hôtes
Apprenez à créer un hôte bastion pour accéder aux instances OpenShift Container Platform et aux nœuds du plan de contrôle à l'aide d'un accès shell sécurisé (SSH).
3.1. Accès aux hôtes sur Amazon Web Services dans un cluster d'infrastructure provisionné par l'installateur
Le programme d'installation d'OpenShift Container Platform ne crée pas d'adresses IP publiques pour les instances Amazon Elastic Compute Cloud (Amazon EC2) qu'il provisionne pour votre cluster OpenShift Container Platform. Pour pouvoir accéder par SSH à vos hôtes OpenShift Container Platform, vous devez suivre cette procédure.
Procédure
-
Créez un groupe de sécurité qui autorise l'accès SSH au nuage privé virtuel (VPC) créé par la commande
openshift-install
. - Créez une instance Amazon EC2 sur l'un des sous-réseaux publics créés par le programme d'installation.
Associez une adresse IP publique à l'instance Amazon EC2 que vous avez créée.
Contrairement à l'installation d'OpenShift Container Platform, vous devez associer l'instance Amazon EC2 que vous avez créée à une paire de clés SSH. Le système d'exploitation que vous choisissez pour cette instance n'a pas d'importance, car elle servira simplement de bastion SSH pour relier l'internet au VPC de votre cluster OpenShift Container Platform. L'Amazon Machine Image (AMI) que vous utilisez a son importance. Avec Red Hat Enterprise Linux CoreOS (RHCOS), par exemple, vous pouvez fournir des clés via Ignition, comme le fait le programme d'installation.
Une fois que vous avez provisionné votre instance Amazon EC2 et que vous pouvez y accéder par SSH, vous devez ajouter la clé SSH que vous avez associée à votre installation d'OpenShift Container Platform. Cette clé peut être différente de la clé de l'instance bastion, mais ce n'est pas obligatoire.
NoteL'accès SSH direct n'est recommandé que pour la reprise après sinistre. Lorsque l'API Kubernetes est réactive, exécutez plutôt des pods privilégiés.
-
Exécutez
oc get nodes
, inspectez la sortie et choisissez l'un des nœuds qui est un maître. Le nom d'hôte ressemble àip-10-0-1-163.ec2.internal
. À partir de l'hôte SSH Bastion que vous avez déployé manuellement dans Amazon EC2, connectez-vous en SSH à l'hôte du plan de contrôle. Veillez à utiliser la même clé SSH que celle spécifiée lors de l'installation :
$ ssh -i <ssh-key-path> core@<master-hostname>
Chapitre 4. Aperçu des opérateurs de réseaux
OpenShift Container Platform prend en charge plusieurs types d'opérateurs de mise en réseau. Vous pouvez gérer la mise en réseau du cluster à l'aide de ces opérateurs de mise en réseau.
4.1. Opérateur de réseau en grappe
L'opérateur de réseau de cluster (CNO) déploie et gère les composants du réseau de cluster dans un cluster OpenShift Container Platform. Cela inclut le déploiement du plugin réseau Container Network Interface (CNI) sélectionné pour le cluster lors de l'installation. Pour plus d'informations, voir Cluster Network Operator dans OpenShift Container Platform.
4.2. Opérateur DNS
L'opérateur DNS déploie et gère CoreDNS pour fournir un service de résolution de noms aux pods. Cela permet la découverte de services Kubernetes basés sur le DNS dans OpenShift Container Platform. Pour plus d'informations, voir DNS Operator dans OpenShift Container Platform.
4.3. Opérateur d'entrée
Lorsque vous créez votre cluster OpenShift Container Platform, les pods et les services fonctionnant sur le cluster se voient attribuer des adresses IP. Les adresses IP sont accessibles à d'autres pods et services fonctionnant à proximité, mais ne sont pas accessibles aux clients externes. L'opérateur d'ingestion met en œuvre l'API du contrôleur d'ingestion et est responsable de l'activation de l'accès externe aux services du cluster OpenShift Container Platform. Pour plus d'informations, voir Ingress Operator dans OpenShift Container Platform.
4.4. Opérateur DNS externe
L'opérateur DNS externe déploie et gère ExternalDNS pour fournir la résolution de nom pour les services et les routes du fournisseur DNS externe à OpenShift Container Platform. Pour plus d'informations, voir Comprendre l'opérateur DNS externe.
4.5. Opérateur du pare-feu du nœud d'entrée
L'opérateur du pare-feu du nœud d'entrée utilise un filtre de paquets Berkley étendu (eBPF) et un plugin eXpress Data Path (XDP) pour traiter les règles du pare-feu du nœud, mettre à jour les statistiques et générer des événements pour le trafic abandonné. L'opérateur gère les ressources du pare-feu du nœud d'entrée, vérifie la configuration du pare-feu, n'autorise pas les règles mal configurées susceptibles d'empêcher l'accès au cluster et charge les programmes XDP du pare-feu du nœud d'entrée sur les interfaces sélectionnées dans l'objet ou les objets de la règle. Pour plus d'informations, voir Comprendre l'opérateur de pare-feu de nœud d'entrée
Chapitre 5. Opérateur de réseau de clusters dans OpenShift Container Platform
Le Cluster Network Operator (CNO) déploie et gère les composants du réseau de cluster sur un cluster OpenShift Container Platform, y compris le plugin réseau Container Network Interface (CNI) sélectionné pour le cluster lors de l'installation.
5.1. Opérateur de réseau en grappe
L'opérateur de réseau de cluster met en œuvre l'API network
du groupe d'API operator.openshift.io
. L'opérateur déploie le plugin réseau OVN-Kubernetes, ou le plugin de fournisseur de réseau que vous avez sélectionné lors de l'installation du cluster, à l'aide d'un ensemble de démons.
Procédure
L'opérateur de réseau de cluster est déployé lors de l'installation en tant que Kubernetes Deployment
.
Exécutez la commande suivante pour afficher l'état du déploiement :
$ oc get -n openshift-network-operator deployment/network-operator
Exemple de sortie
NAME READY UP-TO-DATE AVAILABLE AGE network-operator 1/1 1 1 56m
Exécutez la commande suivante pour afficher l'état de l'opérateur de réseau de cluster :
$ oc get clusteroperator/network
Exemple de sortie
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE network 4.5.4 True False False 50m
Les champs suivants fournissent des informations sur l'état de l'opérateur :
AVAILABLE
,PROGRESSING
, etDEGRADED
. Le champAVAILABLE
estTrue
lorsque l'opérateur de réseau de groupe signale un état de disponibilité.
5.2. Visualisation de la configuration du réseau de la grappe
Chaque nouvelle installation d'OpenShift Container Platform possède un objet network.config
nommé cluster
.
Procédure
Utilisez la commande
oc describe
pour afficher la configuration du réseau de la grappe :$ oc describe network.config/cluster
Exemple de sortie
Name: cluster Namespace: Labels: <none> Annotations: <none> API Version: config.openshift.io/v1 Kind: Network Metadata: Self Link: /apis/config.openshift.io/v1/networks/cluster Spec: 1 Cluster Network: Cidr: 10.128.0.0/14 Host Prefix: 23 Network Type: OpenShiftSDN Service Network: 172.30.0.0/16 Status: 2 Cluster Network: Cidr: 10.128.0.0/14 Host Prefix: 23 Cluster Network MTU: 8951 Network Type: OpenShiftSDN Service Network: 172.30.0.0/16 Events: <none>
5.3. Visualisation du statut de l'opérateur de réseau de cluster
Vous pouvez inspecter l'état et afficher les détails de l'opérateur de réseau de cluster à l'aide de la commande oc describe
.
Procédure
Exécutez la commande suivante pour afficher l'état de l'opérateur de réseau de cluster :
$ oc describe clusteroperators/network
5.4. Visualisation des journaux de l'opérateur de réseau de clusters
Vous pouvez consulter les journaux de l'opérateur de réseau de cluster à l'aide de la commande oc logs
.
Procédure
Exécutez la commande suivante pour afficher les journaux de l'opérateur de réseau de cluster :
$ oc logs --namespace=openshift-network-operator deployment/network-operator
5.5. Cluster Network Operator configuration
The configuration for the cluster network is specified as part of the Cluster Network Operator (CNO) configuration and stored in a custom resource (CR) object that is named cluster
. The CR specifies the fields for the Network
API in the operator.openshift.io
API group.
The CNO configuration inherits the following fields during cluster installation from the Network
API in the Network.config.openshift.io
API group and these fields cannot be changed:
clusterNetwork
- IP address pools from which pod IP addresses are allocated.
serviceNetwork
- IP address pool for services.
defaultNetwork.type
- Cluster network plugin, such as OpenShift SDN or OVN-Kubernetes.
Après l'installation du cluster, vous ne pouvez pas modifier les champs énumérés dans la section précédente.
You can specify the cluster network plugin configuration for your cluster by setting the fields for the defaultNetwork
object in the CNO object named cluster
.
5.5.1. Cluster Network Operator configuration object
The fields for the Cluster Network Operator (CNO) are described in the following table:
Tableau 5.1. Cluster Network Operator configuration object
Field | Type | Description |
---|---|---|
|
|
The name of the CNO object. This name is always |
|
| A list specifying the blocks of IP addresses from which pod IP addresses are allocated and the subnet prefix length assigned to each individual node in the cluster. For example: spec: clusterNetwork: - cidr: 10.128.0.0/19 hostPrefix: 23 - cidr: 10.128.32.0/19 hostPrefix: 23
Cette valeur est prête à l'emploi et héritée de l'objet |
|
| A block of IP addresses for services. The OpenShift SDN and OVN-Kubernetes network plugins support only a single IP address block for the service network. For example: spec: serviceNetwork: - 172.30.0.0/14
Cette valeur est prête à l'emploi et héritée de l'objet |
|
| Configures the network plugin for the cluster network. |
|
| The fields for this object specify the kube-proxy configuration. If you are using the OVN-Kubernetes cluster network plugin, the kube-proxy configuration has no effect. |
defaultNetwork object configuration
The values for the defaultNetwork
object are defined in the following table:
Tableau 5.2. defaultNetwork
object
Field | Type | Description |
---|---|---|
|
|
Either Note OpenShift Container Platform uses the OVN-Kubernetes network plugin by default. |
|
| This object is only valid for the OpenShift SDN network plugin. |
|
| This object is only valid for the OVN-Kubernetes network plugin. |
Configuration for the OpenShift SDN network plugin
The following table describes the configuration fields for the OpenShift SDN network plugin:
Tableau 5.3. openshiftSDNConfig
object
Field | Type | Description |
---|---|---|
|
| Le mode d'isolation du réseau pour OpenShift SDN. |
|
| L'unité de transmission maximale (MTU) pour le réseau superposé VXLAN. Cette valeur est normalement configurée automatiquement. |
|
|
Le port à utiliser pour tous les paquets VXLAN. La valeur par défaut est |
Vous ne pouvez modifier la configuration du plugin réseau de votre cluster que lors de l'installation du cluster.
Example OpenShift SDN configuration
defaultNetwork: type: OpenShiftSDN openshiftSDNConfig: mode: NetworkPolicy mtu: 1450 vxlanPort: 4789
Configuration for the OVN-Kubernetes network plugin
The following table describes the configuration fields for the OVN-Kubernetes network plugin:
Tableau 5.4. ovnKubernetesConfig
object
Field | Type | Description |
---|---|---|
|
| L'unité de transmission maximale (MTU) pour le réseau superposé Geneve (Generic Network Virtualization Encapsulation). Cette valeur est normalement configurée automatiquement. |
|
| Le port UDP pour le réseau superposé de Geneve. |
|
| Si le champ est présent, IPsec est activé pour le cluster. |
|
| Specify a configuration object for customizing network policy audit logging. If unset, the defaults audit log settings are used. |
|
| Optional: Specify a configuration object for customizing how egress traffic is sent to the node gateway. Note While migrating egress traffic, you can expect some disruption to workloads and service traffic until the Cluster Network Operator (CNO) successfully rolls out the changes. |
|
If your existing network infrastructure overlaps with the
For example, if the This field cannot be changed after installation. |
The default value is |
|
If your existing network infrastructure overlaps with the This field cannot be changed after installation. |
The default value is |
Tableau 5.5. policyAuditConfig
object
Field | Type | Description |
---|---|---|
| entier |
The maximum number of messages to generate every second per node. The default value is |
| entier |
The maximum size for the audit log in bytes. The default value is |
| chaîne de caractères | One of the following additional audit log targets:
|
| chaîne de caractères |
The syslog facility, such as |
Tableau 5.6. gatewayConfig
object
Field | Type | Description |
---|---|---|
|
|
Set this field to
This field has an interaction with the Open vSwitch hardware offloading feature. If you set this field to |
Vous ne pouvez modifier la configuration de votre plugin de réseau de cluster que lors de l'installation du cluster, à l'exception du champ gatewayConfig
qui peut être modifié lors de l'exécution en tant qu'activité post-installation.
Example OVN-Kubernetes configuration with IPSec enabled
defaultNetwork: type: OVNKubernetes ovnKubernetesConfig: mtu: 1400 genevePort: 6081 ipsecConfig: {}
kubeProxyConfig object configuration
The values for the kubeProxyConfig
object are defined in the following table:
Tableau 5.7. kubeProxyConfig
object
Field | Type | Description |
---|---|---|
|
|
The refresh period for Note
Because of performance improvements introduced in OpenShift Container Platform 4.3 and greater, adjusting the |
|
|
The minimum duration before refreshing kubeProxyConfig: proxyArguments: iptables-min-sync-period: - 0s |
5.5.2. Exemple de configuration de l'opérateur de réseau en grappe
Une configuration CNO complète est spécifiée dans l'exemple suivant :
Exemple d'objet Opérateur de réseau en grappe
apiVersion: operator.openshift.io/v1 kind: Network metadata: name: cluster spec: clusterNetwork: 1 - cidr: 10.128.0.0/14 hostPrefix: 23 serviceNetwork: 2 - 172.30.0.0/16 defaultNetwork: 3 type: OpenShiftSDN openshiftSDNConfig: mode: NetworkPolicy mtu: 1450 vxlanPort: 4789 kubeProxyConfig: iptablesSyncPeriod: 30s proxyArguments: iptables-min-sync-period: - 0s
5.6. Ressources supplémentaires
Chapitre 6. Opérateur DNS dans OpenShift Container Platform
L'opérateur DNS déploie et gère CoreDNS pour fournir un service de résolution de noms aux pods, permettant la découverte de services Kubernetes basés sur le DNS dans OpenShift Container Platform.
6.1. Opérateur DNS
L'opérateur DNS met en œuvre l'API dns
du groupe d'API operator.openshift.io
. L'opérateur déploie CoreDNS à l'aide d'un ensemble de démons, crée un service pour l'ensemble de démons et configure le kubelet pour demander aux pods d'utiliser l'adresse IP du service CoreDNS pour la résolution de noms.
Procédure
L'opérateur DNS est déployé lors de l'installation avec un objet Deployment
.
Utilisez la commande
oc get
pour afficher l'état du déploiement :$ oc get -n openshift-dns-operator deployment/dns-operator
Exemple de sortie
NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23h
Utilisez la commande
oc get
pour afficher l'état de l'opérateur DNS :$ oc get clusteroperator/dns
Exemple de sortie
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE dns 4.1.0-0.11 True False False 92m
AVAILABLE
PROGRESSING
et fournissent des informations sur l'état de l'opérateur. est lorsqu'au moins un pod de l'ensemble de démons CoreDNS signale une condition d'état .DEGRADED
AVAILABLE
True
Available
6.2. Modification de l'état de gestion de l'opérateur DNS
DNS gère le composant CoreDNS afin de fournir un service de résolution de noms pour les pods et les services dans le cluster. L'adresse managementState
de l'opérateur DNS est définie par défaut sur Managed
, ce qui signifie que l'opérateur DNS gère activement ses ressources. Vous pouvez le changer en Unmanaged
, ce qui signifie que l'opérateur DNS ne gère pas ses ressources.
Les cas d'utilisation suivants concernent la modification de l'opérateur DNS managementState
:
-
Vous êtes un développeur et vous voulez tester un changement de configuration pour voir s'il corrige un problème dans CoreDNS. Vous pouvez empêcher l'opérateur DNS d'écraser le correctif en définissant
managementState
surUnmanaged
. -
Vous êtes un administrateur de cluster et vous avez signalé un problème avec CoreDNS, mais vous devez appliquer une solution de contournement jusqu'à ce que le problème soit résolu. Vous pouvez définir le champ
managementState
de l'opérateur DNS surUnmanaged
pour appliquer la solution de contournement.
Procédure
Changer
managementState
Opérateur DNS :oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
6.3. Contrôle du placement des pods DNS
L'opérateur DNS dispose de deux ensembles de démons : l'un pour CoreDNS et l'autre pour gérer le fichier /etc/hosts
. Le jeu de démons pour /etc/hosts
doit être exécuté sur chaque hôte de nœud afin d'ajouter une entrée au registre d'images de cluster pour prendre en charge l'extraction d'images. Les politiques de sécurité peuvent interdire la communication entre les paires de nœuds, ce qui empêche le jeu de démons pour CoreDNS de s'exécuter sur chaque nœud.
En tant qu'administrateur de cluster, vous pouvez utiliser un sélecteur de nœud personnalisé pour configurer le jeu de démons pour CoreDNS afin qu'il s'exécute ou non sur certains nœuds.
Conditions préalables
-
Vous avez installé le CLI
oc
. -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
cluster-admin
.
Procédure
Pour empêcher la communication entre certains nœuds, configurez le champ
spec.nodePlacement.nodeSelector
API :Modifier l'objet Opérateur DNS nommé
default
:$ oc edit dns.operator/default
Spécifiez un sélecteur de nœuds qui n'inclut que les nœuds du plan de contrôle dans le champ
spec.nodePlacement.nodeSelector
API :spec: nodePlacement: nodeSelector: node-role.kubernetes.io/worker: ""
Pour permettre au démon défini pour CoreDNS de fonctionner sur les nœuds, configurez une taint et une toleration :
Modifier l'objet Opérateur DNS nommé
default
:$ oc edit dns.operator/default
Spécifier une clé d'altération et une tolérance pour l'altération :
spec: nodePlacement: tolerations: - effect: NoExecute key: "dns-only" operators: Equal value: abc tolerationSeconds: 3600 1
- 1
- Si l'erreur est
dns-only
, elle peut être tolérée indéfiniment. Vous pouvez omettretolerationSeconds
.
6.4. Afficher le DNS par défaut
Chaque nouvelle installation d'OpenShift Container Platform possède un site dns.operator
nommé default
.
Procédure
Utilisez la commande
oc describe
pour afficher les paramètres par défautdns
:$ oc describe dns.operator/default
Exemple de sortie
Name: default Namespace: Labels: <none> Annotations: <none> API Version: operator.openshift.io/v1 Kind: DNS ... Status: Cluster Domain: cluster.local 1 Cluster IP: 172.30.0.10 2 ...
Pour connaître le CIDR de service de votre cluster, utilisez la commande
oc get
:$ oc get networks.config/cluster -o jsonpath='{$.status.serviceNetwork}'
Exemple de sortie
[172.30.0.0/16]
6.5. Utilisation de la redirection DNS
Vous pouvez utiliser la redirection DNS pour remplacer la configuration de la redirection par défaut dans le fichier /etc/resolv.conf
de la manière suivante :
- Spécifiez les serveurs de noms pour chaque zone. Si la zone transférée est le domaine Ingress géré par OpenShift Container Platform, le serveur de noms en amont doit être autorisé pour le domaine.
- Fournir une liste de serveurs DNS en amont.
- Modifier la politique de transfert par défaut.
Une configuration de transfert DNS pour le domaine par défaut peut comporter à la fois les serveurs par défaut spécifiés dans le fichier /etc/resolv.conf
et les serveurs DNS en amont.
Procédure
Modifier l'objet Opérateur DNS nommé
default
:$ oc edit dns.operator/default
Cela permet à l'opérateur de créer et de mettre à jour la carte de configuration nommée
dns-default
avec des blocs de configuration de serveur supplémentaires basés surServer
. Si aucun des serveurs ne dispose d'une zone correspondant à la requête, la résolution de noms revient aux serveurs DNS en amont.Configuration de la redirection DNS
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: servers: - name: example-server 1 zones: 2 - example.com forwardPlugin: policy: Random 3 upstreams: 4 - 1.1.1.1 - 2.2.2.2:5353 upstreamResolvers: 5 policy: Random 6 upstreams: 7 - type: SystemResolvConf 8 - type: Network address: 1.2.3.4 9 port: 53 10
- 1
- Doit être conforme à la syntaxe du nom de service
rfc6335
. - 2
- Doit être conforme à la définition d'un sous-domaine dans la syntaxe du nom de service
rfc1123
. Le domaine de cluster,cluster.local
, n'est pas un sous-domaine valide pour le champzones
. - 3
- Définit la politique de sélection des résolveurs en amont. La valeur par défaut est
Random
. Vous pouvez également utiliser les valeursRoundRobin
, etSequential
. - 4
- Un maximum de 15
upstreams
est autorisé parforwardPlugin
. - 5
- Facultatif. Vous pouvez l'utiliser pour remplacer la stratégie par défaut et transmettre la résolution DNS aux résolveurs DNS spécifiés (résolveurs en amont) pour le domaine par défaut. Si vous ne fournissez pas de résolveurs en amont, les requêtes de nom DNS sont envoyées aux serveurs situés à l'adresse
/etc/resolv.conf
. - 6
- Détermine l'ordre dans lequel les serveurs en amont sont sélectionnés pour l'interrogation. Vous pouvez spécifier l'une de ces valeurs :
Random
RoundRobin
, ouSequential
. La valeur par défaut estSequential
. - 7
- Facultatif. Vous pouvez l'utiliser pour fournir des résolveurs en amont.
- 8
- Vous pouvez spécifier deux types de
upstreams
-SystemResolvConf
etNetwork
.SystemResolvConf
configure l'amont pour utiliser/etc/resolv.conf
etNetwork
définit unNetworkresolver
. Vous pouvez spécifier l'un ou l'autre ou les deux. - 9
- Si le type spécifié est
Network
, vous devez fournir une adresse IP. Le champaddress
doit être une adresse IPv4 ou IPv6 valide. - 10
- Si le type spécifié est
Network
, vous pouvez éventuellement indiquer un port. Le champport
doit avoir une valeur comprise entre1
et65535
. Si vous ne spécifiez pas de port pour l'amont, le port 853 est utilisé par défaut.
Lorsque vous travaillez dans un environnement très réglementé, vous pouvez avoir besoin de sécuriser le trafic DNS lorsque vous transmettez des requêtes à des résolveurs en amont, afin de garantir un trafic DNS supplémentaire et la confidentialité des données. Les administrateurs de clusters peuvent configurer la sécurité de la couche transport (TLS) pour les requêtes DNS transmises.
Configuration du transfert DNS avec TLS
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: servers: - name: example-server 1 zones: 2 - example.com forwardPlugin: transportConfig: transport: TLS 3 tls: caBundle: name: mycacert serverName: dnstls.example.com 4 policy: Random 5 upstreams: 6 - 1.1.1.1 - 2.2.2.2:5353 upstreamResolvers: 7 transportConfig: transport: TLS tls: caBundle: name: mycacert serverName: dnstls.example.com upstreams: - type: Network 8 address: 1.2.3.4 9 port: 53 10
- 1
- Doit être conforme à la syntaxe du nom de service
rfc6335
. - 2
- Doit être conforme à la définition d'un sous-domaine dans la syntaxe du nom de service
rfc1123
. Le domaine de cluster,cluster.local
, n'est pas un sous-domaine valide pour le champzones
. Le domaine de cluster,cluster.local
, est unsubdomain
non valide pourzones
. - 3
- Lors de la configuration de TLS pour les requêtes DNS transférées, le champ
transport
doit avoir la valeurTLS
. Par défaut, CoreDNS met en cache les connexions transférées pendant 10 secondes. CoreDNS maintiendra une connexion TCP ouverte pendant ces 10 secondes si aucune requête n'est émise. Dans le cas de clusters importants, assurez-vous que votre serveur DNS est conscient du fait qu'il pourrait recevoir de nombreuses nouvelles connexions à maintenir ouvertes, car vous pouvez initier une connexion par nœud. Configurez votre hiérarchie DNS en conséquence pour éviter les problèmes de performance. - 4
- Lors de la configuration de TLS pour les requêtes DNS transmises, il s'agit d'un nom de serveur obligatoire utilisé dans le cadre de l'indication du nom du serveur (SNI) pour valider le certificat du serveur TLS en amont.
- 5
- Définit la politique de sélection des résolveurs en amont. La valeur par défaut est
Random
. Vous pouvez également utiliser les valeursRoundRobin
, etSequential
. - 6
- Il est obligatoire. Vous pouvez l'utiliser pour fournir des résolveurs en amont. Un maximum de 15 entrées
upstreams
est autorisé par entréeforwardPlugin
. - 7
- Facultatif. Vous pouvez l'utiliser pour remplacer la stratégie par défaut et transmettre la résolution DNS aux résolveurs DNS spécifiés (résolveurs en amont) pour le domaine par défaut. Si vous ne fournissez pas de résolveurs en amont, les requêtes de nom DNS sont envoyées aux serveurs situés à l'adresse
/etc/resolv.conf
. - 8
Network
indique que ce résolveur en amont doit traiter les demandes transférées séparément des résolveurs en amont répertoriés dans/etc/resolv.conf
. Seul le typeNetwork
est autorisé en cas d'utilisation de TLS et vous devez fournir une adresse IP.- 9
- Le champ
address
doit être une adresse IPv4 ou IPv6 valide. - 10
- Vous pouvez optionnellement fournir un port. La valeur de
port
doit être comprise entre1
et65535
. Si vous ne spécifiez pas de port pour l'amont, le port 853 est utilisé par défaut.
NoteSi
servers
est indéfini ou invalide, la carte de configuration ne contient que le serveur par défaut.Afficher la carte de configuration :
$ oc get configmap/dns-default -n openshift-dns -o yaml
Exemple de ConfigMap DNS basé sur l'exemple précédent de DNS
apiVersion: v1 data: Corefile: | example.com:5353 { forward . 1.1.1.1 2.2.2.2:5353 } bar.com:5353 example.com:5353 { forward . 3.3.3.3 4.4.4.4:5454 1 } .:5353 { errors health kubernetes cluster.local in-addr.arpa ip6.arpa { pods insecure upstream fallthrough in-addr.arpa ip6.arpa } prometheus :9153 forward . /etc/resolv.conf 1.2.3.4:53 { policy Random } cache 30 reload } kind: ConfigMap metadata: labels: dns.operator.openshift.io/owning-dns: default name: dns-default namespace: openshift-dns
- 1
- Les modifications apportées au site
forwardPlugin
déclenchent une mise à jour continue de l'ensemble des démons CoreDNS.
Ressources supplémentaires
- Pour plus d'informations sur la redirection DNS, voir la documentation CoreDNS forward.
6.6. Statut de l'opérateur DNS
Vous pouvez inspecter l'état et afficher les détails de l'opérateur DNS à l'aide de la commande oc describe
.
Procédure
Consulter l'état de l'opérateur DNS :
$ oc describe clusteroperators/dns
6.7. Journaux de l'opérateur DNS
Vous pouvez consulter les journaux de l'opérateur DNS à l'aide de la commande oc logs
.
Procédure
Consulter les journaux de l'opérateur DNS :
$ oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator
6.8. Configuration du niveau de journalisation de CoreDNS
Vous pouvez configurer le niveau du journal CoreDNS pour déterminer la quantité de détails dans les messages d'erreur enregistrés. Les valeurs valides pour le niveau de journalisation du CoreDNS sont Normal
, Debug
, et Trace
. La valeur par défaut logLevel
est Normal
.
Le plugin d'erreurs est toujours activé. Les paramètres suivants de logLevel
donnent lieu à des réponses d'erreur différentes :
-
logLevel
:Normal
active la classe "erreurs" :log . { class error }
. -
logLevel
:Debug
active la classe "denial" :log . { class denial error }
. -
logLevel
:Trace
active la classe "all" :log . { class all }
.
Procédure
Pour remplacer
logLevel
parDebug
, entrez la commande suivante :$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge
Pour remplacer
logLevel
parTrace
, entrez la commande suivante :$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge
Vérification
Pour s'assurer que le niveau de journalisation souhaité a été défini, vérifiez la carte de configuration :
$ oc get configmap/dns-default -n openshift-dns -o yaml
6.9. Configuration du niveau de journalisation de l'opérateur CoreDNS
Les administrateurs de clusters peuvent configurer le niveau de journal de l'opérateur afin de localiser plus rapidement les problèmes DNS d'OpenShift. Les valeurs valides pour operatorLogLevel
sont Normal
, Debug
, et Trace
. Trace
contient les informations les plus détaillées. La valeur par défaut de operatorlogLevel
est Normal
. Il existe sept niveaux de journalisation pour les problèmes : Trace, Debug, Info, Warning, Error, Fatal et Panic. Une fois le niveau de journalisation défini, les entrées de journal correspondant à ce niveau de gravité ou à un niveau supérieur seront enregistrées.
-
operatorLogLevel: "Normal"
setlogrus.SetLogLevel("Info")
. -
operatorLogLevel: "Debug"
setlogrus.SetLogLevel("Debug")
. -
operatorLogLevel: "Trace"
setlogrus.SetLogLevel("Trace")
.
Procédure
Pour remplacer
operatorLogLevel
parDebug
, entrez la commande suivante :$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge
Pour remplacer
operatorLogLevel
parTrace
, entrez la commande suivante :$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge
6.10. Optimisation du cache CoreDNS
Vous pouvez configurer la durée maximale de la mise en cache réussie ou non, également connue sous le nom de mise en cache positive ou négative, effectuée par CoreDNS. Le réglage de la durée de la mise en cache des réponses aux requêtes DNS peut réduire la charge des résolveurs DNS en amont.
Procédure
Modifiez l'objet Opérateur DNS nommé
default
en exécutant la commande suivante :$ oc edit dns.operator.openshift.io/default
Modifier les valeurs de mise en cache de la durée de vie (TTL) :
Configuration de la mise en cache DNS
apiVersion: operator.openshift.io/v1 kind: DNS metadata: name: default spec: cache: positiveTTL: 1h 1 negativeTTL: 0.5h10m 2
- 1
- La valeur de la chaîne
1h
est convertie en nombre de secondes par CoreDNS. Si ce champ est omis, la valeur est supposée être0s
et le cluster utilise la valeur interne par défaut de900s
comme solution de repli. - 2
- La valeur de la chaîne peut être une combinaison d'unités telles que
0.5h10m
et est convertie en nombre de secondes par CoreDNS. Si ce champ est omis, la valeur est supposée être0s
et le cluster utilise la valeur interne par défaut de30s
comme solution de repli.
AvertissementLa définition de champs TTL de faible valeur peut entraîner une augmentation de la charge sur le cluster, sur les résolveurs en amont, ou sur les deux.
Chapitre 7. Opérateur Ingress dans OpenShift Container Platform
7.1. Opérateur Ingress de la plateforme de conteneurs OpenShift
Lorsque vous créez votre cluster OpenShift Container Platform, les pods et les services s'exécutant sur le cluster se voient attribuer chacun leur propre adresse IP. Les adresses IP sont accessibles aux autres pods et services fonctionnant à proximité, mais ne sont pas accessibles aux clients extérieurs. L'opérateur d'ingestion (Ingress Operator) met en œuvre l'API IngressController
et est le composant responsable de l'activation de l'accès externe aux services de cluster d'OpenShift Container Platform.
L'opérateur d'ingestion permet aux clients externes d'accéder à votre service en déployant et en gérant un ou plusieurs contrôleurs d'ingestion basés sur HAProxy pour gérer le routage. Vous pouvez utiliser l'opérateur d'ingestion pour acheminer le trafic en spécifiant les ressources OpenShift Container Platform Route
et Kubernetes Ingress
. Les configurations au sein du contrôleur d'ingestion, telles que la possibilité de définir le type endpointPublishingStrategy
et l'équilibrage de charge interne, fournissent des moyens de publier les points d'extrémité du contrôleur d'ingestion.
7.2. L'actif de configuration Ingress
Le programme d'installation génère un bien avec une ressource Ingress
dans le groupe API config.openshift.io
, cluster-ingress-02-config.yml
.
Définition YAML de la ressource Ingress
apiVersion: config.openshift.io/v1 kind: Ingress metadata: name: cluster spec: domain: apps.openshiftdemos.com
Le programme d'installation stocke cette ressource dans le fichier cluster-ingress-02-config.yml
du répertoire manifests/
. Cette ressource Ingress
définit la configuration de l'ensemble du cluster pour Ingress. Cette configuration d'Ingress est utilisée comme suit :
- L'opérateur d'entrée utilise le domaine de la configuration d'entrée du cluster comme domaine pour le contrôleur d'entrée par défaut.
-
L'opérateur OpenShift API Server utilise le domaine de la configuration Ingress du cluster. 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 d'hôte explicite.
7.3. Paramètres de configuration du contrôleur d'entrée
La ressource ingresscontrollers.operator.openshift.io
offre les paramètres de configuration suivants.
Paramètres | Description |
---|---|
|
La valeur
S'il est vide, la valeur par défaut est |
|
|
|
Sur GCP, AWS et Azure, vous pouvez configurer les champs
Si elle n'est pas définie, la valeur par défaut est basée sur
Pour la plupart des plateformes, la valeur
|
|
La valeur
The secret must contain the following keys and data: *
S'il n'est pas défini, un certificat générique est automatiquement généré et utilisé. Le certificat est valable pour le contrôleur d'entrée Le certificat en cours d'utilisation, qu'il soit généré ou spécifié par l'utilisateur, est automatiquement intégré au serveur OAuth intégré à OpenShift Container Platform. |
|
|
|
|
|
Si ce n'est pas le cas, les valeurs par défaut sont utilisées. Note
Le paramètre nodePlacement: nodeSelector: matchLabels: kubernetes.io/os: linux tolerations: - effect: NoSchedule operator: Exists |
|
Si elle n'est pas définie, la valeur par défaut est basée sur la ressource
Lors de l'utilisation des types de profil
La version TLS minimale pour les contrôleurs d'entrée est Note
Les codes et la version TLS minimale du profil de sécurité configuré sont reflétés dans l'état Important
L'opérateur d'entrée convertit le TLS |
|
Le sous-champ |
|
|
|
|
|
En définissant
Par défaut, la politique est définie sur
En définissant Ces ajustements ne s'appliquent qu'aux itinéraires en clair, terminés par les bords et recryptés, et uniquement lors de l'utilisation du protocole HTTP/1.
Pour les en-têtes de requête, ces ajustements ne sont appliqués qu'aux itinéraires qui ont l'annotation |
|
|
|
|
|
Pour tout cookie que vous souhaitez capturer, les paramètres suivants doivent figurer dans votre configuration
Par exemple : httpCaptureCookies: - matchType: Exact maxLength: 128 name: MYCOOKIE |
|
httpCaptureHeaders: request: - maxLength: 256 name: Connection - maxLength: 128 name: User-Agent response: - maxLength: 256 name: Content-Type - maxLength: 256 name: Content-Length |
|
|
|
Le type
|
|
Le type
Ces connexions proviennent de sondes de santé d'équilibreurs de charge ou de connexions spéculatives de navigateurs web (préconnexion) et peuvent être ignorées sans risque. Cependant, ces demandes peuvent être causées par des erreurs de réseau, de sorte que la définition de ce champ à |
Tous les paramètres sont facultatifs.
7.3.1. Profils de sécurité TLS du contrôleur d'entrée
Les profils de sécurité TLS permettent aux serveurs de déterminer les algorithmes de chiffrement qu'un client peut utiliser lorsqu'il se connecte au serveur.
7.3.1.1. Comprendre les profils de sécurité TLS
Vous pouvez utiliser un profil de sécurité TLS (Transport Layer Security) pour définir les algorithmes TLS requis par les différents composants d'OpenShift Container Platform. Les profils de sécurité TLS d'OpenShift Container Platform sont basés sur les configurations recommandées par Mozilla.
Vous pouvez spécifier l'un des profils de sécurité TLS suivants pour chaque composant :
Tableau 7.1. Profils de sécurité TLS
Profile | Description |
---|---|
| Ce profil est destiné à être utilisé avec des clients ou des bibliothèques anciens. Il est basé sur l'ancienne configuration recommandée pour la rétrocompatibilité.
Le profil Note Pour le contrôleur d'entrée, la version minimale de TLS passe de 1.0 à 1.1. |
| Ce profil est la configuration recommandée pour la majorité des clients. Il s'agit du profil de sécurité TLS par défaut pour le contrôleur d'entrée, le kubelet et le plan de contrôle. Le profil est basé sur la configuration recommandée pour la compatibilité intermédiaire.
Le profil |
| Ce profil est destiné à être utilisé avec des clients modernes qui n'ont pas besoin de rétrocompatibilité. Ce profil est basé sur la configuration recommandée pour la compatibilité moderne.
Le profil |
| Ce profil permet de définir la version de TLS et les algorithmes de chiffrement à utiliser. Avertissement
Soyez prudent lorsque vous utilisez un profil |
Lorsque l'on utilise l'un des types de profil prédéfinis, la configuration effective du profil est susceptible d'être modifiée entre les versions. Par exemple, si l'on spécifie l'utilisation du profil intermédiaire déployé dans la version X.Y.Z, une mise à niveau vers la version X.Y.Z 1 peut entraîner l'application d'une nouvelle configuration de profil, ce qui se traduit par un déploiement.
7.3.1.2. Configuration du profil de sécurité TLS pour le contrôleur d'entrée
Pour configurer un profil de sécurité TLS pour un contrôleur d'entrée, modifiez la ressource personnalisée (CR) IngressController
afin de spécifier un profil de sécurité TLS prédéfini ou personnalisé. Si aucun profil de sécurité TLS n'est configuré, la valeur par défaut est basée sur le profil de sécurité TLS défini pour le serveur API.
Exemple de CR IngressController
qui configure le profil de sécurité TLS Old
apiVersion: operator.openshift.io/v1 kind: IngressController ... spec: tlsSecurityProfile: old: {} type: Old ...
Le profil de sécurité TLS définit la version minimale de TLS et les algorithmes de chiffrement TLS pour les connexions TLS des contrôleurs d'entrée.
Les chiffres et la version TLS minimale du profil de sécurité TLS configuré sont indiqués dans la ressource personnalisée (CR) IngressController
sous Status.Tls Profile
et dans le profil de sécurité TLS configuré sous Spec.Tls Security Profile
. Pour le profil de sécurité TLS Custom
, les algorithmes de chiffrement spécifiques et la version TLS minimale sont répertoriés sous les deux paramètres.
L'image du contrôleur d'entrée HAProxy prend en charge TLS 1.3
et le profil Modern
.
L'opérateur d'entrée convertit également le TLS 1.0
d'un profil Old
ou Custom
en 1.1
.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
.
Procédure
Modifiez le CR
IngressController
dans le projetopenshift-ingress-operator
pour configurer le profil de sécurité TLS :$ oc edit IngressController default -n openshift-ingress-operator
Ajouter le champ
spec.tlsSecurityProfile
:Exemple de CR
IngressController
pour un profilCustom
apiVersion: operator.openshift.io/v1 kind: IngressController ... spec: tlsSecurityProfile: type: Custom 1 custom: 2 ciphers: 3 - ECDHE-ECDSA-CHACHA20-POLY1305 - ECDHE-RSA-CHACHA20-POLY1305 - ECDHE-RSA-AES128-GCM-SHA256 - ECDHE-ECDSA-AES128-GCM-SHA256 minTLSVersion: VersionTLS11 ...
- 1
- Spécifiez le type de profil de sécurité TLS (
Old
,Intermediate
, ouCustom
). La valeur par défaut estIntermediate
. - 2
- Spécifiez le champ approprié pour le type sélectionné :
-
old: {}
-
intermediate: {}
-
custom:
-
- 3
- Pour le type
custom
, spécifiez une liste de chiffrements TLS et la version TLS minimale acceptée.
- Enregistrez le fichier pour appliquer les modifications.
Vérification
Vérifiez que le profil est défini dans le CR
IngressController
:$ oc describe IngressController default -n openshift-ingress-operator
Exemple de sortie
Name: default Namespace: openshift-ingress-operator Labels: <none> Annotations: <none> API Version: operator.openshift.io/v1 Kind: IngressController ... Spec: ... Tls Security Profile: Custom: Ciphers: ECDHE-ECDSA-CHACHA20-POLY1305 ECDHE-RSA-CHACHA20-POLY1305 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-ECDSA-AES128-GCM-SHA256 Min TLS Version: VersionTLS11 Type: Custom ...
7.3.1.3. Configuration de l'authentification mutuelle TLS
Vous pouvez configurer le contrôleur d'entrée pour activer l'authentification mutuelle TLS (mTLS) en définissant une valeur spec.clientTLS
. La valeur clientTLS
configure le contrôleur d'entrée pour qu'il vérifie les certificats des clients. Cette configuration comprend 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é PEM utilisé pour vérifier le certificat d'un client. En option, vous pouvez configurer une liste de filtres de sujet de certificat.
Si la valeur clientCA
indique un point de distribution de liste de révocation de certificats (CRL) X509v3, l'opérateur d'entrée télécharge la CRL et configure le contrôleur d'entrée pour qu'il en prenne acte. Les demandes qui ne fournissent pas de certificats valides sont rejetées.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
.
Procédure
Créer une carte de configuration dans l'espace de noms
openshift-config
:$ oc create configmap router-ca-certs-default --from-file=ca-bundle.pem=client-ca.crt -n openshift-config
NoteLa clé de données de la carte de configuration doit être
ca-bundle.pem
, et la valeur des données doit être un certificat d'autorité de certification au format PEM.Modifiez la ressource
IngressController
dans le projetopenshift-ingress-operator
:$ oc edit IngressController default -n openshift-ingress-operator
Ajoutez le champ spec.clientTLS et ses sous-champs pour configurer le TLS mutuel :
Exemple de CR
IngressController
pour un profilclientTLS
qui spécifie des modèles de filtrageapiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: clientTLS: clientCertificatePolicy: Required clientCA: name: router-ca-certs-default allowedSubjectPatterns: - "^/CN=example.com/ST=NC/C=US/O=Security/OU=OpenShift$"
7.4. Afficher le contrôleur d'entrée par défaut
L'opérateur d'ingestion est une fonctionnalité essentielle d'OpenShift Container Platform et est activé d'emblée.
Chaque nouvelle installation d'OpenShift Container Platform a un ingresscontroller
nommé default. Il peut être complété par des contrôleurs d'ingestion supplémentaires. Si l'adresse ingresscontroller
par défaut est supprimée, l'opérateur d'ingestion la recréera automatiquement dans la minute qui suit.
Procédure
Affichez le contrôleur d'entrée par défaut :
$ oc describe --namespace=openshift-ingress-operator ingresscontroller/default
7.5. Visualiser l'état de l'opérateur d'entrée
Vous pouvez visualiser et contrôler l'état de votre opérateur d'entrée.
Procédure
Consultez votre statut d'opérateur d'entrée :
$ oc describe clusteroperators/ingress
7.6. Consulter les journaux du contrôleur d'entrée
Vous pouvez consulter les journaux du contrôleur d'ingérence.
Procédure
Consultez les journaux du contrôleur d'ingérence :
oc logs --namespace=openshift-ingress-operator deployments/ingress-operator -c <container_name>
7.7. Afficher l'état du contrôleur d'entrée
Vous pouvez consulter l'état d'un contrôleur d'entrée particulier.
Procédure
Consulter l'état d'un contrôleur d'entrée :
oc describe --namespace=openshift-ingress-operator ingresscontroller/<name> $ oc describe --namespace=openshift-ingress-operator ingresscontroller/<name>
7.8. Configuration du contrôleur d'entrée
7.8.1. Définition d'un certificat personnalisé par défaut
En tant qu'administrateur, vous pouvez configurer un contrôleur d'entrée pour qu'il utilise un certificat personnalisé en créant une ressource Secret et en modifiant la ressource personnalisée (CR) IngressController
.
Conditions préalables
- Vous devez disposer d'une paire certificat/clé dans des fichiers codés PEM, où le certificat est signé par une autorité de certification de confiance ou par une autorité de certification de confiance privée que vous avez configurée dans une infrastructure de clés publiques (PKI) personnalisée.
Votre 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 de remplacement, tel que*.apps.ocp4.example.com
.
Vous devez avoir un CR
IngressController
. Vous pouvez utiliser le CR par défaut :$ oc --namespace openshift-ingress-operator get ingresscontrollers
Exemple de sortie
NAME AGE default 10m
Si vous avez des certificats intermédiaires, ils doivent être inclus dans le fichier tls.crt
du secret contenant un certificat par défaut personnalisé. L'ordre est important lors de la spécification d'un certificat ; indiquez votre (vos) certificat(s) intermédiaire(s) après le(s) certificat(s) de serveur.
Procédure
Ce qui suit suppose que le certificat personnalisé et la paire de clés se trouvent dans les fichiers tls.crt
et tls.key
dans le répertoire de travail actuel. Remplacez les noms de chemin réels par tls.crt
et tls.key
. Vous pouvez également remplacer custom-certs-default
par un autre nom lorsque vous créez la ressource Secret et que vous y faites référence dans le CR IngressController.
Cette action entraînera le redéploiement du contrôleur d'entrée, à l'aide d'une stratégie de déploiement continu.
Créez une ressource Secret contenant le certificat personnalisé dans l'espace de noms
openshift-ingress
à l'aide des fichierstls.crt
ettls.key
.$ oc --namespace openshift-ingress create secret tls custom-certs-default --cert=tls.crt --key=tls.key
Mettre à jour la CR du contrôleur d'ingestion pour qu'elle fasse référence au nouveau secret du certificat :
$ oc patch --type=merge --namespace openshift-ingress-operator ingresscontrollers/default \ --patch '{"spec":{"defaultCertificate":{"name":"custom-certs-default"}}}'
Vérifier que la mise à jour a été effective :
$ echo Q |\ openssl s_client -connect console-openshift-console.apps.<domain>:443 -showcerts 2>/dev/null |\ openssl x509 -noout -subject -issuer -enddate
où :
<domain>
- Spécifie le nom de domaine de base pour 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
AstuceVous pouvez également appliquer le code YAML suivant pour définir un certificat par défaut personnalisé :
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: defaultCertificate: name: custom-certs-default
Le nom du secret du certificat doit correspondre à la valeur utilisée pour mettre à jour le CR.
Une fois que le CR du contrôleur d'ingestion a été modifié, l'opérateur d'ingestion met à jour le déploiement du contrôleur d'ingestion afin d'utiliser le certificat personnalisé.
7.8.2. Suppression d'un certificat personnalisé par défaut
En tant qu'administrateur, vous pouvez supprimer un certificat personnalisé pour lequel vous avez configuré un contrôleur d'entrée.
Conditions préalables
-
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
. -
Vous avez installé l'OpenShift CLI (
oc
). - Vous avez précédemment configuré un certificat par défaut personnalisé pour le contrôleur d'entrée.
Procédure
Pour supprimer le certificat personnalisé et restaurer le certificat fourni avec OpenShift Container Platform, entrez la commande suivante :
$ oc patch -n openshift-ingress-operator ingresscontrollers/default \ --type json -p $'- op: remove\n path: /spec/defaultCertificate'
Il peut y avoir un délai pendant que le cluster réconcilie la nouvelle configuration du certificat.
Vérification
Pour confirmer que le certificat original du cluster 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
où :
<domain>
- Spécifie le nom de domaine de base pour votre cluster.
Exemple de sortie
subject=CN = *.apps.<domain> issuer=CN = ingress-operator@1620633373 notAfter=May 10 10:44:36 2023 GMT
7.8.3. Mise à l'échelle automatique d'un contrôleur d'entrée
Mettre automatiquement à l'échelle un contrôleur d'entrée pour répondre dynamiquement aux exigences de performance ou de disponibilité du routage, telles que l'exigence d'augmenter le débit. La procédure suivante fournit un exemple de mise à l'échelle du contrôleur par défaut IngressController
.
Le Custom Metrics Autoscaler est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir un retour d'information pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
Conditions préalables
-
Vous avez installé l'OpenShift CLI (
oc
). -
Vous avez accès à un cluster OpenShift Container Platform en tant qu'utilisateur ayant le rôle
cluster-admin
. - L'opérateur Custom Metrics Autoscaler est installé.
Procédure
Créez un projet dans l'espace de noms
openshift-ingress-operator
en exécutant la commande suivante :$ oc project openshift-ingress-operator
Activer la surveillance d'OpenShift pour des projets définis par l'utilisateur en créant et en appliquant une carte de configuration :
Créez un nouvel objet
ConfigMap
,cluster-monitoring-config.yaml
:cluster-monitoring-config.yaml
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: true 1
- 1
- Lorsqu'il est défini sur
true
, le paramètreenableUserWorkload
permet la surveillance de projets définis par l'utilisateur dans un cluster.
Appliquez la carte de configuration en exécutant la commande suivante :
$ oc apply -f cluster-monitoring-config.yaml
Créez un compte de service pour vous authentifier auprès de Thanos en exécutant la commande suivante :
$ oc create serviceaccount thanos && oc describe serviceaccount thanos
Exemple de sortie
Name: thanos Namespace: openshift-ingress-operator Labels: <none> Annotations: <none> Image pull secrets: thanos-dockercfg-b4l9s Mountable secrets: thanos-dockercfg-b4l9s Tokens: thanos-token-c422q Events: <none>
Définir un objet
TriggerAuthentication
dans l'espace de nomsopenshift-ingress-operator
en utilisant le jeton du compte de service.Définissez la variable
secret
qui contient le secret en exécutant la commande suivante :$ secret=$(oc get secret | grep thanos-token | head -n 1 | awk '{ print $1 }')
Créez l'objet
TriggerAuthentication
et transmettez la valeur de la variablesecret
au paramètreTOKEN
:$ oc process TOKEN="$secret" -f - <<EOF | oc apply -f - apiVersion: template.openshift.io/v1 kind: Template parameters: - name: TOKEN objects: - apiVersion: keda.sh/v1alpha1 kind: TriggerAuthentication metadata: name: keda-trigger-auth-prometheus spec: secretTargetRef: - parameter: bearerToken name: \${TOKEN} key: token - parameter: ca name: \${TOKEN} key: ca.crt EOF
Créer et appliquer un rôle pour la lecture des métriques de Thanos :
Créez un nouveau rôle,
thanos-metrics-reader.yaml
, qui lit les métriques des pods et des nœuds :thanos-metrics-reader.yaml
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: name: thanos-metrics-reader rules: - apiGroups: - "" resources: - pods - nodes verbs: - get - apiGroups: - metrics.k8s.io resources: - pods - nodes verbs: - get - list - watch - apiGroups: - "" resources: - namespaces verbs: - get
Appliquez le nouveau rôle en exécutant la commande suivante :
$ oc apply -f thanos-metrics-reader.yaml
Ajoutez le nouveau rôle au compte de service en entrant les commandes suivantes :
$ oc adm policy add-role-to-user thanos-metrics-reader -z thanos --role=namespace=openshift-ingress-operator
$ oc adm policy -n openshift-ingress-operator add-cluster-role-to-user cluster-monitoring-view -z thanos
NoteL'argument
add-cluster-role-to-user
n'est requis que si vous utilisez des requêtes inter-espaces de noms. L'étape suivante utilise une requête de l'espace de nomskube-metrics
qui nécessite cet argument.Créez un nouveau fichier YAML
ScaledObject
,ingress-autoscaler.yaml
, qui cible le déploiement du contrôleur d'ingestion par défaut :Exemple
ScaledObject
définitionapiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: name: ingress-scaler spec: scaleTargetRef: 1 apiVersion: operator.openshift.io/v1 kind: IngressController name: default envSourceContainerName: ingress-operator minReplicaCount: 1 maxReplicaCount: 20 2 cooldownPeriod: 1 pollingInterval: 1 triggers: - type: prometheus metricType: AverageValue metadata: serverAddress: https://<example-cluster>:9091 3 namespace: openshift-ingress-operator 4 metricName: 'kube-node-role' threshold: '1' query: 'sum(kube_node_role{role="worker",service="kube-state-metrics"})' 5 authModes: "bearer" authenticationRef: name: keda-trigger-auth-prometheus
- 1
- La ressource personnalisée que vous ciblez. Dans ce cas, il s'agit du contrôleur Ingress.
- 2
- Facultatif : Le nombre maximal de répliques. Si vous omettez ce champ, le maximum par défaut est fixé à 100 répliques.
- 3
- L'adresse et le port du cluster.
- 4
- L'espace de noms de l'opérateur d'entrée.
- 5
- Cette expression correspond au nombre de nœuds de travail présents dans la grappe déployée.
ImportantSi vous utilisez des requêtes inter-espace, vous devez cibler le port 9091 et non le port 9092 dans le champ
serverAddress
. Vous devez également disposer de 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
Vérification
Vérifiez que le contrôleur d'entrée par défaut est mis à l'échelle pour correspondre à la valeur renvoyée par la requête
kube-state-metrics
en exécutant les commandes suivantes :Utilisez la commande
grep
pour rechercher des répliques dans le fichier YAML du contrôleur d'entrée :$ oc get ingresscontroller/default -o yaml | grep replicas:
Exemple de sortie
replicas: 3
Obtenir les pods dans le projet
openshift-ingress
:$ oc get pods -n openshift-ingress
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
Ressources supplémentaires
- Permettre le suivi de projets définis par l'utilisateur
- Installation de l'autoscaler de métriques personnalisé
- Comprendre les métriques personnalisées Autoscaler trigger authentications
- Configurer l'autoscaler de métriques personnalisé pour utiliser la surveillance de OpenShift Container Platform
- Comprendre comment ajouter des autoscalers de métriques personnalisés
7.8.4. Mise à l'échelle d'un contrôleur d'entrée
Mettre à l'échelle manuellement un contrôleur d'entrée 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 de mise à l'échelle de la ressource par défaut IngressController
.
La mise à l'échelle n'est pas une action immédiate, car il faut du temps pour créer le nombre souhaité de répliques.
Procédure
Affichez le nombre actuel de répliques disponibles pour le site par défaut
IngressController
:$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
Exemple de sortie
2
Adaptez la version par défaut
IngressController
au nombre de répliques souhaité à l'aide de la commandeoc patch
. L'exemple suivant met à l'échelle le serveur par défautIngressController
avec 3 réplicas :$ oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"replicas": 3}}' --type=merge
Exemple de sortie
ingresscontroller.operator.openshift.io/default patched
Vérifiez que la valeur par défaut de
IngressController
est adaptée au nombre de répliques que vous avez spécifié :$ oc get -n openshift-ingress-operator ingresscontrollers/default -o jsonpath='{$.status.availableReplicas}'
Exemple de sortie
3
AstuceVous pouvez également appliquer le fichier YAML suivant pour adapter un contrôleur d'ingestion à trois répliques :
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: replicas: 3 1
- 1
- Si vous avez besoin d'un nombre différent de répliques, modifiez la valeur de
replicas
.
7.8.5. Configuration de la journalisation des accès d'entrée
Vous pouvez configurer le contrôleur d'entrée pour activer les journaux d'accès. Si vous avez des clusters qui ne reçoivent pas beaucoup de trafic, vous pouvez enregistrer les logs dans un sidecar. Si vous avez des clusters à fort trafic, pour éviter de dépasser la capacité de la pile de journalisation ou pour intégrer une infrastructure de journalisation en dehors d'OpenShift Container Platform, vous pouvez transmettre les journaux à un point d'extrémité syslog personnalisé. Vous pouvez également spécifier le format des journaux d'accès.
La journalisation 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 de problèmes avec le contrôleur d'entrée.
Syslog est nécessaire pour les clusters à fort trafic où les logs d'accès pourraient dépasser la capacité de la pile OpenShift Logging, ou pour les environnements où toute solution de logging doit s'intégrer à une infrastructure de logging Syslog existante. Les cas d'utilisation de Syslog peuvent se chevaucher.
Conditions préalables
-
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
.
Procédure
Configurer l'enregistrement des accès entrants à un sidecar.
Pour configurer la journalisation des accès entrants, vous devez spécifier une destination à l'aide de
spec.logging.access.destination
. Pour spécifier la journalisation vers un conteneur sidecar, vous devez spécifierContainer
spec.logging.access.destination.type
. L'exemple suivant est une définition de contrôleur d'entrée qui enregistre vers une destinationContainer
:apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: replicas: 2 logging: access: destination: type: Container
Lorsque vous configurez le contrôleur d'entrée pour qu'il se connecte à un sidecar, l'opérateur crée un conteneur nommé
logs
dans le pod du contrôleur d'entrée :$ oc -n openshift-ingress logs deployment.apps/router-default -c logs
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"
Configurer la journalisation de l'accès à l'entrée vers un point de terminaison Syslog.
Pour configurer la journalisation des accès d'entrée, vous devez spécifier une destination à l'aide de
spec.logging.access.destination
. Pour spécifier la journalisation vers un point de terminaison Syslog, vous devez spécifierSyslog
pourspec.logging.access.destination.type
. Si le type de destination estSyslog
, vous devez également spécifier un point d'extrémité de destination à l'aide despec.logging.access.destination.syslog.endpoint
et vous pouvez spécifier une installation à l'aide despec.logging.access.destination.syslog.facility
. L'exemple suivant est une définition de contrôleur d'entrée qui enregistre vers une destinationSyslog
:apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: replicas: 2 logging: access: destination: type: Syslog syslog: address: 1.2.3.4 port: 10514
NoteLe port de destination de
syslog
doit être UDP.
Configurer l'enregistrement des accès d'entrée avec un format d'enregistrement spécifique.
Vous pouvez spécifier
spec.logging.access.httpLogFormat
pour personnaliser le format du journal. L'exemple suivant est une définition de contrôleur d'entrée qui enregistre sur un point d'extrémitésyslog
avec l'adresse IP 1.2.3.4 et le port 10514 :apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: replicas: 2 logging: access: destination: type: Syslog syslog: address: 1.2.3.4 port: 10514 httpLogFormat: '%ci:%cp [%t] %ft %b/%s %B %bq %HM %HU %HV'
Désactiver la journalisation des accès entrants.
Pour désactiver la journalisation des accès entrants, laissez
spec.logging
ouspec.logging.access
vide :apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: replicas: 2 logging: access: null
7.8.6. Réglage du nombre de fils du contrôleur d'ingérence
Un administrateur de cluster peut définir le nombre de threads afin d'augmenter le nombre de connexions entrantes qu'un cluster peut gérer. Vous pouvez corriger un contrôleur d'entrée existant pour augmenter le nombre de threads.
Conditions préalables
- La procédure suivante suppose que vous avez déjà créé un contrôleur d'entrée.
Procédure
Mettre à jour le contrôleur d'entrée pour augmenter le nombre de threads :
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"threadCount": 8}}}'
NoteSi vous disposez d'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 configurerspec.tuningOptions.threadCount
avec une valeur élevée appropriée.
7.8.7. Configuration d'un contrôleur d'entrée pour utiliser un équilibreur de charge interne
Lors de la création d'un contrôleur d'ingestion sur des plateformes en nuage, le contrôleur d'ingestion est publié par un équilibreur de charge en nuage public par défaut. En tant qu'administrateur, vous pouvez créer un contrôleur d'entrée qui utilise un équilibreur de charge interne au nuage.
Si votre fournisseur de cloud est Microsoft Azure, vous devez avoir au moins un équilibreur de charge public qui pointe vers vos nœuds. Si ce n'est pas le cas, tous vos nœuds perdront la connectivité de sortie vers l'internet.
Si vous souhaitez modifier le paramètre scope
pour une ressource IngressController
, vous pouvez modifier le paramètre .spec.endpointPublishingStrategy.loadBalancer.scope
après la création de la ressource personnalisée (CR).
Figure 7.1. Diagramme de LoadBalancer

Le graphique précédent illustre les concepts suivants relatifs à la stratégie de publication des points d'extrémité de OpenShift Container Platform Ingress LoadBalancerService :
- Vous pouvez équilibrer la charge en externe, en utilisant l'équilibreur de charge du fournisseur de cloud, ou en interne, en utilisant l'équilibreur de charge du contrôleur d'ingestion OpenShift.
- Vous pouvez utiliser l'adresse IP unique de l'équilibreur de charge et des ports plus familiers, tels que 8080 et 4200, comme le montre le cluster illustré dans le graphique.
- Le trafic provenant de l'équilibreur de charge externe est dirigé vers les pods et géré par l'équilibreur de charge, comme le montre l'instance d'un nœud en panne. Voir la documentation de Kubernetes Services pour plus de détails sur la mise en œuvre.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
.
Procédure
Créez une ressource personnalisée (CR)
IngressController
dans un fichier nommé<name>-ingress-controller.yaml
, comme dans l'exemple suivant :apiVersion: operator.openshift.io/v1 kind: IngressController metadata: namespace: openshift-ingress-operator name: <name> 1 spec: domain: <domain> 2 endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: Internal 3
Créez le contrôleur d'entrée défini à l'étape précédente en exécutant la commande suivante :
oc create -f <name>-ingress-controller.yaml 1
- 1
- Remplacez
<name>
par le nom de l'objetIngressController
.
Facultatif : Confirmez que le contrôleur d'entrée a été créé en exécutant la commande suivante :
$ oc --all-namespaces=true get ingresscontrollers
7.8.8. Configuration de l'accès global pour un contrôleur d'entrée sur GCP
Un contrôleur d'entrée créé sur GCP avec un équilibreur de charge interne génère une adresse IP interne pour le service. Un administrateur de cluster peut spécifier l'option d'accès global, qui permet aux clients de n'importe quelle région du même réseau VPC et de la même région de calcul que l'équilibreur de charge, d'atteindre les charges de travail exécutées sur votre cluster.
Pour plus d'informations, voir la documentation GCP pour l'accès global.
Conditions préalables
- Vous avez déployé un cluster OpenShift Container Platform sur une infrastructure GCP.
- Vous avez configuré un contrôleur d'entrée pour utiliser un équilibreur de charge interne.
-
You installed the OpenShift CLI (
oc
).
Procédure
Configurez la ressource Ingress Controller pour autoriser l'accès global.
NoteVous pouvez également créer un contrôleur d'entrée et spécifier l'option d'accès global.
Configurer la ressource Ingress Controller :
$ oc -n openshift-ingress-operator edit ingresscontroller/default
Modifiez le fichier YAML :
Sample
clientAccess
configuration toGlobal
spec: endpointPublishingStrategy: loadBalancer: providerParameters: gcp: clientAccess: Global 1 type: GCP scope: Internal type: LoadBalancerService
- 1
- Set
gcp.clientAccess
toGlobal
.
- Enregistrez le fichier pour appliquer les modifications.
Exécutez la commande suivante pour vérifier que le service autorise l'accès global :
$ oc -n openshift-ingress edit svc/router-default -o yaml
La sortie montre que l'accès global est activé pour GCP avec l'annotation
networking.gke.io/internal-load-balancer-allow-global-access
.
7.8.9. Définition de l'intervalle de contrôle de santé du contrôleur d'entrée
L'administrateur d'un cluster peut définir l'intervalle de contrôle de santé afin de déterminer la durée d'attente du routeur entre deux contrôles de santé consécutifs. Cette valeur est appliquée globalement par défaut à toutes les routes. La valeur par défaut est de 5 secondes.
Conditions préalables
- La procédure suivante suppose que vous avez déjà créé un contrôleur d'entrée.
Procédure
Mettre à jour le contrôleur d'entrée afin de modifier l'intervalle entre les contrôles de santé du back-end :
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"healthCheckInterval": "8s"}}}'
NotePour remplacer le site
healthCheckInterval
pour un seul itinéraire, utilisez l'annotation d'itinérairerouter.openshift.io/haproxy.health.check.interval
7.8.10. Configurer le contrôleur d'entrée par défaut de votre cluster pour qu'il soit interne
Vous pouvez configurer le contrôleur d'entrée default
de votre cluster pour qu'il soit interne en le supprimant et en le recréant.
Si votre fournisseur de cloud est Microsoft Azure, vous devez avoir au moins un équilibreur de charge public qui pointe vers vos nœuds. Si ce n'est pas le cas, tous vos nœuds perdront la connectivité de sortie vers l'internet.
Si vous souhaitez modifier le paramètre scope
pour une ressource 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 CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
.
Procédure
Configurez le contrôleur d'entrée
default
de votre cluster pour qu'il soit interne en le supprimant et en le recréant.$ oc replace --force --wait --filename - <<EOF apiVersion: operator.openshift.io/v1 kind: IngressController metadata: namespace: openshift-ingress-operator name: default spec: endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: Internal EOF
7.8.11. Configuration de la politique d'admission des routes
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. Cela s'adresse aux organisations où plusieurs équipes développent des microservices qui sont exposés sur le même nom d'hôte.
L'autorisation des revendications à travers les espaces de noms ne devrait être activée que pour les clusters avec confiance entre les espaces de noms, sinon un utilisateur malveillant pourrait prendre le contrôle d'un nom d'hôte. Pour cette raison, la politique d'admission par défaut interdit les demandes de noms d'hôtes entre espaces de noms.
Conditions préalables
- Privilèges d'administrateur de cluster.
Procédure
Modifiez le champ
.spec.routeAdmission
de la variable de ressourceingresscontroller
à l'aide de la commande suivante :$ oc -n openshift-ingress-operator patch ingresscontroller/default --patch '{"spec":{"routeAdmission":{"namespaceOwnership":"InterNamespaceAllowed"}}}' --type=merge
Exemple de configuration du contrôleur d'entrée
spec: routeAdmission: namespaceOwnership: InterNamespaceAllowed ...
AstuceVous pouvez également appliquer le langage YAML suivant pour configurer la politique d'admission des routes :
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: routeAdmission: namespaceOwnership: InterNamespaceAllowed
7.8.12. Utilisation d'itinéraires génériques
Le contrôleur d'entrée HAProxy prend en charge les itinéraires génériques. L'opérateur d'entrée utilise wildcardPolicy
pour configurer la variable d'environnement ROUTER_ALLOW_WILDCARD_ROUTES
du contrôleur d'entrée.
Le comportement par défaut du contrôleur d'entrée est d'admettre les itinéraires avec une politique de caractères génériques de None
, ce qui est rétrocompatible avec les ressources IngressController
existantes.
Procédure
Configurer la politique des caractères génériques.
Utilisez la commande suivante pour modifier la ressource
IngressController
:$ oc edit IngressController
Sous
spec
, définissez le champwildcardPolicy
commeWildcardsDisallowed
ouWildcardsAllowed
:spec: routeAdmission: wildcardPolicy: WildcardsDisallowed # or WildcardsAllowed
7.8.13. Utilisation des en-têtes X-Forwarded
Vous configurez le contrôleur d'entrée HAProxy pour qu'il spécifie une stratégie de traitement des en-têtes HTTP, y compris Forwarded
et X-Forwarded-For
. L'opérateur d'entrée utilise le champ HTTPHeaders
pour configurer la variable d'environnement ROUTER_SET_FORWARDED_HEADERS
du contrôleur d'entrée.
Procédure
Configurez le champ
HTTPHeaders
pour le contrôleur d'entrée.Utilisez la commande suivante pour modifier la ressource
IngressController
:$ oc edit IngressController
Sous
spec
, définissez le champ de politiqueHTTPHeaders
surAppend
,Replace
,IfNone
ouNever
:apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: httpHeaders: forwardedHeaderPolicy: Append
Exemples de cas d'utilisation
As a cluster administrator, you can:
Configurez un proxy externe qui injecte l'en-tête
X-Forwarded-For
dans chaque requête avant de la transmettre à un contrôleur d'entrée.Pour configurer le contrôleur d'entrée afin qu'il transmette l'en-tête sans modification, vous devez spécifier la politique
never
. Le contrôleur d'entrée 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 d'entrée pour qu'il transmette sans modification l'en-tête
X-Forwarded-For
que votre proxy externe définit sur les requêtes de clusters externes.Pour configurer le contrôleur d'entrée afin qu'il définisse l'en-tête
X-Forwarded-For
sur les requêtes internes du cluster, qui ne passent pas par le proxy externe, spécifiez la stratégieif-none
. Si l'en-tête d'une requête HTTP est déjà défini via le proxy externe, le contrôleur d'entrée le conserve. Si l'en-tête est absent parce que la requête n'est pas passée par le proxy, le contrôleur d'entrée ajoute l'en-tête.
As an application developer, you can:
Configurer un proxy externe spécifique à l'application qui injecte l'en-tête
X-Forwarded-For
.Pour configurer un contrôleur d'entrée afin qu'il transmette l'en-tête sans modification pour la route d'une application, sans affecter la politique pour les autres routes, ajoutez une annotation
haproxy.router.openshift.io/set-forwarded-headers: if-none
ouhaproxy.router.openshift.io/set-forwarded-headers: never
sur la route de l'application.NoteVous pouvez définir l'annotation
haproxy.router.openshift.io/set-forwarded-headers
pour chaque itinéraire, indépendamment de la valeur définie globalement pour le contrôleur d'entrée.
7.8.14. Activation de la connectivité HTTP/2 Ingress
Vous pouvez activer la connectivité HTTP/2 transparente de bout en bout dans HAProxy. Cela permet aux propriétaires d'applications d'utiliser les fonctionnalités du protocole HTTP/2, notamment la connexion unique, la compression des en-têtes, les flux binaires, etc.
Vous pouvez activer la connectivité HTTP/2 pour un contrôleur d'entrée individuel ou pour l'ensemble du cluster.
Pour permettre l'utilisation de HTTP/2 pour la connexion du client à HAProxy, un itinéraire doit spécifier un certificat personnalisé. Une route qui utilise le certificat par défaut ne peut pas utiliser HTTP/2. Cette restriction est nécessaire pour éviter les problèmes liés à la coalescence des connexions, lorsque le client réutilise une connexion pour différents itinéraires qui utilisent le même certificat.
La connexion entre HAProxy et le module d'application ne peut utiliser HTTP/2 que pour le recryptage des itinéraires et non pour les itinéraires terminés ou non sécurisés. Cette restriction est due au fait que HAProxy utilise la négociation de protocole au niveau de l'application (ALPN), qui est une extension TLS, pour négocier l'utilisation de HTTP/2 avec le back-end. Il en résulte que le protocole HTTP/2 de bout en bout est possible avec passthrough et re-encrypt, mais pas avec des itinéraires non sécurisés ou terminés par un bord.
L'utilisation de WebSockets avec une route de recryptage et avec HTTP/2 activé sur un contrôleur d'entrée nécessite la prise en charge de WebSocket sur HTTP/2. WebSockets sur HTTP/2 est une fonctionnalité de HAProxy 2.4, qui n'est pas supportée par OpenShift Container Platform pour le moment.
Pour les routes non passantes, le contrôleur d'entrée négocie sa connexion à l'application indépendamment de la connexion du client. Cela signifie qu'un client peut se connecter au contrôleur d'entrée et négocier HTTP/1.1, et que le contrôleur d'entrée peut ensuite se connecter à l'application, négocier HTTP/2, et transmettre la demande de la connexion HTTP/1.1 du client en utilisant la connexion HTTP/2 à l'application. Cela pose un problème si le client tente par la suite de faire passer sa connexion de HTTP/1.1 au protocole WebSocket, car le contrôleur d'entrée ne peut pas transmettre WebSocket à HTTP/2 et ne peut pas faire passer sa connexion HTTP/2 à WebSocket. Par conséquent, si vous avez une application destinée à accepter des connexions WebSocket, elle ne doit pas autoriser la négociation du protocole HTTP/2, sinon les clients ne parviendront pas à passer au protocole WebSocket.
Procédure
Activer HTTP/2 sur un seul contrôleur d'entrée.
Pour activer HTTP/2 sur un contrôleur d'entrée, entrez la commande
oc annotate
:oc -n openshift-ingress-operator annotate ingresscontrollers/<ingresscontroller_name> ingress.operator.openshift.io/default-enable-http2=true
Remplacer
<ingresscontroller_name>
par le nom du contrôleur d'entrée à annoter.
Activer HTTP/2 sur l'ensemble du cluster.
Pour 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
AstuceVous pouvez également appliquer le YAML suivant pour ajouter l'annotation :
apiVersion: config.openshift.io/v1 kind: Ingress metadata: name: cluster annotations: ingress.operator.openshift.io/default-enable-http2: "true"
7.8.15. Configuration du protocole PROXY pour un contrôleur d'entrée
Un administrateur de cluster peut configurer le protocole PROXY lorsqu'un contrôleur d'entrée utilise les types de stratégie de publication des points d'extrémité HostNetwork
ou NodePortService
. Le protocole PROXY permet à l'équilibreur de charge de conserver les adresses client d'origine pour les connexions que le contrôleur d'entrée reçoit. Les adresses client d'origine sont utiles pour la journalisation, le filtrage et l'injection d'en-têtes HTTP. Dans la configuration par défaut, les connexions que le contrôleur d'entrée reçoit ne contiennent que l'adresse source associée à l'équilibreur de charge.
Cette fonctionnalité n'est pas prise en charge dans les déploiements en nuage. Cette restriction s'explique par le fait que lorsque OpenShift Container Platform fonctionne sur une plateforme cloud et qu'un IngressController spécifie qu'un service d'équilibrage de charge doit être utilisé, l'opérateur d'ingestion configure le service d'équilibrage de charge et active le protocole PROXY en fonction de l'exigence de la plateforme en matière de préservation des adresses source.
Vous devez configurer OpenShift Container Platform et l'équilibreur de charge externe pour qu'ils utilisent le protocole PROXY ou TCP.
Le protocole PROXY n'est pas pris en charge par le contrôleur d'entrée par défaut avec les clusters fournis par l'installateur sur des plates-formes non cloud qui utilisent un VIP d'entrée Keepalived.
Conditions préalables
- Vous avez créé un contrôleur d'entrée.
Procédure
Modifiez la ressource Ingress Controller :
$ oc -n openshift-ingress-operator edit ingresscontroller/default
Définir la configuration PROXY :
Si votre contrôleur d'entrée utilise le type de stratégie de publication des points d'extrémité hostNetwork, définissez le sous-champ
spec.endpointPublishingStrategy.hostNetwork.protocol
surPROXY
:Exemple de configuration de
hostNetwork
pourPROXY
spec: endpointPublishingStrategy: hostNetwork: protocol: PROXY type: HostNetwork
Si votre contrôleur d'entrée utilise le type de stratégie de publication des points d'extrémité NodePortService, attribuez la valeur
PROXY
au sous-champspec.endpointPublishingStrategy.nodePort.protocol
:Exemple de configuration de
nodePort
pourPROXY
spec: endpointPublishingStrategy: nodePort: protocol: PROXY type: NodePortService
7.8.16. Spécification d'un domaine de cluster alternatif à l'aide de l'option appsDomain
En tant qu'administrateur de cluster, vous pouvez spécifier une alternative au domaine de cluster par défaut pour les routes créées par l'utilisateur en configurant le champ appsDomain
. Le champ appsDomain
est un domaine optionnel pour OpenShift Container Platform à utiliser à la place du domaine par défaut, qui est spécifié dans le champ domain
. Si vous spécifiez un domaine alternatif, il remplace le domaine de cluster par défaut afin de déterminer l'hôte par défaut pour une nouvelle route.
Par exemple, vous pouvez utiliser le domaine DNS de votre entreprise comme domaine par défaut pour les routes et les entrées des applications fonctionnant sur votre cluster.
Conditions préalables
- You deployed an OpenShift Container Platform cluster.
-
Vous avez installé l'interface de ligne de commande
oc
.
Procédure
Configurez le champ
appsDomain
en spécifiant un autre domaine par défaut pour les itinéraires créés par l'utilisateur.Modifiez la ressource ingress
cluster
:$ oc edit ingresses.config/cluster -o yaml
Modifiez le fichier YAML :
Exemple de configuration de
appsDomain
pourtest.example.com
apiVersion: config.openshift.io/v1 kind: Ingress metadata: name: cluster spec: domain: apps.example.com 1 appsDomain: <test.example.com> 2
- 1
- Spécifie le domaine par défaut. Vous ne pouvez pas modifier le domaine par défaut après l'installation.
- 2
- Facultatif : Domaine de l'infrastructure OpenShift Container Platform à utiliser pour les routes d'application. Au lieu du préfixe par défaut,
apps
, vous pouvez utiliser un autre préfixe commetest
.
Vérifiez qu'un itinéraire existant contient le nom de domaine spécifié dans le champ
appsDomain
en exposant l'itinéraire et en vérifiant le changement de domaine de l'itinéraire :NoteAttendez que le site
openshift-apiserver
finisse de diffuser les mises à jour avant d'exposer l'itinéraire.Exposer l'itinéraire :
$ oc expose service hello-openshift route.route.openshift.io/hello-openshift exposed
Exemple de sortie :
$ 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
7.8.17. Conversion des en-têtes HTTP
HAProxy 2.2 met par défaut les noms d'en-tête HTTP en minuscules, par exemple en remplaçant Host: xyz.com
par host: xyz.com
. Si les applications existantes sont sensibles à la mise en majuscules des noms d'en-tête HTTP, utilisez le champ API spec.httpHeaders.headerNameCaseAdjustments
du contrôleur d'entrée pour trouver une solution permettant d'accommoder les applications existantes jusqu'à ce qu'elles soient corrigées.
Comme OpenShift Container Platform inclut HAProxy 2.2, assurez-vous d'ajouter la configuration nécessaire à l'aide de spec.httpHeaders.headerNameCaseAdjustments
avant de procéder à la mise à niveau.
Conditions préalables
-
Vous avez installé l'OpenShift CLI (
oc
). -
Vous avez accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
.
Procédure
En tant qu'administrateur de cluster, vous pouvez convertir le cas de l'en-tête HTTP en entrant la commande oc patch
ou en définissant le champ HeaderNameCaseAdjustments
dans le fichier YAML du contrôleur d'entrée.
Spécifiez un en-tête HTTP à mettre en majuscules en entrant la commande
oc patch
.Entrez la commande
oc patch
pour remplacer l'en-tête HTTPhost
parHost
:$ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"httpHeaders":{"headerNameCaseAdjustments":["Host"]}}}'
Annoter l'itinéraire de la demande :
$ oc annotate routes/my-application haproxy.router.openshift.io/h1-adjust-case=true
Le contrôleur d'entrée ajuste ensuite l'en-tête de demande
host
comme spécifié.
Spécifiez les ajustements à l'aide du champ
HeaderNameCaseAdjustments
en configurant le fichier YAML du contrôleur d'entrée.L'exemple suivant de contrôleur d'entrée YAML ajuste l'en-tête
host
àHost
pour les requêtes HTTP/1 vers des itinéraires correctement annotés :Exemple de contrôleur d'entrée YAML
apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: httpHeaders: headerNameCaseAdjustments: - Host
L'exemple de route suivant permet d'ajuster les cas de figure des en-têtes de réponse HTTP à l'aide de l'annotation
haproxy.router.openshift.io/h1-adjust-case
:Exemple de route YAML
apiVersion: route.openshift.io/v1 kind: Route metadata: annotations: haproxy.router.openshift.io/h1-adjust-case: true 1 name: my-application namespace: my-application spec: to: kind: Service name: my-application
- 1
- Fixer
haproxy.router.openshift.io/h1-adjust-case
à true (vrai).
7.8.18. Utilisation de la compression du routeur
Vous configurez le contrôleur d'entrée HAProxy pour spécifier globalement la compression du routeur pour des types MIME spécifiques. Vous pouvez utiliser la variable mimeTypes
pour définir les formats des types MIME auxquels la compression est appliquée. Les types sont les suivants : application, image, message, multipart, texte, vidéo ou un type personnalisé précédé de "X-". Pour voir la notation complète des types et sous-types MIME, voir RFC1341.
La mémoire allouée à la compression peut affecter le nombre maximal de connexions. En outre, la compression de tampons volumineux peut entraîner une certaine latence, comme c'est le cas pour les expressions rationnelles lourdes ou les longues listes d'expressions rationnelles.
Tous les types MIME ne bénéficient pas de la compression, mais HAProxy utilise tout de même des ressources pour essayer de les compresser si on le lui demande. En général, les formats de texte, tels que html, css et js, bénéficient de la compression, mais les formats déjà compressés, tels que les images, l'audio et la vidéo, bénéficient peu en échange du temps et des ressources consacrés à la compression.
Procédure
Configurez le champ
httpCompression
pour le contrôleur d'entrée.Utilisez la commande suivante pour modifier la ressource
IngressController
:$ oc edit -n openshift-ingress-operator ingresscontrollers/default
Sous
spec
, définissez le champ de politiquehttpCompression
surmimeTypes
et indiquez une liste de types MIME pour lesquels la compression doit être appliquée :apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: httpCompression: mimeTypes: - "text/html" - "text/css; charset=utf-8" - "application/json" ...
7.8.19. Personnalisation des pages de réponse au code d'erreur de HAProxy
En tant qu'administrateur de cluster, vous pouvez spécifier un code d'erreur personnalisé pour la page de réponse 503, 404 ou les deux pages d'erreur. Le routeur HAProxy sert une page d'erreur 503 lorsque le module d'application ne fonctionne pas ou une page d'erreur 404 lorsque l'URL demandée n'existe pas. Par exemple, si vous personnalisez la page de réponse au code d'erreur 503, la page est servie lorsque le module d'application n'est pas en cours d'exécution et la page de réponse HTTP au code d'erreur 404 par défaut est servie par le routeur HAProxy en cas d'itinéraire incorrect ou inexistant.
Les pages de réponse aux codes d'erreur personnalisés sont spécifiées dans une carte de configuration, puis patchées sur le contrôleur d'entrée. Les clés de la carte de configuration ont deux noms de fichier disponibles : error-page-503.http
et error-page-404.http
.
Les pages de réponse de code d'erreur HTTP personnalisées doivent respecter les directives de configuration de la page d'erreur HTTP de HAProxy. Voici un exemple de la page de réponse par défaut du code d'erreur http 503 du routeur HAProxy de OpenShift Container Platform. Vous pouvez utiliser le contenu par défaut comme modèle pour créer votre propre page personnalisée.
Par défaut, le routeur HAProxy ne sert qu'une page d'erreur 503 lorsque l'application n'est pas en cours d'exécution ou lorsque la route est incorrecte ou inexistante. Ce comportement par défaut est le même que le comportement sur OpenShift Container Platform 4.8 et antérieur. Si une carte de configuration pour la personnalisation d'une réponse de code d'erreur HTTP n'est pas fournie et que vous utilisez une page de réponse de code d'erreur HTTP personnalisée, le routeur sert une page de réponse de code d'erreur 404 ou 503 par défaut.
Si vous utilisez la page de code d'erreur 503 par défaut d'OpenShift Container Platform comme modèle pour vos personnalisations, les en-têtes du fichier nécessitent un éditeur qui peut utiliser les fins de ligne CRLF.
Procédure
Créez une carte de configuration nommée
my-custom-error-code-pages
dans l'espace de nomsopenshift-config
:$ oc -n openshift-config create configmap my-custom-error-code-pages \ --from-file=error-page-503.http \ --from-file=error-page-404.http
ImportantSi vous ne spécifiez pas le format correct pour la page de réponse du code d'erreur personnalisé, une panne du module de routeur se produit. Pour résoudre cette panne, vous devez supprimer ou corriger la carte de configuration et supprimer les router pods concernés afin qu'ils puissent être recréés avec les informations correctes.
Patch du contrôleur d'entrée pour référencer la carte de configuration
my-custom-error-code-pages
par son nom :$ oc patch -n openshift-ingress-operator ingresscontroller/default --patch '{"spec":{"httpErrorCodePages":{"name":"my-custom-error-code-pages"}}}' --type=merge
L'opérateur d'entrée copie la carte de configuration
my-custom-error-code-pages
de l'espace de nomsopenshift-config
vers l'espace de nomsopenshift-ingress
. L'opérateur nomme la carte de configuration selon le modèle<your_ingresscontroller_name>-errorpages
, dans l'espace de nomsopenshift-ingress
.Afficher la copie :
$ oc get cm default-errorpages -n openshift-ingress
Exemple de sortie
NAME DATA AGE default-errorpages 2 25s 1
- 1
- L'exemple de nom de carte de configuration est
default-errorpages
car la ressource personnalisée (CR) du contrôleur d'entréedefault
a été corrigée.
Confirmez que la carte de configuration contenant la page de réponse d'erreur personnalisée est montée sur le volume du routeur, la clé de la carte de configuration étant le nom du fichier contenant la réponse du code d'erreur HTTP personnalisé :
Pour la réponse au code d'erreur personnalisé HTTP 503 :
oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-503.http
Pour la réponse au code d'erreur HTTP personnalisé 404 :
oc -n openshift-ingress rsh <router_pod> cat /var/lib/haproxy/conf/error_code_pages/error-page-404.http
Vérification
Vérifiez votre code d'erreur personnalisé dans la réponse HTTP :
Créez un projet et une application de test :
$ oc new-project test-ingress
$ oc new-app django-psql-example
Pour la réponse au code d'erreur http personnalisé 503 :
- Arrêter tous les pods pour l'application.
Exécutez la commande curl suivante ou visitez le nom d'hôte de la route dans le navigateur :
$ curl -vk <route_hostname>
Pour la réponse au code d'erreur http personnalisé 404 :
- Visiter un itinéraire inexistant ou un itinéraire incorrect.
Exécutez la commande curl suivante ou visitez le nom d'hôte de la route dans le navigateur :
$ curl -vk <route_hostname>
Vérifier que l'attribut
errorfile
figure bien dans le fichierhaproxy.config
:oc -n openshift-ingress rsh <router> cat /var/lib/haproxy/conf/haproxy.config | grep errorfile
7.8.20. Définition du nombre maximum de connexions du contrôleur d'entrée
Un administrateur de cluster peut définir le nombre maximum de connexions simultanées pour les déploiements de routeurs OpenShift. Vous pouvez corriger un contrôleur d'entrée existant pour augmenter le nombre maximum de connexions.
Conditions préalables
- La procédure suivante suppose que vous avez déjà créé un contrôleur d'entrée
Procédure
Mettez à jour le contrôleur d'entrée afin de modifier le nombre maximal de connexions pour HAProxy :
$ oc -n openshift-ingress-operator patch ingresscontroller/default --type=merge -p '{"spec":{"tuningOptions": {"maxConnections": 7500}}}'
AvertissementSi la valeur de
spec.tuningOptions.maxConnections
est supérieure à la limite actuelle du système d'exploitation, le processus HAProxy ne démarrera pas. Voir le tableau de la section "Paramètres de configuration du contrôleur d'entrée" pour plus d'informations sur ce paramètre.
7.9. Ressources supplémentaires
Chapitre 8. Ingress sharding dans OpenShift Container Platform
Dans OpenShift Container Platform, un Ingress Controller peut servir toutes les routes ou un sous-ensemble de routes. Par défaut, le contrôleur d'ingestion sert toutes les routes créées dans n'importe quel espace de noms du cluster. Vous pouvez ajouter des contrôleurs d'entrée supplémentaires à votre cluster pour optimiser le routage en créant shards, qui sont des sous-ensembles d'itinéraires basés sur des caractéristiques sélectionnées. Pour marquer un itinéraire comme membre d'une grappe, utilisez des étiquettes dans le champ de l'itinéraire ou de l'espace de noms metadata
. Le contrôleur d'entrée utilise selectors, également connu sous le nom de selection expression, pour sélectionner un sous-ensemble d'itinéraires à partir de l'ensemble des itinéraires à desservir.
La répartition des entrées est utile lorsque vous souhaitez équilibrer la charge du trafic entrant entre plusieurs contrôleurs d'entrée, lorsque vous souhaitez isoler le trafic à acheminer vers un contrôleur d'entrée spécifique, ou pour toute une série d'autres raisons décrites dans la section suivante.
Par défaut, chaque route utilise le domaine par défaut du cluster. Toutefois, les itinéraires peuvent être configurés pour utiliser le domaine du routeur à la place. Pour plus d'informations, voir Création d'un itinéraire pour le sharding de contrôleur d'entrée.
8.1. Regroupement des contrôleurs d'entrée
Vous pouvez utiliser le partage d'entrée, également connu sous le nom de partage de routeur, pour distribuer un ensemble d'itinéraires sur plusieurs routeurs en ajoutant des étiquettes aux itinéraires, aux espaces de noms ou aux deux. Le contrôleur d'entrée utilise un ensemble correspondant de sélecteurs pour n'admettre que les itinéraires dotés d'une étiquette spécifique. Chaque groupe d'entrée comprend les itinéraires filtrés à l'aide d'une expression de sélection donnée.
En tant que principal mécanisme d'entrée du trafic dans la grappe, le contrôleur d'entrée peut être fortement sollicité. En tant qu'administrateur de la grappe, vous pouvez répartir les routes pour :
- Équilibrer les contrôleurs d'entrée, ou routeurs, avec plusieurs itinéraires pour accélérer les réponses aux changements.
- Attribuer à certains itinéraires des garanties de fiabilité différentes de celles des autres itinéraires.
- Permettre à certains contrôleurs d'entrée de définir des politiques différentes.
- Ne permettre qu'à des itinéraires spécifiques d'utiliser des fonctionnalités supplémentaires.
- Exposer des itinéraires différents sur des adresses différentes afin que les utilisateurs internes et externes puissent voir des itinéraires différents, par exemple.
- Transférer le trafic d'une version d'une application à une autre lors d'un déploiement bleu-vert.
Lorsque les contrôleurs d'entrée sont groupés, une route donnée est admise par zéro ou plusieurs contrôleurs d'entrée du groupe. L'état d'une route indique si un contrôleur d'entrée l'a admise ou non. Un contrôleur d'entrée n'admettra une route que si elle est unique à son groupe.
Un contrôleur d'entrée peut utiliser trois méthodes de répartition :
- Ajout d'un sélecteur d'espace de noms au contrôleur d'ingestion, de sorte que tous les itinéraires d'un espace de noms dont les étiquettes correspondent au sélecteur d'espace de noms se trouvent dans la grappe d'ingestion.
- Ajout d'un sélecteur d'itinéraires au contrôleur d'entrée, de sorte que tous les itinéraires dont les étiquettes correspondent au sélecteur d'itinéraires se trouvent dans le groupe d'entrée.
- Ajout d'un sélecteur d'espace de noms et d'un sélecteur d'itinéraires au contrôleur d'ingestion, de sorte que les itinéraires dont les étiquettes correspondent au sélecteur d'itinéraires dans un espace de noms dont les étiquettes correspondent au sélecteur d'espace de noms se trouvent dans la grappe d'ingestion.
Avec la répartition, vous pouvez distribuer des sous-ensembles d'itinéraires sur plusieurs contrôleurs d'entrée. Ces sous-ensembles peuvent ne pas se chevaucher ( traditional sharding) ou se chevaucher ( overlapped sharding).
8.1.1. Exemple de partage traditionnel
Un contrôleur d'entrée finops-router
est configuré avec le sélecteur d'étiquettes spec.namespaceSelector.matchLabels.name
réglé sur finance
et ops
:
Exemple de définition YAML pour finops-router
apiVersion: v1 items: - apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: finops-router namespace: openshift-ingress-operator spec: namespaceSelector: matchLabels: name: - finance - ops
Un deuxième contrôleur d'entrée dev-router
est configuré avec le sélecteur d'étiquettes spec.namespaceSelector.matchLabels.name
réglé sur dev
:
Exemple de définition YAML pour dev-router
apiVersion: v1 items: - apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: dev-router namespace: openshift-ingress-operator spec: namespaceSelector: matchLabels: name: dev
Si toutes les routes d'application sont dans des espaces de noms séparés, chacun étiqueté avec name:finance
, name:ops
, et name:dev
respectivement, cette configuration distribue efficacement vos routes entre les deux contrôleurs d'entrée. Les routes de OpenShift Container Platform pour la console, l'authentification et d'autres objectifs ne doivent pas être gérées.
Dans le scénario ci-dessus, la répartition devient un cas particulier de partitionnement, sans que les sous-ensembles ne se chevauchent. Les routes sont réparties entre les routeurs.
Le contrôleur d'entrée default
continue à servir toutes les routes à moins que les champs namespaceSelector
ou routeSelector
ne contiennent des routes à exclure. Consultez cette solution de la base de connaissances de Red Hat et la section "Sharding the default Ingress Controller" pour plus d'informations sur la manière d'exclure les itinéraires du contrôleur d'entrée par défaut.
8.1.2. Exemple de partage superposé
Outre finops-router
et dev-router
dans l'exemple ci-dessus, vous avez également devops-router
, qui est configuré avec le sélecteur d'étiquettes spec.namespaceSelector.matchLabels.name
défini sur dev
et ops
:
Exemple de définition YAML pour devops-router
apiVersion: v1 items: - apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: devops-router namespace: openshift-ingress-operator spec: namespaceSelector: matchLabels: name: - dev - ops
Les routes des espaces de noms intitulés name:dev
et name:ops
sont maintenant gérées par deux contrôleurs d'entrée différents. Avec cette configuration, les sous-ensembles d'itinéraires se chevauchent.
Le chevauchement de sous-ensembles d'itinéraires permet de créer des règles de routage plus complexes. Par exemple, vous pouvez détourner le trafic hautement prioritaire vers le site dédié finops-router
tout en envoyant le trafic moins prioritaire vers devops-router
.
8.1.3. Partage du contrôleur d'entrée par défaut
Après la création d'un nouveau shard d'ingestion, il se peut que des routes admises dans votre nouveau shard d'ingestion soient également admises par le contrôleur d'ingestion par défaut. En effet, le contrôleur d'entrée par défaut n'a pas de sélecteurs et admet tous les itinéraires par défaut.
Vous pouvez empêcher un contrôleur d'entrée de desservir des itinéraires avec des étiquettes spécifiques à l'aide de sélecteurs d'espace de noms ou de sélecteurs d'itinéraires. La procédure suivante empêche le contrôleur d'entrée par défaut de desservir les itinéraires finance
, ops
et dev
, nouvellement partagés, à l'aide d'un sélecteur d'espace de noms. Cette procédure permet d'isoler davantage les groupes de serveurs d'entrée.
Vous devez conserver toutes les routes d'administration d'OpenShift Container Platform sur le même Ingress Controller. Par conséquent, évitez d'ajouter des sélecteurs supplémentaires au contrôleur d'ingestion par défaut qui excluent ces routes essentielles.
Conditions préalables
-
You installed the OpenShift CLI (
oc
). - Vous êtes connecté en tant qu'administrateur de projet.
Procédure
Modifiez le contrôleur d'entrée par défaut en exécutant la commande suivante :
$ oc edit ingresscontroller -n openshift-ingress-operator default
Modifiez le contrôleur d'entrée pour qu'il contienne une adresse
namespaceSelector
qui exclut les itinéraires portant l'une des étiquettesfinance
,ops
etdev
:apiVersion: v1 items: - apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: default namespace: openshift-ingress-operator spec: namespaceSelector: matchExpressions: - key: type operator: NotIn values: - finance - ops - dev
Le contrôleur d'entrée par défaut ne desservira plus les espaces de noms intitulés name:finance
, name:ops
, et name:dev
.
8.1.4. Sharding d'entrée et DNS
L'administrateur de la grappe est chargé de créer une entrée DNS distincte pour chaque routeur d'un projet. Un routeur ne transmettra pas de routes inconnues à un autre routeur.
Prenons l'exemple suivant :
-
Le routeur A se trouve sur l'hôte 192.168.0.5 et a des routes avec
*.foo.com
. -
Le routeur B se trouve sur l'hôte 192.168.1.9 et a des routes avec
*.example.com
.
Des entrées DNS séparées doivent résoudre *.foo.com
en nœud hébergeant le routeur A et *.example.com
en nœud hébergeant le routeur B :
-
*.foo.com A IN 192.168.0.5
-
*.example.com A IN 192.168.1.9
8.1.5. Configuration de la répartition des contrôleurs d'entrée à l'aide d'étiquettes d'itinéraires
La répartition du contrôleur d'entrée à l'aide d'étiquettes d'itinéraires signifie que le contrôleur d'entrée dessert n'importe quel itinéraire dans n'importe quel espace de noms sélectionné par le sélecteur d'itinéraires.
Figure 8.1. Répartition des entrées à l'aide d'étiquettes d'itinéraires

La répartition des contrôleurs d'entrée est utile pour équilibrer la charge du trafic entrant entre un ensemble de contrôleurs d'entrée et pour isoler le trafic vers un contrôleur d'entrée spécifique. Par exemple, l'entreprise A s'adresse à un contrôleur d'entrée et l'entreprise B à un autre.
Procédure
Modifiez le fichier
router-internal.yaml
:# cat router-internal.yaml apiVersion: v1 items: - apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: sharded namespace: openshift-ingress-operator spec: domain: <apps-sharded.basedomain.example.net> 1 nodePlacement: nodeSelector: matchLabels: node-role.kubernetes.io/worker: "" routeSelector: matchLabels: type: sharded status: {} kind: List metadata: resourceVersion: "" selfLink: ""
- 1
- Indiquez un domaine à utiliser par le contrôleur d'entrée. Ce domaine doit être différent du domaine par défaut du contrôleur d'entrée.
Appliquer le fichier du contrôleur d'entrée
router-internal.yaml
:# oc apply -f router-internal.yaml
Le contrôleur d'entrée sélectionne les routes dans n'importe quel espace de noms qui ont l'étiquette
type: sharded
.Créez une nouvelle route en utilisant le domaine configuré dans le site
router-internal.yaml
:oc expose svc <service-name> --hostname <route-name>.apps-sharded.basedomain.example.net
8.1.6. Configuration de la répartition des contrôleurs d'entrée à l'aide d'étiquettes d'espace de noms
La répartition du contrôleur d'entrée à l'aide d'étiquettes d'espace de noms signifie que le contrôleur d'entrée dessert n'importe quelle route dans n'importe quel espace de noms sélectionné par le sélecteur d'espace de noms.
Figure 8.2. La mise en commun à l'entrée à l'aide d'étiquettes d'espace de noms

La répartition des contrôleurs d'entrée est utile pour équilibrer la charge du trafic entrant entre un ensemble de contrôleurs d'entrée et pour isoler le trafic vers un contrôleur d'entrée spécifique. Par exemple, l'entreprise A s'adresse à un contrôleur d'entrée et l'entreprise B à un autre.
Procédure
Modifiez le fichier
router-internal.yaml
:# cat router-internal.yaml
Exemple de sortie
apiVersion: v1 items: - apiVersion: operator.openshift.io/v1 kind: IngressController metadata: name: sharded namespace: openshift-ingress-operator spec: domain: <apps-sharded.basedomain.example.net> 1 nodePlacement: nodeSelector: matchLabels: node-role.kubernetes.io/worker: "" namespaceSelector: matchLabels: type: sharded status: {} kind: List metadata: resourceVersion: "" selfLink: ""
- 1
- Indiquez un domaine à utiliser par le contrôleur d'entrée. Ce domaine doit être différent du domaine par défaut du contrôleur d'entrée.
Appliquer le fichier du contrôleur d'entrée
router-internal.yaml
:# oc apply -f router-internal.yaml
Le contrôleur d'entrée sélectionne les itinéraires dans tout espace de noms sélectionné par le sélecteur d'espace de noms et portant l'étiquette
type: sharded
.Créez une nouvelle route en utilisant le domaine configuré dans le site
router-internal.yaml
:oc expose svc <service-name> --hostname <route-name>.apps-sharded.basedomain.example.net
8.2. Création d'une route pour le sharding du contrôleur d'entrée
Une route vous permet d'héberger votre application à une URL. Dans ce cas, le nom d'hôte n'est pas défini et la route utilise un sous-domaine à la place. Lorsque vous spécifiez un sous-domaine, vous utilisez automatiquement le domaine du contrôleur d'entrée qui expose l'itinéraire. Lorsqu'un itinéraire est exposé par plusieurs contrôleurs d'ingestion, l'itinéraire est hébergé sur plusieurs URL.
La procédure suivante décrit comment créer une route pour le sharding du contrôleur d'entrée, en utilisant l'application hello-openshift
comme exemple.
La répartition des contrôleurs d'entrée est utile pour équilibrer la charge du trafic entrant entre un ensemble de contrôleurs d'entrée et pour isoler le trafic vers un contrôleur d'entrée spécifique. Par exemple, l'entreprise A s'adresse à un contrôleur d'entrée et l'entreprise B à un autre.
Conditions préalables
-
You installed the OpenShift CLI (
oc
). - Vous êtes connecté en tant qu'administrateur de projet.
- Vous avez une application web qui expose un port et un point d'extrémité HTTP ou TLS qui écoute le trafic sur le port.
- Vous avez configuré le contrôleur d'entrée pour le partage.
Procédure
Créez un projet appelé
hello-openshift
en exécutant la commande suivante :$ oc new-project hello-openshift
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
Créez un service appelé
hello-openshift
en exécutant la commande suivante :$ oc expose pod/hello-openshift
Créez une définition de route appelée
hello-openshift-route.yaml
:Définition YAML de la route créée pour le sharding :
apiVersion: route.openshift.io/v1 kind: Route metadata: labels: type: sharded 1 name: hello-openshift-edge namespace: hello-openshift spec: subdomain: hello-openshift 2 tls: termination: edge to: kind: Service name: hello-openshift
- 1
- La clé d'étiquette et la valeur d'étiquette correspondante doivent toutes deux correspondre à celles spécifiées dans le contrôleur d'entrée. Dans cet exemple, le contrôleur d'entrée a la clé et la valeur d'étiquette
type: sharded
. - 2
- La route sera exposée en utilisant la valeur du champ
subdomain
. Lorsque vous spécifiez le champsubdomain
, vous devez laisser le nom d'hôte non défini. Si vous spécifiez à la fois les champshost
etsubdomain
, l'itinéraire utilisera la valeur du champhost
et ignorera le champsubdomain
.
Utilisez
hello-openshift-route.yaml
pour créer une route vers l'applicationhello-openshift
en exécutant la commande suivante :$ oc -n hello-openshift create -f hello-openshift-route.yaml
Vérification
Obtenez l'état de la route à l'aide de la commande suivante :
$ oc -n hello-openshift get routes/hello-openshift-edge -o yaml
La ressource
Route
qui en résulte devrait ressembler à ce qui suit :Exemple de sortie
apiVersion: route.openshift.io/v1 kind: Route metadata: labels: type: sharded name: hello-openshift-edge namespace: hello-openshift spec: subdomain: hello-openshift tls: termination: edge to: kind: Service name: hello-openshift status: ingress: - host: hello-openshift.<apps-sharded.basedomain.example.net> 1 routerCanonicalHostname: router-sharded.<apps-sharded.basedomain.example.net> 2 routerName: sharded 3
- 1
- Le nom d'hôte que le contrôleur d'entrée, ou le routeur, utilise pour exposer l'itinéraire. La valeur du champ
host
est automatiquement déterminée par le contrôleur d'entrée et utilise son domaine. Dans cet exemple, le domaine du contrôleur d'entrée est<apps-sharded.basedomain.example.net>
. - 2
- Le nom d'hôte du contrôleur d'entrée.
- 3
- Le nom du contrôleur d'entrée. Dans cet exemple, le contrôleur d'entrée porte le nom
sharded
.
Ressources complémentaires
Chapitre 9. Opérateur de pare-feu Ingress Node dans OpenShift Container Platform
L'opérateur de pare-feu du nœud d'entrée permet aux administrateurs de gérer les configurations de pare-feu au niveau du nœud.
9.1. Installation de l'opérateur de pare-feu du nœud d'entrée
En tant qu'administrateur de cluster, vous pouvez installer l'opérateur de pare-feu du nœud d'entrée à l'aide de la CLI d'OpenShift Container Platform ou de la console Web.
9.1.1. Installation de l'opérateur de pare-feu du nœud d'entrée à l'aide de la CLI
En tant qu'administrateur de cluster, vous pouvez installer l'Opérateur à l'aide de la CLI.
Conditions préalables
-
Vous avez installé l'OpenShift CLI (
oc
). - Vous disposez d'un compte avec des privilèges d'administrateur.
Procédure
Pour créer l'espace de noms
openshift-ingress-node-firewall
, entrez la commande suivante :$ cat << EOF| oc create -f - apiVersion: v1 kind: Namespace metadata: labels: pod-security.kubernetes.io/enforce: privileged pod-security.kubernetes.io/enforce-version: v1.24 name: openshift-ingress-node-firewall EOF
Pour créer un CR
OperatorGroup
, entrez la commande suivante :$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: ingress-node-firewall-operators namespace: openshift-ingress-node-firewall EOF
S'abonner à l'opérateur de pare-feu du nœud d'entrée.
Pour créer un CR
Subscription
pour l'opérateur de pare-feu du nœud d'entrée, entrez la commande suivante :$ cat << EOF| oc create -f - apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: ingress-node-firewall-sub namespace: openshift-ingress-node-firewall spec: name: ingress-node-firewall channel: stable source: redhat-operators sourceNamespace: openshift-marketplace EOF
Pour vérifier que l'opérateur est installé, entrez la commande suivante :
$ oc get ip -n openshift-ingress-node-firewall
Exemple de sortie
NAME CSV APPROVAL APPROVED install-5cvnz ingress-node-firewall.4.12.0-202211122336 Automatic true
Pour vérifier la version de l'opérateur, entrez la commande suivante :
$ oc get csv -n openshift-ingress-node-firewall
Exemple de sortie
NAME DISPLAY VERSION REPLACES PHASE ingress-node-firewall.4.12.0-202211122336 Ingress Node Firewall Operator 4.12.0-202211122336 ingress-node-firewall.4.12.0-202211102047 Succeeded
9.1.2. Installation de l'opérateur de pare-feu du nœud d'entrée à l'aide de la console web
En tant qu'administrateur de cluster, vous pouvez installer l'Opérateur à l'aide de la console web.
Conditions préalables
-
Vous avez installé l'OpenShift CLI (
oc
). - Vous disposez d'un compte avec des privilèges d'administrateur.
Procédure
Installer l'opérateur de pare-feu du nœud d'entrée :
- Dans la console Web OpenShift Container Platform, cliquez sur Operators → OperatorHub.
- Sélectionnez Ingress Node Firewall Operator dans la liste des opérateurs disponibles, puis cliquez sur Install.
- Sur la page Install Operator, sous Installed Namespace, sélectionnez Operator recommended Namespace.
- Cliquez sur Install.
Vérifiez que l'opérateur de pare-feu du nœud d'entrée a été installé avec succès :
- Naviguez jusqu'à la page Operators → Installed Operators.
Assurez-vous que Ingress Node Firewall Operator est listé dans le projet openshift-ingress-node-firewall avec un Status de InstallSucceeded.
NotePendant l'installation, un opérateur peut afficher un état Failed. Si l'installation réussit par la suite avec un message InstallSucceeded, vous pouvez ignorer le message Failed.
Si l'Opérateur n'a pas de Status de InstallSucceeded, dépanner en suivant les étapes suivantes :
- Inspectez les onglets Operator Subscriptions et Install Plans pour vérifier qu'il n'y a pas de défaillances ou d'erreurs sous Status.
-
Naviguez vers la page Workloads → Pods et vérifiez les journaux pour les pods dans le projet
openshift-ingress-node-firewall
. Vérifiez l'espace de noms du fichier YAML. Si l'annotation est manquante, vous pouvez ajouter l'annotation
workload.openshift.io/allowed=management
à l'espace de noms de l'opérateur à l'aide de la commande suivante :$ oc annotate ns/openshift-ingress-node-firewall workload.openshift.io/allowed=management
NotePour les clusters OpenShift à nœud unique, l'espace de noms
openshift-ingress-node-firewall
nécessite l'annotationworkload.openshift.io/allowed=management
.
9.2. Opérateur du pare-feu du nœud d'entrée
L'opérateur de pare-feu de nœud d'entrée fournit des règles de pare-feu d'entrée au niveau d'un nœud en déployant l'ensemble de démons sur les nœuds que vous spécifiez et gérez dans les configurations de pare-feu. Pour déployer le jeu de démons, vous créez une ressource personnalisée (CR) IngressNodeFirewallConfig
. L'opérateur applique la CR IngressNodeFirewallConfig
pour créer l'ensemble de démons de pare-feu de nœuds d'entrée daemon
, qui s'exécute sur tous les nœuds correspondant à la CR nodeSelector
.
Vous configurez rules
de la CR IngressNodeFirewall
et les appliquez aux clusters en utilisant nodeSelector
et en fixant les valeurs à "true".
L'opérateur de pare-feu du nœud d'entrée ne prend en charge que les règles de pare-feu sans état.
Le paramètre des unités de transmission maximale (MTU) est de 4Kb (kilo-octets) dans OpenShift Container Platform 4.12.
Les contrôleurs d'interface réseau (NIC) qui ne prennent pas en charge les pilotes XDP natifs fonctionneront à des performances moindres.
9.3. Déploiement de l'opérateur de pare-feu du nœud d'entrée
Prérequis
- L'opérateur de pare-feu du nœud d'entrée est installé.
Procédure
Pour déployer l'opérateur de pare-feu du nœud d'entrée, créez une ressource personnalisée IngressNodeFirewallConfig
qui déploiera l'ensemble de démons de l'opérateur. Vous pouvez déployer un ou plusieurs CRD IngressNodeFirewall
sur des nœuds en appliquant des règles de pare-feu.
-
Créez le site
IngressNodeFirewallConfig
à l'intérieur de l'espace de nomsopenshift-ingress-node-firewall
nomméingressnodefirewallconfig
. Exécutez la commande suivante pour déployer les règles de l'opérateur de pare-feu du nœud d'entrée :
$ oc apply -f rule.yaml
9.3.1. Objet de configuration du pare-feu du nœud d'entrée
Les champs de l'objet de configuration Ingress Node Firewall sont décrits dans le tableau suivant :
Tableau 9.1. Objet de configuration du pare-feu du nœud d'entrée
Field | Type | Description |
---|---|---|
|
|
Le nom de l'objet CR. Le nom de l'objet règles de pare-feu doit être |
|
|
Espace de noms pour l'objet CR de l'opérateur du pare-feu d'entrée. Le CR |
|
| Une contrainte de sélection de nœuds utilisée pour cibler les nœuds par le biais d'étiquettes de nœuds spécifiées. Par exemple : spec: nodeSelector: node-role.kubernetes.io/worker: "" Note
L'une des étiquettes utilisées dans |
L'opérateur consomme le CR et crée un ensemble de démons de pare-feu de nœuds d'entrée sur tous les nœuds qui correspondent à nodeSelector
.
Exemple de configuration de l'opérateur de pare-feu du nœud d'entrée
L'exemple suivant présente une configuration complète du pare-feu du nœud d'entrée :
Exemple d'objet de configuration du pare-feu du nœud d'entrée
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewallConfig metadata: name: ingressnodefirewallconfig namespace: openshift-ingress-node-firewall spec: nodeSelector: node-role.kubernetes.io/worker: ""
L'opérateur consomme le CR et crée un ensemble de démons de pare-feu de nœuds d'entrée sur tous les nœuds qui correspondent à nodeSelector
.
9.3.2. Objet "règles de pare-feu" du nœud d'entrée
Les champs de l'objet Règles de pare-feu du nœud d'entrée sont décrits dans le tableau suivant :
Tableau 9.2. Objet "règles de pare-feu" du nœud d'entrée
Field | Type | Description |
---|---|---|
|
| Le nom de l'objet CR. |
|
|
Les champs de cet objet spécifient les interfaces auxquelles appliquer les règles de pare-feu. Par exemple, |
|
|
Vous pouvez utiliser |
|
|
|
Configuration de l'objet d'entrée
Les valeurs de l'objet ingress
sont définies dans le tableau suivant :
Tableau 9.3. ingress
objet
Field | Type | Description |
---|---|---|
|
| Permet de définir le bloc CIDR. Vous pouvez configurer plusieurs CIDR de différentes familles d'adresses. Note
Des CIDR différents vous permettent d'utiliser la même règle d'ordre. S'il existe plusieurs objets |
|
|
Les objets du pare-feu d'entrée
Définissez Note Les règles de pare-feu en entrée sont vérifiées à l'aide d'un webhook de vérification qui bloque toute configuration invalide. Le webhook de vérification vous empêche de bloquer les services critiques du cluster tels que le serveur API ou SSH. |
Exemple d'objet de règles de pare-feu pour le nœud d'entrée
L'exemple suivant présente une configuration complète du pare-feu du nœud d'entrée :
Exemple de configuration du pare-feu du nœud d'entrée
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewall metadata: name: ingressnodefirewall spec: interfaces: - eth0 nodeSelector: matchLabels: <do_node_ingress_firewall>: 'true' ingress: - sourceCIDRs: - 172.16.0.0/12 rules: - order: 10 protocolConfig: protocol: ICMP icmp: icmpType: 8 #ICMP Echo request action: Deny - order: 20 protocolConfig: protocol: TCP tcp: ports: "8000-9000" action: Deny - sourceCIDRs: - fc00:f853:ccd:e793::0/64 rules: - order: 10 protocolConfig: protocol: ICMPv6 icmpv6: icmpType: 128 #ICMPV6 Echo request action: Deny
Exemple d'objet de règles de pare-feu de nœud d'entrée à confiance zéro
Les règles de pare-feu de nœud d'entrée à confiance zéro peuvent fournir une sécurité supplémentaire aux clusters à interfaces multiples. Par exemple, vous pouvez utiliser des règles de pare-feu de nœud d'entrée à confiance zéro pour supprimer tout le trafic sur une interface spécifique, à l'exception de SSH.
L'exemple suivant présente une configuration complète d'un ensemble de règles de pare-feu de nœud d'entrée à confiance zéro :
Les utilisateurs doivent ajouter tous les ports que leur application utilisera à leur liste d'autorisations dans le cas suivant afin de garantir un fonctionnement correct.
Exemple de règles de pare-feu de nœud d'entrée à confiance zéro
apiVersion: ingressnodefirewall.openshift.io/v1alpha1 kind: IngressNodeFirewall metadata: name: ingressnodefirewall-zero-trust spec: interfaces: - eth1 1 nodeSelector: matchLabels: <do_node_ingress_firewall>: 'true' ingress: - sourceCIDRs: - 0.0.0.0/0 2 rules: - order: 10 protocolConfig: protocol: TCP tcp: ports: 22 action: Allow - order: 20 action: Deny 3
9.4. Affichage des règles de l'opérateur de pare-feu du nœud d'entrée
Procédure
Exécutez la commande suivante pour afficher toutes les règles en vigueur :
$ oc get ingressnodefirewall
Choisissez l'un des noms de
<resource>
et exécutez la commande suivante pour afficher les règles ou les configurations :$ oc get <resource> <name> -o yaml
9.5. Dépannage de l'opérateur de pare-feu du nœud d'entrée
Exécutez la commande suivante pour répertorier les définitions de ressources personnalisées (CRD) installées sur le pare-feu du nœud d'entrée :
$ oc get crds | grep ingressnodefirewall
Exemple de sortie
NAME READY UP-TO-DATE AVAILABLE AGE ingressnodefirewallconfigs.ingressnodefirewall.openshift.io 2022-08-25T10:03:01Z ingressnodefirewallnodestates.ingressnodefirewall.openshift.io 2022-08-25T10:03:00Z ingressnodefirewalls.ingressnodefirewall.openshift.io 2022-08-25T10:03:00Z
Exécutez la commande suivante pour afficher l'état de l'opérateur de pare-feu du nœud d'entrée :
$ oc get pods -n openshift-ingress-node-firewall
Exemple de sortie
NAME READY STATUS RESTARTS AGE ingress-node-firewall-controller-manager 2/2 Running 0 5d21h ingress-node-firewall-daemon-pqx56 3/3 Running 0 5d21h
Les champs suivants fournissent des informations sur l'état de l'opérateur :
READY
,STATUS
,AGE
, etRESTARTS
. Le champSTATUS
estRunning
lorsque l'opérateur de pare-feu du nœud d'entrée déploie un ensemble de démons sur les nœuds attribués.Exécutez la commande suivante pour collecter tous les journaux des nœuds de pare-feu entrants :
$ oc adm must-gather – gather_ingress_node_firewall
Les journaux sont disponibles dans le rapport du nœud sos contenant les sorties eBPF
bpftool
à l'adresse/sos_commands/ebpf
. Ces rapports comprennent les tables de consultation utilisées ou mises à jour lorsque le pare-feu d'entrée XDP traite les paquets, met à jour les statistiques et émet des événements.
Chapitre 10. Configuration d'un contrôleur d'entrée pour la gestion manuelle du DNS
En tant qu'administrateur de cluster, lorsque vous créez un contrôleur d'entrée, l'opérateur gère automatiquement les enregistrements DNS. Cela présente certaines limites lorsque la zone DNS requise est différente de la zone DNS du cluster ou lorsque la zone DNS est hébergée en dehors du fournisseur de cloud.
En tant qu'administrateur de cluster, vous pouvez configurer un contrôleur d'entrée pour qu'il arrête la gestion automatique du DNS et démarre la gestion manuelle du DNS. Définissez dnsManagementPolicy
pour spécifier quand il doit être géré automatiquement ou manuellement.
Lorsque vous modifiez un contrôleur d'entrée de Managed
à Unmanaged
, l'opérateur ne nettoie pas l'ancien enregistrement DNS wildcard provisionné sur le nuage. Lorsque vous modifiez un contrôleur d'entrée de Unmanaged
à Managed
, l'opérateur tente de créer l'enregistrement DNS sur le fournisseur de cloud s'il n'existe pas ou met à jour l'enregistrement DNS s'il existe déjà.
Lorsque vous remplacez dnsManagementPolicy
par unmanaged
, vous devez gérer manuellement le cycle de vie de l'enregistrement DNS générique sur le fournisseur de services en nuage.
10.1. Managed
Politique de gestion du DNS
La politique de gestion DNS de Managed
pour les contrôleurs d'entrée garantit que le cycle de vie de l'enregistrement DNS sauvage sur le fournisseur d'informatique en nuage est automatiquement géré par l'opérateur.
10.2. Unmanaged
Politique de gestion du DNS
La politique de gestion DNS de Unmanaged
pour les contrôleurs d'entrée garantit que le cycle de vie de l'enregistrement DNS wildcard sur le fournisseur de cloud n'est pas géré automatiquement, mais qu'il relève de la responsabilité de l'administrateur du cluster.
Sur la plateforme cloud AWS, si le domaine du contrôleur d'entrée ne correspond pas à dnsConfig.Spec.BaseDomain
, la politique de gestion DNS est automatiquement définie sur Unmanaged
.
10.3. Création d'un contrôleur d'entrée personnalisé avec la politique de gestion DNS Unmanaged
En tant qu'administrateur de cluster, vous pouvez créer un nouveau contrôleur d'entrée personnalisé avec la politique de gestion DNS Unmanaged
.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
.
Procédure
Créez un fichier de ressources personnalisées (CR) nommé
sample-ingress.yaml
contenant les éléments suivants :apiVersion: operator.openshift.io/v1 kind: IngressController metadata: namespace: openshift-ingress-operator name: <name> 1 spec: domain: <domain> 2 endpointPublishingStrategy: type: LoadBalancerService loadBalancer: scope: External 3 dnsManagementPolicy: Unmanaged 4
- 1
- Spécifiez l'objet
<name>
avec un nom pour l'objetIngressController
. - 2
- Spécifiez l'adresse
domain
en fonction de l'enregistrement DNS qui a été créé en tant que condition préalable. - 3
- Spécifiez l'adresse
scope
commeExternal
pour exposer l'équilibreur de charge à l'extérieur. - 4
dnsManagementPolicy
indique si le contrôleur d'entrée gère le cycle de vie de l'enregistrement DNS générique associé à l'équilibreur de charge. Les valeurs valides sontManaged
etUnmanaged
. La valeur par défaut estManaged
.
Enregistrez le fichier pour appliquer les modifications.
oc apply -f <name>.yaml 1
10.4. Modification d'un contrôleur d'entrée existant
En tant qu'administrateur de cluster, vous pouvez modifier un contrôleur d'entrée existant pour gérer manuellement le cycle de vie des enregistrements DNS.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
.
Procédure
Modifiez le choix de
IngressController
pour définirdnsManagementPolicy
:SCOPE=$(oc -n openshift-ingress-operator get ingresscontroller <name> -o=jsonpath="{.status.endpointPublishingStrategy.loadBalancer.scope}") oc -n openshift-ingress-operator patch ingresscontrollers/<name> --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"dnsManagementPolicy":"Unmanaged", "scope":"${SCOPE}"}}}}'
- Facultatif : vous pouvez supprimer l'enregistrement DNS associé dans le fournisseur de cloud.
10.5. Ressources supplémentaires
Chapitre 11. Configuration de la stratégie de publication des points d'extrémité du contrôleur d'entrée
11.1. Stratégie de publication des points d'extrémité du contrôleur d'entrée
NodePortService
endpoint publishing strategy
La stratégie de publication des points d'extrémité NodePortService
publie le contrôleur d'ingestion à l'aide d'un service NodePort de Kubernetes.
Dans cette configuration, le déploiement du contrôleur d'entrée utilise un réseau de conteneurs. Un site NodePortService
est créé pour publier le déploiement. Les ports de nœuds spécifiques sont alloués dynamiquement par OpenShift Container Platform ; toutefois, pour prendre en charge les allocations de ports statiques, les modifications apportées au champ node port du site NodePortService
géré sont conservées.
Figure 11.1. Diagramme de NodePortService

Le graphique précédent illustre les concepts suivants relatifs à la stratégie de publication des points d'extrémité Ingress NodePort d'OpenShift Container Platform :
- Tous les nœuds disponibles dans la grappe ont leur propre adresse IP, accessible de l'extérieur. Le service fonctionnant dans la grappe est lié à l'unique NodePort de tous les nœuds.
-
Lorsque le client se connecte à un nœud en panne, par exemple en connectant l'adresse IP
10.0.128.4
dans le graphique, le port du nœud connecte directement le client à un nœud disponible qui exécute le service. Dans ce scénario, aucun équilibrage de charge n'est nécessaire. Comme le montre l'image, l'adresse10.0.128.4
est hors service et une autre adresse IP doit être utilisée à la place.
L'opérateur d'entrée ignore toute mise à jour des champs .spec.ports[].nodePort
du service.
Par défaut, les ports sont attribués automatiquement et vous pouvez accéder aux attributions de ports pour les intégrations. Cependant, il est parfois nécessaire d'allouer des ports statiques pour s'intégrer à l'infrastructure existante, qui peut ne pas être facilement reconfigurée en réponse aux ports dynamiques. Pour réaliser des intégrations avec des ports de nœuds statiques, vous pouvez mettre à jour la ressource de service géré directement.
Pour plus d'informations, consultez la documentation sur les services Kubernetes à l'adresse NodePort
.
HostNetwork
endpoint publishing strategy
La stratégie de publication des points d'extrémité HostNetwork
publie le contrôleur d'entrée sur les ports des nœuds où le contrôleur d'entrée est déployé.
Un contrôleur d'entrée doté de la stratégie de publication de points finaux HostNetwork
ne peut avoir qu'une seule réplique de pod par nœud. Si vous voulez des répliques n, vous devez utiliser au moins des nœuds n où ces répliques peuvent être planifiées. Étant donné que chaque réplique de pod demande les ports 80
et 443
sur l'hôte du nœud où elle est planifiée, une réplique ne peut pas être planifiée sur un nœud si un autre pod sur le même nœud utilise ces ports.
11.1.1. Configuration de l'étendue de la publication du contrôleur d'entrée sur Interne
Lorsqu'un administrateur de cluster installe un nouveau cluster sans spécifier qu'il s'agit d'un cluster privé, le contrôleur d'entrée par défaut est créé avec un scope
défini sur External
. Les administrateurs de clusters peuvent modifier un contrôleur d'entrée à portée External
en Internal
.
Conditions préalables
-
Vous avez installé le CLI
oc
.
Procédure
Pour modifier un contrôleur d'entrée à portée de
External
enInternal
, entrez la commande suivante :$ oc -n openshift-ingress-operator patch ingresscontrollers/default --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"Internal"}}}}'
Pour vérifier l'état du contrôleur d'entrée, entrez la commande suivante :
$ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
La condition d'état
Progressing
indique si vous devez prendre d'autres mesures. Par exemple, la condition d'état peut indiquer que vous devez supprimer le service en entrant la commande suivante :$ oc -n openshift-ingress delete services/router-default
Si vous supprimez le service, l'opérateur d'entrée le recrée en tant que
Internal
.
11.1.2. Configuration de l'étendue de la publication du point d'extrémité du contrôleur d'entrée sur Externe
Lorsqu'un administrateur de cluster installe un nouveau cluster sans spécifier qu'il s'agit d'un cluster privé, le contrôleur d'entrée par défaut est créé avec une adresse scope
définie sur External
.
La portée du contrôleur d'entrée peut être configurée pour être Internal
pendant l'installation ou après, et les administrateurs de clusters peuvent changer un contrôleur d'entrée Internal
en External
.
Sur certaines plateformes, il est nécessaire de supprimer et de recréer le service.
La modification de l'étendue peut perturber le trafic Ingress, potentiellement pendant plusieurs minutes. Cela s'applique aux plateformes où il est nécessaire de supprimer et de recréer le service, car la procédure peut amener OpenShift Container Platform à déprovisionner l'équilibreur de charge du service existant, à en provisionner un nouveau et à mettre à jour le DNS.
Conditions préalables
-
Vous avez installé le CLI
oc
.
Procédure
Pour modifier un contrôleur d'entrée à portée de
Internal
enExternal
, entrez la commande suivante :$ oc -n openshift-ingress-operator patch ingresscontrollers/private --type=merge --patch='{"spec":{"endpointPublishingStrategy":{"type":"LoadBalancerService","loadBalancer":{"scope":"External"}}}}'
Pour vérifier l'état du contrôleur d'entrée, entrez la commande suivante :
$ oc -n openshift-ingress-operator get ingresscontrollers/default -o yaml
La condition d'état
Progressing
indique si vous devez prendre d'autres mesures. Par exemple, la condition d'état peut indiquer que vous devez supprimer le service en entrant la commande suivante :$ oc -n openshift-ingress delete services/router-default
Si vous supprimez le service, l'opérateur d'entrée le recrée en tant que
External
.
11.2. Ressources supplémentaires
- Pour plus d'informations, voir les paramètres de configuration du contrôleur d'entrée.
Chapitre 12. Vérification de la connectivité à un point d'extrémité
L'opérateur de réseau de cluster (CNO) exécute un contrôleur, le contrôleur de contrôle de connectivité, qui effectue un contrôle de l'état des connexions entre les ressources de votre cluster. En examinant les résultats des contrôles de santé, vous pouvez diagnostiquer les problèmes de connexion ou éliminer la connectivité réseau comme cause d'un problème que vous étudiez.
12.1. Vérification de l'état des connexions
Pour vérifier que les ressources de la grappe sont accessibles, une connexion TCP est établie avec chacun des services API de grappe suivants :
- Service de serveur API Kubernetes
- Points d'extrémité du serveur API Kubernetes
- Service de serveur API OpenShift
- Points d'extrémité du serveur API OpenShift
- Équilibreurs de charge
Pour vérifier que les services et les points de terminaison des services sont accessibles sur chaque nœud de la grappe, une connexion TCP est établie avec chacune des cibles suivantes :
- Service cible de bilan de santé
- Points finaux cibles du bilan de santé
12.2. Mise en œuvre des bilans de santé des connexions
Le contrôleur de vérification de la connectivité orchestre les vérifications de connexion dans votre cluster. Les résultats des tests de connexion sont stockés dans les objets PodNetworkConnectivity
de l'espace de noms openshift-network-diagnostics
. Les tests de connexion sont effectués en parallèle toutes les minutes.
L'opérateur de réseau de grappe (CNO) déploie plusieurs ressources dans la grappe pour envoyer et recevoir des contrôles de santé de la connectivité :
- Bilan de santé source
-
Ce programme se déploie dans un seul ensemble de répliques de pods géré par un objet
Deployment
. Le programme consomme des objetsPodNetworkConnectivity
et se connecte au sitespec.targetEndpoint
spécifié dans chaque objet. - Objectif du bilan de santé
- Un module déployé dans le cadre d'un ensemble de démons sur chaque nœud du cluster. Ce module est à l'écoute des contrôles de santé entrants. La présence de ce module sur chaque nœud permet de tester la connectivité de chaque nœud.
12.3. Champs de l'objet PodNetworkConnectivityCheck
Les champs de l'objet PodNetworkConnectivityCheck
sont décrits dans les tableaux suivants.
Tableau 12.1. Champs de l'objet PodNetworkConnectivityCheck
Field | Type | Description |
---|---|---|
|
|
Le nom de l'objet au format suivant :
|
|
|
L'espace de noms auquel l'objet est associé. Cette valeur est toujours |
|
|
Le nom du pod d'où provient le contrôle de connexion, par exemple |
|
|
La cible de la vérification de la connexion, telle que |
|
| Configuration du certificat TLS à utiliser. |
|
| Le nom du certificat TLS utilisé, le cas échéant. La valeur par défaut est une chaîne vide. |
|
| Un objet représentant l'état du test de connexion et les journaux des succès et échecs récents de la connexion. |
|
| Le dernier état de la vérification de la connexion et tous les états précédents. |
|
| Journaux des tests de connexion pour les tentatives infructueuses. |
|
| Connecter les journaux de tests couvrant les périodes de pannes éventuelles. |
|
| Journaux de tests de connexion pour les tentatives réussies. |
Le tableau suivant décrit les champs des objets du tableau status.conditions
:
Tableau 12.2. statut.conditions
Field | Type | Description |
---|---|---|
|
| Moment où l'état de la connexion est passé d'un état à un autre. |
|
| Les détails de la dernière transition dans un format lisible par l'homme. |
|
| Le dernier état de la transition dans un format lisible par machine. |
|
| L'état de la condition. |
|
| Le type d'affection. |
Le tableau suivant décrit les champs des objets du tableau status.conditions
:
Tableau 12.3. statut.pannes
Field | Type | Description |
---|---|---|
|
| Date à laquelle l'échec de la connexion a été résolu. |
|
| Entrées du journal de connexion, y compris l'entrée du journal relative à la fin réussie de la panne. |
|
| Un résumé des détails de la panne dans un format lisible par l'homme. |
|
| Date à laquelle l'échec de la connexion a été détecté pour la première fois. |
|
| Entrées du journal de connexion, y compris l'échec initial. |
Champs du journal des connexions
Les champs d'une entrée du journal des connexions sont décrits dans le tableau suivant. L'objet est utilisé dans les champs suivants :
-
status.failures[]
-
status.successes[]
-
status.outages[].startLogs[]
-
status.outages[].endLogs[]
Tableau 12.4. Objet du journal des connexions
Field | Type | Description |
---|---|---|
|
| Enregistre la durée de l'action. |
|
| Fournit l'état dans un format lisible par l'homme. |
|
|
Fournit la raison de l'état dans un format lisible par la machine. La valeur est l'une des suivantes : |
|
| Indique si l'entrée du journal est un succès ou un échec. |
|
| Heure de début de la vérification de la connexion. |
12.4. Vérification de la connectivité réseau d'un terminal
En tant qu'administrateur de cluster, vous pouvez vérifier la connectivité d'un point d'extrémité, tel qu'un serveur API, un équilibreur de charge, un service ou un pod.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
.
Procédure
Pour dresser la liste des objets
PodNetworkConnectivityCheck
en cours, entrez la commande suivante :$ oc get podnetworkconnectivitycheck -n openshift-network-diagnostics
Exemple de sortie
NAME AGE network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-1 73m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-2 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-kubernetes-apiserver-service-cluster 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-kubernetes-default-service-cluster 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-load-balancer-api-external 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-load-balancer-api-internal 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-network-check-target-ci-ln-x5sv9rb-f76d1-4rzrp-master-0 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-network-check-target-ci-ln-x5sv9rb-f76d1-4rzrp-master-1 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-network-check-target-ci-ln-x5sv9rb-f76d1-4rzrp-master-2 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-network-check-target-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh 74m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-network-check-target-ci-ln-x5sv9rb-f76d1-4rzrp-worker-c-n8mbf 74m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-network-check-target-ci-ln-x5sv9rb-f76d1-4rzrp-worker-d-4hnrz 74m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-network-check-target-service-cluster 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-openshift-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-openshift-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-1 75m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-openshift-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-2 74m network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-openshift-apiserver-service-cluster 75m
Consulter les journaux des tests de connexion :
- À partir de la sortie de la commande précédente, identifiez le point d'extrémité pour lequel vous souhaitez consulter les journaux de connectivité.
Pour visualiser l'objet, entrez la commande suivante :
$ oc get podnetworkconnectivitycheck <name> \ -n openshift-network-diagnostics -o yaml
où
<name>
indique le nom de l'objetPodNetworkConnectivityCheck
.Exemple de sortie
apiVersion: controlplane.operator.openshift.io/v1alpha1 kind: PodNetworkConnectivityCheck metadata: name: network-check-source-ci-ln-x5sv9rb-f76d1-4rzrp-worker-b-6xdmh-to-kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0 namespace: openshift-network-diagnostics ... spec: sourcePod: network-check-source-7c88f6d9f-hmg2f targetEndpoint: 10.0.0.4:6443 tlsClientCert: name: "" status: conditions: - lastTransitionTime: "2021-01-13T20:11:34Z" message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnectSuccess status: "True" type: Reachable failures: - latency: 2.241775ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: failed to establish a TCP connection to 10.0.0.4:6443: dial tcp 10.0.0.4:6443: connect: connection refused' reason: TCPConnectError success: false time: "2021-01-13T20:10:34Z" - latency: 2.582129ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: failed to establish a TCP connection to 10.0.0.4:6443: dial tcp 10.0.0.4:6443: connect: connection refused' reason: TCPConnectError success: false time: "2021-01-13T20:09:34Z" - latency: 3.483578ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: failed to establish a TCP connection to 10.0.0.4:6443: dial tcp 10.0.0.4:6443: connect: connection refused' reason: TCPConnectError success: false time: "2021-01-13T20:08:34Z" outages: - end: "2021-01-13T20:11:34Z" endLogs: - latency: 2.032018ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T20:11:34Z" - latency: 2.241775ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: failed to establish a TCP connection to 10.0.0.4:6443: dial tcp 10.0.0.4:6443: connect: connection refused' reason: TCPConnectError success: false time: "2021-01-13T20:10:34Z" - latency: 2.582129ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: failed to establish a TCP connection to 10.0.0.4:6443: dial tcp 10.0.0.4:6443: connect: connection refused' reason: TCPConnectError success: false time: "2021-01-13T20:09:34Z" - latency: 3.483578ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: failed to establish a TCP connection to 10.0.0.4:6443: dial tcp 10.0.0.4:6443: connect: connection refused' reason: TCPConnectError success: false time: "2021-01-13T20:08:34Z" message: Connectivity restored after 2m59.999789186s start: "2021-01-13T20:08:34Z" startLogs: - latency: 3.483578ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: failed to establish a TCP connection to 10.0.0.4:6443: dial tcp 10.0.0.4:6443: connect: connection refused' reason: TCPConnectError success: false time: "2021-01-13T20:08:34Z" successes: - latency: 2.845865ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:14:34Z" - latency: 2.926345ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:13:34Z" - latency: 2.895796ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:12:34Z" - latency: 2.696844ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:11:34Z" - latency: 1.502064ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:10:34Z" - latency: 1.388857ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:09:34Z" - latency: 1.906383ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:08:34Z" - latency: 2.089073ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:07:34Z" - latency: 2.156994ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:06:34Z" - latency: 1.777043ms message: 'kubernetes-apiserver-endpoint-ci-ln-x5sv9rb-f76d1-4rzrp-master-0: tcp connection to 10.0.0.4:6443 succeeded' reason: TCPConnect success: true time: "2021-01-13T21:05:34Z"
Chapitre 13. Modification du MTU pour le réseau de la grappe
En tant qu'administrateur de grappe, vous pouvez modifier le MTU du réseau de la grappe après l'installation de la grappe. Ce changement est perturbant car les nœuds du cluster doivent être redémarrés pour finaliser le changement de MTU. Vous ne pouvez modifier le MTU que pour les clusters utilisant les plugins réseau OVN-Kubernetes ou OpenShift SDN.
13.1. À propos du MTU du cluster
Lors de l'installation, l'unité de transmission maximale (MTU) du réseau de la grappe est détectée automatiquement sur la base du MTU de l'interface réseau primaire des nœuds de la grappe. Normalement, il n'est pas nécessaire de remplacer le MTU détecté.
Il est possible que vous souhaitiez modifier le MTU du réseau de la grappe pour plusieurs raisons :
- Le MTU détecté lors de l'installation du cluster n'est pas correct pour votre infrastructure
- L'infrastructure de votre cluster nécessite désormais un MTU différent, par exemple suite à l'ajout de nœuds nécessitant un MTU différent pour des performances optimales
Vous pouvez modifier le MTU du cluster uniquement pour les plugins de réseau de cluster OVN-Kubernetes et OpenShift SDN.
13.1.1. Considérations relatives à l'interruption de service
Lorsque vous initiez un changement de MTU sur votre cluster, les effets suivants peuvent avoir un impact sur la disponibilité du service :
- Au moins deux redémarrages en continu sont nécessaires pour achever la migration vers un nouveau MTU. Pendant cette période, certains nœuds ne sont pas disponibles car ils redémarrent.
- Les applications spécifiques déployées sur le cluster avec des intervalles de temporisation plus courts que l'intervalle de temporisation TCP absolu peuvent subir des perturbations pendant le changement de MTU.
13.1.2. Sélection de la valeur MTU
Lorsque vous planifiez votre migration MTU, il y a deux valeurs MTU liées mais distinctes à prendre en compte.
- Hardware MTU: Cette valeur MTU est définie en fonction des spécificités de votre infrastructure réseau.
Cluster network MTU: Cette valeur MTU est toujours inférieure à la valeur MTU de votre matériel pour tenir compte de l'overlay du réseau cluster. L'overhead spécifique est déterminé par votre plugin réseau :
-
OVN-Kubernetes:
100
octets -
OpenShift SDN:
50
octets
-
OVN-Kubernetes:
Si votre cluster requiert des valeurs MTU différentes pour les différents nœuds, vous devez soustraire la valeur overhead de votre plugin réseau de la valeur MTU la plus basse utilisée par n'importe quel nœud de votre cluster. Par exemple, si certains nœuds de votre grappe ont un MTU de 9001
, et d'autres de 1500
, vous devez fixer cette valeur à 1400
.
13.1.3. Comment fonctionne le processus de migration
Le tableau suivant résume le processus de migration en distinguant les étapes du processus initiées par l'utilisateur et les actions que la migration exécute en réponse.
Tableau 13.1. Migration en direct du MTU du cluster
Étapes initiées par l'utilisateur | Activité OpenShift Container Platform |
---|---|
Définissez les valeurs suivantes dans la configuration de l'opérateur de réseau de cluster :
| Cluster Network Operator (CNO): Confirme que chaque champ a une valeur valide.
Si les valeurs fournies sont valides, le CNO écrit une nouvelle configuration temporaire avec le MTU pour le réseau cluster fixé à la valeur du champ Machine Config Operator (MCO): Effectue un redémarrage progressif de chaque nœud de la grappe. |
Reconfigurez le MTU de l'interface réseau principale pour les nœuds de la grappe. Pour ce faire, vous pouvez utiliser différentes méthodes, notamment
| N/A |
Définissez la valeur | Machine Config Operator (MCO): Effectue un redémarrage progressif de chaque nœud du cluster avec la nouvelle configuration MTU. |
13.2. Modifier le MTU du cluster
En tant qu'administrateur de cluster, vous pouvez modifier l'unité de transmission maximale (MTU) de votre cluster. La migration est perturbatrice et les nœuds de votre cluster peuvent être temporairement indisponibles pendant la mise à jour du MTU.
La procédure suivante décrit comment modifier le MTU de la grappe en utilisant les configurations de machine, le DHCP ou une ISO. Si vous utilisez l'approche DHCP ou ISO, vous devez vous référer aux artefacts de configuration que vous avez conservés après l'installation de votre cluster pour compléter la procédure.
Conditions préalables
-
You installed the OpenShift CLI (
oc
). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
cluster-admin
. Vous avez identifié le MTU cible pour votre cluster. Le MTU correct varie en fonction du plugin réseau utilisé par votre cluster :
-
OVN-Kubernetes: Le MTU du cluster doit être défini à
100
de moins que la valeur MTU matérielle la plus basse de votre cluster. -
OpenShift SDN: Le MTU du cluster doit être défini à
50
de moins que la valeur MTU matérielle la plus basse de votre cluster.
-
OVN-Kubernetes: Le MTU du cluster doit être défini à
Procédure
Pour augmenter ou diminuer le MTU pour le réseau cluster, suivez la procédure suivante.
Pour obtenir le MTU actuel du réseau de la grappe, entrez la commande suivante :
$ oc describe network.config cluster
Exemple de sortie
... Status: Cluster Network: Cidr: 10.217.0.0/22 Host Prefix: 23 Cluster Network MTU: 1400 Network Type: OpenShiftSDN Service Network: 10.217.4.0/23 ...
Préparez votre configuration pour le MTU matériel :
Si votre MTU matériel est spécifié avec DHCP, mettez à jour votre configuration DHCP, par exemple avec la configuration dnsmasq suivante :
dhcp-option-force=26,<mtu>
où :
<mtu>
- Spécifie le MTU matériel que le serveur DHCP doit annoncer.
- Si le MTU de votre matériel est spécifié par une ligne de commande du noyau avec PXE, mettez à jour cette configuration en conséquence.
Si votre MTU matériel est spécifié dans une configuration de connexion NetworkManager, effectuez les étapes suivantes. Cette approche est la valeur par défaut d'OpenShift Container Platform si vous ne spécifiez pas explicitement votre configuration réseau avec DHCP, une ligne de commande du noyau ou une autre méthode. Vos nœuds de cluster doivent tous utiliser la même configuration réseau sous-jacente pour que la procédure suivante fonctionne sans modification.
Recherchez l'interface réseau principale :
Si vous utilisez le plugin réseau OpenShift SDN, entrez la commande suivante :
$ oc debug node/<node_name> -- chroot /host ip route list match 0.0.0.0/0 | awk '{print $5 }'
où :
<node_name>
- Spécifie le nom d'un nœud dans votre cluster.
Si vous utilisez le plugin réseau OVN-Kubernetes, entrez la commande suivante :
oc debug node/<node_name> -- chroot /host nmcli -g connection.interface-name c show ovs-if-phys0
où :
<node_name>
- Spécifie le nom d'un nœud dans votre cluster.
Créez la configuration NetworkManager suivante dans le fichier
<interface>-mtu.conf
:Exemple de configuration de la connexion NetworkManager
[connection-<interface>-mtu] match-device=interface-name:<interface> ethernet.mtu=<mtu>
où :
<mtu>
- Spécifie la nouvelle valeur du MTU matériel.
<interface>
- Spécifie le nom de l'interface réseau primaire.
Créez deux objets
MachineConfig
, l'un pour les nœuds du plan de contrôle et l'autre pour les nœuds de travail de votre cluster :Créez la configuration Butane suivante dans le fichier
control-plane-interface.bu
:variant: openshift version: 4.12.0 metadata: name: 01-control-plane-interface labels: machineconfiguration.openshift.io/role: master storage: files: - path: /etc/NetworkManager/conf.d/99-<interface>-mtu.conf 1 contents: local: <interface>-mtu.conf 2 mode: 0600
Créez la configuration Butane suivante dans le fichier
worker-interface.bu
:variant: openshift version: 4.12.0 metadata: name: 01-worker-interface labels: machineconfiguration.openshift.io/role: worker storage: files: - path: /etc/NetworkManager/conf.d/99-<interface>-mtu.conf 1 contents: local: <interface>-mtu.conf 2 mode: 0600
Créez des objets
MachineConfig
à partir des configurations Butane en exécutant la commande suivante :$ for manifest in control-plane-interface worker-interface; do butane --files-dir . $manifest.bu > $manifest.yaml done
Pour commencer la migration du MTU, spécifiez la configuration de la migration en entrant la commande suivante. L'opérateur Machine Config effectue un redémarrage progressif des nœuds de la grappe pour préparer le changement de MTU.
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": <overlay_from>, "to": <overlay_to> } , "machine": { "to" : <machine_to> } } } } }'
où :
<overlay_from>
- Spécifie la valeur actuelle du MTU du réseau cluster.
<overlay_to>
-
Spécifie le MTU cible pour le réseau du cluster. Cette valeur est définie par rapport à la valeur de
<machine_to>
et pour OVN-Kubernetes doit être100
moins et pour OpenShift SDN doit être50
moins. <machine_to>
- Spécifie le MTU pour l'interface réseau primaire sur le réseau hôte sous-jacent.
Exemple d'augmentation du MTU du cluster
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 9000 } , "machine": { "to" : 9100} } } } }'
Lorsque le MCO met à jour les machines de chaque pool de configuration, il redémarre chaque nœud un par un. Vous devez attendre que tous les nœuds soient mis à jour. Vérifiez l'état du pool de configuration des machines en entrant la commande suivante :
$ oc get mcp
Un nœud mis à jour avec succès a le statut suivant :
UPDATED=true
,UPDATING=false
,DEGRADED=false
.NotePar défaut, le MCO met à jour une machine par pool à la fois, ce qui fait que la durée totale de la migration augmente avec la taille du cluster.
Confirmer l'état de la configuration de la nouvelle machine sur les hôtes :
Pour répertorier l'état de la configuration de la machine et le nom de la configuration de la machine appliquée, entrez la commande suivante :
$ oc describe node | egrep "hostname|machineconfig"
Exemple de sortie
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: Done
Vérifiez que les affirmations suivantes sont vraies :
-
La valeur du champ
machineconfiguration.openshift.io/state
estDone
. -
La valeur du champ
machineconfiguration.openshift.io/currentConfig
est égale à la valeur du champmachineconfiguration.openshift.io/desiredConfig
.
-
La valeur du champ
Pour confirmer que la configuration de la machine est correcte, entrez la commande suivante :
oc get machineconfig <config_name> -o yaml | grep ExecStart
où
<config_name>
est le nom de la machine configurée dans le champmachineconfiguration.openshift.io/currentConfig
.La configuration de la machine doit inclure la mise à jour suivante de la configuration de systemd :
ExecStart=/usr/local/bin/mtu-migration.sh
Mettre à jour la valeur MTU de l'interface réseau sous-jacente :
Si vous spécifiez le nouveau MTU avec une configuration de connexion NetworkManager, entrez la commande suivante. L'opérateur MachineConfig effectue automatiquement un redémarrage des nœuds de votre cluster.
$ for manifest in control-plane-interface worker-interface; do oc create -f $manifest.yaml done
- Si vous spécifiez le nouveau MTU avec une option de serveur DHCP ou une ligne de commande du noyau et PXE, apportez les modifications nécessaires à votre infrastructure.
Lorsque le MCO met à jour les machines de chaque pool de configuration, il redémarre chaque nœud un par un. Vous devez attendre que tous les nœuds soient mis à jour. Vérifiez l'état du pool de configuration des machines en entrant la commande suivante :
$ oc get mcp
Un nœud mis à jour avec succès a le statut suivant :
UPDATED=true
,UPDATING=false
,DEGRADED=false
.NotePar défaut, le MCO met à jour une machine par pool à la fois, ce qui fait que la durée totale de la migration augmente avec la taille du cluster.
Confirmer l'état de la configuration de la nouvelle machine sur les hôtes :
Pour répertorier l'état de la configuration de la machine et le nom de la configuration de la machine appliquée, entrez la commande suivante :
$ oc describe node | egrep "hostname|machineconfig"
Exemple de sortie
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: Done
Vérifiez que les affirmations suivantes sont vraies :
-
La valeur du champ
machineconfiguration.openshift.io/state
estDone
. -
La valeur du champ
machineconfiguration.openshift.io/currentConfig
est égale à la valeur du champmachineconfiguration.openshift.io/desiredConfig
.
-
La valeur du champ
Pour confirmer que la configuration de la machine est correcte, entrez la commande suivante :
oc get machineconfig <config_name> -o yaml | grep path :
où
<config_name>
est le nom de la machine configurée dans le champmachineconfiguration.openshift.io/currentConfig
.Si la configuration de la machine est déployée avec succès, la sortie précédente contient le chemin d'accès au fichier
/etc/NetworkManager/system-connections/<connection_name>
.La configuration de la machine ne doit pas contenir la ligne
ExecStart=/usr/local/bin/mtu-migration.sh
.
Pour finaliser la migration du MTU, entrez l'une des commandes suivantes :
Si vous utilisez le plugin réseau OVN-Kubernetes :
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'
où :
<mtu>
-
Spécifie le nouveau MTU du réseau cluster que vous avez spécifié avec
<overlay_to>
.
Si vous utilisez le plugin réseau OpenShift SDN :
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "openshiftSDNConfig": { "mtu": <mtu> }}}}'
où :
<mtu>
-
Spécifie le nouveau MTU du réseau cluster que vous avez spécifié avec
<overlay_to>
.
Vérification
Vous pouvez vérifier qu'un nœud de votre cluster utilise un MTU que vous avez spécifié dans la procédure précédente.
Pour obtenir le MTU actuel du réseau de la grappe, entrez la commande suivante :
$ oc describe network.config cluster
Obtenir le MTU actuel de l'interface réseau principale d'un nœud.
Pour dresser la liste des nœuds de votre cluster, entrez la commande suivante :
$ oc get nodes
Pour obtenir le paramètre MTU actuel de l'interface réseau principale d'un nœud, entrez la commande suivante :
$ oc debug node/<node> -- chroot /host ip address show <interface>
où :
<node>
- Spécifie un nœud à partir de la sortie de l'étape précédente.
<interface>
- Spécifie le nom de l'interface réseau primaire pour le nœud.
Exemple de sortie
ens3 : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 8051
13.3. Ressources supplémentaires
Chapitre 14. Configuration de la plage de service du port de nœud
En tant qu'administrateur de grappe, vous pouvez étendre la plage de ports de nœuds disponibles. Si votre grappe utilise un grand nombre de ports de nœuds, vous devrez peut-être augmenter le nombre de ports disponibles.
La plage de ports par défaut est 30000-32767
. Vous ne pouvez jamais réduire la plage de ports, même si vous l'étendez d'abord au-delà de la plage par défaut.
14.1. Conditions préalables
-
Votre infrastructure de cluster doit autoriser l'accès aux ports que vous spécifiez dans la plage étendue. Par exemple, si vous étendez la plage de ports du nœud à
30000-32900
, la plage de ports inclusive de32768-32900
doit être autorisée par votre pare-feu ou votre configuration de filtrage de paquets.
14.2. Extension de la plage de ports du nœud
Vous pouvez étendre la plage de ports du nœud pour le cluster.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous au cluster avec un utilisateur disposant des privilèges
cluster-admin
.
Procédure
Pour étendre la plage de ports du nœud, entrez la commande suivante. Remplacez
<port>
par le plus grand numéro de port de la nouvelle plage.$ oc patch network.config.openshift.io cluster --type=merge -p \ '{ "spec": { "serviceNodePortRange": "30000-<port>" } }'
AstuceVous pouvez également appliquer le fichier YAML suivant pour mettre à jour la plage de ports du nœud :
apiVersion: config.openshift.io/v1 kind: Network metadata: name: cluster spec: serviceNodePortRange: "30000-<port>"
Exemple de sortie
network.config.openshift.io/cluster patched
Pour confirmer que la configuration est active, entrez la commande suivante. L'application de la mise à jour peut prendre plusieurs minutes.
$ oc get configmaps -n openshift-kube-apiserver config \ -o jsonpath="{.data['config\.yaml']}" | \ grep -Eo '"service-node-port-range":["[[:digit:]]+-[[:digit:]]+"]'
Exemple de sortie
"service-node-port-range":["30000-33000"]
14.3. Ressources supplémentaires
Chapitre 15. Configuration du basculement IP
Cette rubrique décrit la configuration du basculement IP pour les pods et les services sur votre cluster OpenShift Container Platform.
Le basculement IP gère un pool d'adresses IP virtuelles (VIP) sur un ensemble de nœuds. Chaque adresse VIP de l'ensemble est desservie par un nœud sélectionné dans l'ensemble. Tant qu'un seul nœud est disponible, les VIP sont desservis. Il n'existe aucun moyen de répartir explicitement les adresses VIP entre les nœuds, de sorte qu'il peut y avoir des nœuds sans adresses VIP et d'autres nœuds avec de nombreuses adresses VIP. S'il n'y a qu'un seul nœud, tous les VIP s'y trouvent.
Les VIP doivent être routables depuis l'extérieur du cluster.
Le basculement IP surveille un port sur chaque VIP afin de déterminer si le port est accessible sur le nœud. Si le port n'est pas accessible, le VIP n'est pas affecté au nœud. Si le port est défini sur 0
, cette vérification est supprimée. Le script de contrôle effectue les tests nécessaires.
Le basculement IP utilise Keepalived pour héberger un ensemble d'adresses VIP accessibles de l'extérieur sur un ensemble d'hôtes. Chaque VIP n'est desservi que par un seul hôte à la fois. Keepalived utilise le protocole VRRP (Virtual Router Redundancy Protocol) pour déterminer quel hôte, parmi l'ensemble des hôtes, dessert quel VIP. Si un hôte devient indisponible, ou si le service que Keepalived surveille ne répond pas, le VIP est basculé sur un autre hôte de l'ensemble. Cela signifie qu'un VIP est toujours servi tant qu'un hôte est disponible.
Lorsqu'un nœud exécutant Keepalived passe le script de contrôle, le VIP sur ce nœud peut entrer dans l'état master
en fonction de sa priorité et de la priorité du maître actuel et selon la stratégie de préemption.
Un administrateur de cluster peut fournir un script via la variable OPENSHIFT_HA_NOTIFY_SCRIPT
, et ce script est appelé chaque fois que l'état du VIP sur le nœud change. Keepalived utilise l'état master
lorsqu'il gère le VIP, l'état backup
lorsqu'un autre noeud gère le VIP, ou l'état fault
lorsque le script de vérification échoue. Le script de notification est appelé avec le nouvel état à chaque fois que l'état change.
Vous pouvez créer une configuration de déploiement de basculement IP sur OpenShift Container Platform. La configuration de déploiement de basculement IP spécifie l'ensemble des adresses VIP et l'ensemble des nœuds sur lesquels ils sont gérés. Un cluster peut avoir plusieurs configurations de déploiement de basculement IP, chacune gérant son propre ensemble d'adresses VIP uniques. Chaque nœud de la configuration de basculement IP exécute un pod de basculement IP, et ce pod exécute Keepalived.
Lorsque l'on utilise des VIP pour accéder à un pod avec un réseau hôte, le pod d'application s'exécute sur tous les nœuds qui exécutent les pods de basculement IP. Cela permet à n'importe quel nœud de basculement IP de devenir le maître et de desservir les VIP en cas de besoin. Si les modules d'application ne sont pas exécutés sur tous les nœuds avec basculement IP, certains nœuds de basculement IP ne desservent jamais les VIP ou certains modules d'application ne reçoivent jamais de trafic. Utilisez le même sélecteur et le même nombre de réplications, à la fois pour le basculement IP et pour les modules d'application, afin d'éviter cette incohérence.
Lorsque l'on utilise des VIP pour accéder à un service, n'importe quel nœud peut faire partie de l'ensemble de nœuds de basculement IP, puisque le service est accessible sur tous les nœuds, quel que soit l'endroit où s'exécute le module d'application. N'importe lequel des nœuds de basculement IP peut devenir maître à tout moment. Le service peut soit utiliser des IP externes et un port de service, soit utiliser une adresse NodePort
.
Lors de l'utilisation d'IP externes dans la définition du service, les VIP sont définis sur les IP externes et le port de surveillance du basculement d'IP est défini sur le port du service. Lors de l'utilisation d'un port de nœud, le port est ouvert sur chaque nœud du cluster et le service équilibre le trafic à partir du nœud qui dessert actuellement le VIP. Dans ce cas, le port de surveillance du basculement IP est défini sur NodePort
dans la définition du service.
La mise en place d'un site NodePort
est une opération privilégiée.
Même si un service VIP est hautement disponible, les performances peuvent encore être affectées. Keepalived s'assure que chaque VIP est desservi par un nœud de la configuration, et plusieurs VIP peuvent se retrouver sur le même nœud même si d'autres nœuds n'en ont pas. Les stratégies qui équilibrent la charge de manière externe sur un ensemble de VIP peuvent être contrecarrées lorsque le basculement IP place plusieurs VIP sur le même nœud.
Lorsque vous utilisez ingressIP
, vous pouvez configurer le basculement IP pour avoir la même plage VIP que la plage ingressIP
. Vous pouvez également désactiver le port de surveillance. Dans ce cas, tous les VIP apparaissent sur le même nœud du cluster. Tout utilisateur peut configurer un service avec ingressIP
et le rendre hautement disponible.
Il y a un maximum de 254 VIP dans le cluster.
15.1. Variables d'environnement pour le basculement IP
Le tableau suivant contient les variables utilisées pour configurer le basculement IP.
Tableau 15.1. Variables d'environnement pour le basculement IP
Nom de la variable | Défaut | Description |
---|---|---|
|
|
Le module de basculement IP tente d'ouvrir une connexion TCP à ce port sur chaque IP virtuelle (VIP). Si la connexion est établie, le service est considéré comme étant en cours d'exécution. Si ce port est défini sur |
|
Nom de l'interface que le basculement IP utilise pour envoyer le trafic VRRP (Virtual Router Redundancy Protocol). La valeur par défaut est | |
|
|
Le nombre de répliques à créer. Il doit correspondre à la valeur |
|
La liste des plages d'adresses IP à répliquer. Elle doit être fournie. Par exemple, | |
|
|
La valeur de décalage utilisée pour définir les ID des routeurs virtuels. L'utilisation de différentes valeurs de décalage permet à plusieurs configurations de basculement IP d'exister au sein d'un même cluster. Le décalage par défaut est |
|
Le nombre de groupes à créer pour VRRP. S'il n'est pas défini, un groupe est créé pour chaque plage IP virtuelle spécifiée avec la variable | |
| ENTRÉE |
Le nom de la chaîne iptables, pour ajouter automatiquement une règle |
| Le nom du chemin complet dans le système de fichiers pod d'un script qui est périodiquement exécuté pour vérifier que l'application fonctionne. | |
|
| Période, en secondes, pendant laquelle le script de contrôle est exécuté. |
| Le nom du chemin complet dans le système de fichiers pod d'un script qui est exécuté chaque fois que l'état change. | |
|
|
La stratégie de gestion d'un nouvel hôte de priorité supérieure. La stratégie |
15.2. Configuration du basculement IP
En tant qu'administrateur de grappe, vous pouvez configurer le basculement IP sur une grappe entière ou sur un sous-ensemble de nœuds, comme défini par le sélecteur d'étiquettes. Vous pouvez également configurer plusieurs configurations de déploiement du basculement IP dans votre grappe, chacune étant indépendante des autres.
La configuration du déploiement du basculement IP garantit qu'un pod de basculement s'exécute sur chacun des nœuds correspondant aux contraintes ou à l'étiquette utilisée.
Ce pod exécute Keepalived, qui peut surveiller un point d'extrémité et utiliser le protocole VRRP (Virtual Router Redundancy Protocol) pour basculer l'IP virtuelle (VIP) d'un nœud à l'autre si le premier nœud ne peut pas atteindre le service ou le point d'extrémité.
Pour une utilisation en production, définissez un selector
qui sélectionne au moins deux nœuds, et définissez replicas
égal au nombre de nœuds sélectionnés.
Conditions préalables
-
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
cluster-admin
. - Vous avez créé un secret de fabrication.
Procédure
Créez un compte de service de basculement IP :
$ oc create sa ipfailover
Mise à jour des contraintes de contexte de sécurité (SCC) pour
hostNetwork
:$ oc adm policy add-scc-to-user privileged -z ipfailover $ oc adm policy add-scc-to-user hostnetwork -z ipfailover
Créer un fichier YAML de déploiement pour configurer le basculement IP :
Exemple de déploiement YAML pour la configuration du basculement IP
apiVersion: apps/v1 kind: Deployment metadata: name: ipfailover-keepalived 1 labels: ipfailover: hello-openshift spec: strategy: type: Recreate replicas: 2 selector: matchLabels: ipfailover: hello-openshift template: metadata: labels: ipfailover: hello-openshift spec: serviceAccountName: ipfailover privileged: true hostNetwork: true nodeSelector: node-role.kubernetes.io/worker: "" containers: - name: openshift-ipfailover image: quay.io/openshift/origin-keepalived-ipfailover ports: - containerPort: 63000 hostPort: 63000 imagePullPolicy: IfNotPresent securityContext: privileged: true volumeMounts: - name: lib-modules mountPath: /lib/modules readOnly: true - name: host-slash mountPath: /host readOnly: true mountPropagation: HostToContainer - name: etc-sysconfig mountPath: /etc/sysconfig readOnly: true - name: config-volume mountPath: /etc/keepalive env: - name: OPENSHIFT_HA_CONFIG_NAME value: "ipfailover" - name: OPENSHIFT_HA_VIRTUAL_IPS 2 value: "1.1.1.1-2" - name: OPENSHIFT_HA_VIP_GROUPS 3 value: "10" - name: OPENSHIFT_HA_NETWORK_INTERFACE 4 value: "ens3" #The host interface to assign the VIPs - name: OPENSHIFT_HA_MONITOR_PORT 5 value: "30060" - name: OPENSHIFT_HA_VRRP_ID_OFFSET 6 value: "0" - name: OPENSHIFT_HA_REPLICA_COUNT 7 value: "2" #Must match the number of replicas in the deployment - name: OPENSHIFT_HA_USE_UNICAST value: "false" #- name: OPENSHIFT_HA_UNICAST_PEERS #value: "10.0.148.40,10.0.160.234,10.0.199.110" - name: OPENSHIFT_HA_IPTABLES_CHAIN 8 value: "INPUT" #- name: OPENSHIFT_HA_NOTIFY_SCRIPT 9 # value: /etc/keepalive/mynotifyscript.sh - name: OPENSHIFT_HA_CHECK_SCRIPT 10 value: "/etc/keepalive/mycheckscript.sh" - name: OPENSHIFT_HA_PREEMPTION 11 value: "preempt_delay 300" - name: OPENSHIFT_HA_CHECK_INTERVAL 12 value: "2" livenessProbe: initialDelaySeconds: 10 exec: command: - pgrep - keepalived volumes: - name: lib-modules hostPath: path: /lib/modules - name: host-slash hostPath: path: / - name: etc-sysconfig hostPath: path: /etc/sysconfig # config-volume contains the check script # created with `oc create configmap keepalived-checkscript --from-file=mycheckscript.sh` - configMap: defaultMode: 0755 name: keepalived-checkscript name: config-volume imagePullSecrets: - name: openshift-pull-secret 13
- 1
- Le nom du déploiement du basculement IP.
- 2
- La liste des plages d'adresses IP à répliquer. Elle doit être fournie. Par exemple,
1.2.3.4-6,1.2.3.9
. - 3
- Le nombre de groupes à créer pour VRRP. S'il n'est pas défini, un groupe est créé pour chaque plage IP virtuelle spécifiée avec la variable
OPENSHIFT_HA_VIP_GROUPS
. - 4
- Nom de l'interface que le basculement IP utilise pour envoyer le trafic VRRP. Par défaut,
eth0
est utilisé. - 5
- Le module de basculement IP tente d'ouvrir une connexion TCP à ce port sur chaque VIP. Si la connexion est établie, le service est considéré comme étant en cours d'exécution. Si ce port est défini sur
0
, le test est toujours réussi. La valeur par défaut est80
. - 6
- La valeur de décalage utilisée pour définir les ID des routeurs virtuels. L'utilisation de différentes valeurs de décalage permet à plusieurs configurations de basculement IP d'exister au sein d'un même cluster. Le décalage par défaut est
0
, et la plage autorisée va de0
à255
. - 7
- Le nombre de répliques à créer. Il doit correspondre à la valeur
spec.replicas
dans la configuration du déploiement du basculement IP. La valeur par défaut est2
. - 8
- Le nom de la chaîne
iptables
pour ajouter automatiquement une règleiptables
afin d'autoriser le trafic VRRP. Si la valeur n'est pas définie, une règleiptables
n'est pas ajoutée. Si la chaîne n'existe pas, elle n'est pas créée et Keepalived fonctionne en mode unicast. La valeur par défaut estINPUT
. - 9
- Le nom du chemin complet dans le système de fichiers pod d'un script qui est exécuté chaque fois que l'état change.
- 10
- Le nom du chemin complet dans le système de fichiers pod d'un script qui est périodiquement exécuté pour vérifier que l'application fonctionne.
- 11
- La stratégie de gestion d'un nouvel hôte de priorité supérieure. La valeur par défaut est
preempt_delay 300
, ce qui fait qu'une instance Keepalived prend en charge un VIP après 5 minutes si un maître de priorité inférieure détient le VIP. - 12
- Période, en secondes, pendant laquelle le script de vérification est exécuté. La valeur par défaut est
2
. - 13
- Créez le secret d'extraction avant de créer le déploiement, sinon vous obtiendrez une erreur lors de la création du déploiement.
15.3. À propos des adresses IP virtuelles
Keepalived gère un ensemble d'adresses IP virtuelles (VIP). L'administrateur doit s'assurer que toutes ces adresses :
- Sont accessibles sur les hôtes configurés depuis l'extérieur du cluster.
- Ne sont pas utilisés à d'autres fins au sein du groupe.
Keepalived sur chaque nœud détermine si le service nécessaire est en cours d'exécution. Si c'est le cas, les VIP sont pris en charge et Keepalived participe à la négociation pour déterminer quel nœud dessert le VIP. Pour qu'un nœud puisse participer, le service doit être à l'écoute sur le port de surveillance d'un VIP ou le contrôle doit être désactivé.
Chaque VIP de l'ensemble peut être desservi par un nœud différent.
15.4. Configuration des scripts de contrôle et de notification
Keepalived surveille la santé de l'application en exécutant périodiquement un script de vérification optionnel fourni par l'utilisateur. Par exemple, le script peut tester un serveur web en émettant une requête et en vérifiant la réponse.
Lorsqu'un script de contrôle n'est pas fourni, un simple script par défaut est exécuté pour tester la connexion TCP. Ce test par défaut est supprimé lorsque le port du moniteur est 0
.
Chaque module de basculement IP gère un démon Keepalived qui gère une ou plusieurs IP virtuelles (VIP) sur le nœud où le module est exécuté. Le démon Keepalived conserve l'état de chaque VIP pour ce nœud. Un VIP particulier sur un nœud particulier peut être dans l'état master
, backup
ou fault
.
Lorsque le script de vérification de ce VIP sur le nœud qui est dans l'état master
échoue, le VIP sur ce nœud entre dans l'état fault
, ce qui déclenche une renégociation. Au cours de la renégociation, tous les VIP d'un nœud qui ne sont pas dans l'état fault
participent au choix du nœud qui prendra en charge le VIP. En fin de compte, le VIP entre dans l'état master
sur un nœud, et le VIP reste dans l'état backup
sur les autres nœuds.
Lorsqu'un nœud avec un VIP dans l'état backup
échoue, le VIP sur ce nœud entre dans l'état fault
. Lorsque le script de contrôle réussit à nouveau pour un VIP sur un nœud dans l'état fault
, le VIP sur ce nœud quitte l'état fault
et négocie pour entrer dans l'état master
. Le VIP sur ce nœud peut alors entrer dans l'état master
ou backup
.
En tant qu'administrateur du cluster, vous pouvez fournir un script de notification optionnel, qui est appelé chaque fois que l'état change. Keepalived transmet les trois paramètres suivants au script :
-
$1
-group
ouinstance
-
$2
- Nom du sitegroup
ouinstance
-
$3
- Le nouvel État :master
,backup
, oufault
Les scripts de vérification et de notification s'exécutent dans le module de basculement IP et utilisent le système de fichiers du module, et non le système de fichiers de l'hôte. Toutefois, le module de basculement IP rend le système de fichiers hôte disponible sous le chemin de montage /hosts
. Lors de la configuration d'un script de contrôle ou de notification, vous devez fournir le chemin d'accès complet au script. L'approche recommandée pour fournir les scripts est d'utiliser une carte de configuration.
Les noms des chemins complets des scripts de vérification et de notification sont ajoutés au fichier de configuration de Keepalived, _/etc/keepalived/keepalived.conf
, qui est chargé à chaque démarrage de Keepalived. Les scripts peuvent être ajoutés au pod avec une carte de configuration comme suit.
Conditions préalables
-
You installed the OpenShift CLI (
oc
). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
cluster-admin
.
Procédure
Créez le script souhaité et créez une carte de configuration pour le contenir. Le script n'a pas d'arguments d'entrée et doit renvoyer
0
pourOK
et1
pourfail
.Le script de vérification,
mycheckscript.sh
:#!/bin/bash # Whatever tests are needed # E.g., send request and verify response exit 0
Créer la carte de configuration :
$ oc create configmap mycustomcheck --from-file=mycheckscript.sh
Ajouter le script au pod. L'adresse
defaultMode
pour les fichiers de configuration montés doit pouvoir être exécutée à l'aide des commandesoc
ou en modifiant la configuration du déploiement. Une valeur de0755
,493
décimal, est typique :$ oc set env deploy/ipfailover-keepalived \ OPENSHIFT_HA_CHECK_SCRIPT=/etc/keepalive/mycheckscript.sh
$ oc set volume deploy/ipfailover-keepalived --add --overwrite \ --name=config-volume \ --mount-path=/etc/keepalive \ --source='{"configMap": { "name": "mycustomcheck", "defaultMode": 493}}'
NoteLa commande
oc set env
est sensible aux espaces blancs. Il ne doit pas y avoir d'espace de part et d'autre du signe=
.AstuceVous pouvez également modifier la configuration du déploiement de
ipfailover-keepalived
:$ oc edit deploy ipfailover-keepalived
spec: containers: - env: - name: OPENSHIFT_HA_CHECK_SCRIPT 1 value: /etc/keepalive/mycheckscript.sh ... volumeMounts: 2 - mountPath: /etc/keepalive name: config-volume dnsPolicy: ClusterFirst ... volumes: 3 - configMap: defaultMode: 0755 4 name: customrouter name: config-volume ...
- 1
- Dans le champ
spec.container.env
, ajoutez la variable d'environnementOPENSHIFT_HA_CHECK_SCRIPT
pour qu'elle pointe vers le fichier de script monté. - 2
- Ajoutez le champ
spec.container.volumeMounts
pour créer le point de montage. - 3
- Ajouter un nouveau champ
spec.volumes
pour mentionner la carte de configuration. - 4
- Cela permet de définir l'autorisation d'exécution des fichiers. Lors de la relecture, elle est affichée en décimal,
493
.
Enregistrez les modifications et quittez l'éditeur. Cette opération redémarre
ipfailover-keepalived
.
15.5. Configuration de la préemption VRRP
Lorsqu'une IP virtuelle (VIP) sur un nœud quitte l'état fault
en passant le script de contrôle, la VIP sur le nœud entre dans l'état backup
si elle a une priorité inférieure à celle de la VIP sur le nœud qui est actuellement dans l'état master
. Toutefois, si le VIP du nœud qui quitte l'état fault
a une priorité plus élevée, la stratégie de préemption détermine son rôle dans le cluster.
La stratégie nopreempt
ne déplace pas master
du VIP de priorité inférieure sur l'hôte vers le VIP de priorité supérieure sur l'hôte. Avec preempt_delay 300
, la valeur par défaut, Keepalived attend les 300 secondes spécifiées et déplace master
vers le VIP de plus haute priorité sur l'hôte.
Conditions préalables
-
You installed the OpenShift CLI (
oc
).
Procédure
Pour spécifier la préemption, entrez dans
oc edit deploy ipfailover-keepalived
pour modifier la configuration du déploiement du routeur :$ oc edit deploy ipfailover-keepalived
... spec: containers: - env: - name: OPENSHIFT_HA_PREEMPTION 1 value: preempt_delay 300 ...
- 1
- Définir la valeur de
OPENSHIFT_HA_PREEMPTION
:-
preempt_delay 300
: Keepalived attend les 300 secondes spécifiées et déplacemaster
vers le VIP de priorité supérieure sur l'hôte. Il s'agit de la valeur par défaut. -
nopreempt
: ne déplace pasmaster
du VIP de priorité inférieure sur l'hôte vers le VIP de priorité supérieure sur l'hôte.
-
15.6. À propos du décalage de l'ID VRRP
Chaque module de basculement IP géré par la configuration de déploiement de basculement IP, 1
module par nœud ou réplique, exécute un démon Keepalived. Au fur et à mesure que des configurations de déploiement de basculement IP sont configurées, d'autres modules sont créés et d'autres démons participent à la négociation commune du protocole VRRP (Virtual Router Redundancy Protocol). Cette négociation est effectuée par tous les démons Keepalived et détermine quels nœuds gèrent quelles IP virtuelles (VIP).
En interne, Keepalived attribue un vrrp-id
unique à chaque VIP. La négociation utilise cet ensemble de vrrp-ids
, lorsqu'une décision est prise, le VIP correspondant au vrrp-id
gagnant est pris en charge sur le nœud gagnant.
Par conséquent, pour chaque VIP défini dans la configuration du déploiement du basculement IP, le pod de basculement IP doit attribuer un vrrp-id
correspondant. Pour ce faire, il commence par OPENSHIFT_HA_VRRP_ID_OFFSET
et attribue séquentiellement vrrp-ids
à la liste des VIP. Les valeurs de vrrp-ids
peuvent être comprises dans l'intervalle 1..255
.
Lorsqu'il existe plusieurs configurations de déploiement de basculement IP, vous devez spécifier OPENSHIFT_HA_VRRP_ID_OFFSET
pour qu'il soit possible d'augmenter le nombre de VIP dans la configuration de déploiement et qu'aucune des plages vrrp-id
ne se chevauche.
15.7. Configuration du basculement IP pour plus de 254 adresses
La gestion du basculement IP est limitée à 254 groupes d'adresses IP virtuelles (VIP). Par défaut, OpenShift Container Platform attribue une adresse IP à chaque groupe. Vous pouvez utiliser la variable OPENSHIFT_HA_VIP_GROUPS
pour changer cela afin que plusieurs adresses IP soient dans chaque groupe et définir le nombre de groupes VIP disponibles pour chaque instance VRRP (Virtual Router Redundancy Protocol) lors de la configuration du basculement IP.
Le regroupement des VIP permet d'élargir la gamme d'attribution des VIP par VRRP dans le cas d'événements de basculement VRRP, et est utile lorsque tous les hôtes du cluster ont accès à un service localement. Par exemple, lorsqu'un service est exposé avec un ExternalIP
.
En règle générale, pour le basculement, ne limitez pas les services, tels que le routeur, à un hôte spécifique. Au contraire, les services doivent être répliqués sur chaque hôte de sorte qu'en cas de basculement IP, les services ne doivent pas être recréés sur le nouvel hôte.
Si vous utilisez les contrôles de santé d'OpenShift Container Platform, la nature du basculement IP et des groupes signifie que toutes les instances du groupe ne sont pas contrôlées. Pour cette raison, les contrôles de santé de Kubernetes doivent être utilisés pour s'assurer que les services sont actifs.
Conditions préalables
-
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
cluster-admin
.
Procédure
Pour modifier le nombre d'adresses IP attribuées à chaque groupe, modifiez la valeur de la variable
OPENSHIFT_HA_VIP_GROUPS
, par exemple :Exemple
Deployment
YAML pour la configuration du basculement IP... spec: env: - name: OPENSHIFT_HA_VIP_GROUPS 1 value: "3" ...
- 1
- Si
OPENSHIFT_HA_VIP_GROUPS
est défini sur3
dans un environnement comportant sept VIP, il crée trois groupes, assignant trois VIP au premier groupe et deux VIP aux deux groupes restants.
Si le nombre de groupes défini par OPENSHIFT_HA_VIP_GROUPS
est inférieur au nombre d'adresses IP définies pour le basculement, le groupe contient plus d'une adresse IP et toutes les adresses sont déplacées en tant qu'unité unique.
15.8. Haute disponibilité Pour ingressIP
Dans les clusters non-cloud, il est possible de combiner le basculement IP et ingressIP
vers un service. Il en résulte des services à haute disponibilité pour les utilisateurs qui créent des services à l'aide de ingressIP
.
L'approche consiste à spécifier une plage ingressIPNetworkCIDR
et à utiliser la même plage lors de la création de la configuration ipfailover.
Étant donné que le basculement IP peut prendre en charge un maximum de 255 VIP pour l'ensemble du cluster, le site ingressIPNetworkCIDR
doit être /24
ou plus petit.
15.9. Suppression du basculement IP
Lors de la configuration initiale du basculement IP, les nœuds de travail du cluster sont modifiés avec une règle iptables
qui autorise explicitement les paquets multicast sur 224.0.0.18
pour Keepalived. En raison de la modification des nœuds, la suppression du basculement IP nécessite l'exécution d'un travail pour supprimer la règle iptables
et supprimer les adresses IP virtuelles utilisées par Keepalived.
Procédure
Facultatif : identifiez et supprimez tous les scripts de contrôle et de notification qui sont stockés sous forme de cartes de configuration :
Identifier si des pods pour le basculement IP utilisent une carte de configuration comme volume :
$ oc get pod -l ipfailover \ -o jsonpath="\ {range .items[?(@.spec.volumes[*].configMap)]} {'Namespace: '}{.metadata.namespace} {'Pod: '}{.metadata.name} {'Volumes that use config maps:'} {range .spec.volumes[?(@.configMap)]} {'volume: '}{.name} {'configMap: '}{.configMap.name}{'\n'}{end} {end}"
Exemple de sortie
Namespace: default Pod: keepalived-worker-59df45db9c-2x9mn Volumes that use config maps: volume: config-volume configMap: mycustomcheck
Si l'étape précédente a fourni les noms des cartes de configuration utilisées comme volumes, supprimez les cartes de configuration :
oc delete configmap <configmap_name> $ oc delete configmap <configmap_name>
Identifier un déploiement existant pour le basculement IP :
$ oc get deployment -l ipfailover
Exemple de sortie
NAMESPACE NAME READY UP-TO-DATE AVAILABLE AGE default ipfailover 2/2 2 2 105d
Supprimer le déploiement :
oc delete deployment <ipfailover_deployment_name>
Supprimez le compte de service
ipfailover
:$ oc delete sa ipfailover
Exécutez un travail qui supprime la règle des tables IP ajoutée lors de la configuration initiale du basculement IP :
Créez un fichier tel que
remove-ipfailover-job.yaml
dont le contenu est similaire à l'exemple suivant :apiVersion: batch/v1 kind: Job metadata: generateName: remove-ipfailover- labels: app: remove-ipfailover spec: template: metadata: name: remove-ipfailover spec: containers: - name: remove-ipfailover image: quay.io/openshift/origin-keepalived-ipfailover:4.12 command: ["/var/lib/ipfailover/keepalived/remove-failover.sh"] nodeSelector: kubernetes.io/hostname: <host_name> <.> restartPolicy: Never
<.> Exécutez la tâche pour chaque nœud de votre cluster qui a été configuré pour le basculement IP et remplacez le nom d'hôte à chaque fois.
Exécuter le travail :
$ oc create -f remove-ipfailover-job.yaml
Exemple de sortie
job.batch/remove-ipfailover-2h8dm created
Vérification
Confirmez que le travail a supprimé la configuration initiale du basculement IP.
$ oc logs job/remove-ipfailover-2h8dm
Exemple de sortie
remove-failover.sh: OpenShift IP Failover service terminating. - Removing ip_vs module ... - Cleaning up ... - Releasing VIPs (interface eth0) ...
Chapitre 16. Configuration des sysctl de réseau au niveau de l'interface
Sous Linux, sysctl permet à un administrateur de modifier les paramètres du noyau au moment de l'exécution. Vous pouvez modifier les sysctls réseau au niveau de l'interface en utilisant le méta plugin tuning Container Network Interface (CNI). Le méta plugin CNI de réglage fonctionne en chaîne avec un plugin CNI principal, comme illustré.

Le plugin CNI principal attribue l'interface et la transmet au méta plugin CNI de réglage au moment de l'exécution. Vous pouvez modifier certains sysctls et plusieurs attributs d'interface (mode promiscuous, mode all-multicast, MTU et adresse MAC) dans l'espace de noms du réseau en utilisant le méta plugin CNI tuning. Dans la configuration du méta plugin CNI tuning, le nom de l'interface est représenté par le jeton IFNAME
, et est remplacé par le nom réel de l'interface au moment de l'exécution.
Dans OpenShift Container Platform, le méta plugin CNI tuning ne prend en charge que la modification des sysctls réseau au niveau de l'interface.
16.1. Configuration du CNI d'accord
La procédure suivante configure le CNI de réglage pour modifier le réseau au niveau de l'interface net.ipv4.conf.IFNAME.accept_redirects
sysctl. Cet exemple permet d'accepter et d'envoyer des paquets ICMP redirigés.
Procédure
Créez une définition de pièce jointe au réseau, telle que
tuning-example.yaml
, avec le contenu suivant :apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: <name> 1 namespace: default 2 spec: config: '{ "cniVersion": "0.4.0", 3 "name": "<name>", 4 "plugins": [{ "type": "<main_CNI_plugin>" 5 }, { "type": "tuning", 6 "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" 7 } } ] }
- 1
- Spécifie le nom de la pièce jointe réseau supplémentaire à créer. Le nom doit être unique dans l'espace de noms spécifié.
- 2
- Spécifie l'espace de noms auquel l'objet est associé.
- 3
- Spécifie la version de la spécification CNI.
- 4
- Spécifie le nom de la configuration. Il est recommandé de faire correspondre le nom de la configuration à la valeur du nom de la définition de l'attachement au réseau.
- 5
- Spécifie le nom du plugin CNI principal à configurer.
- 6
- Spécifie le nom du méta plugin CNI.
- 7
- Spécifie le sysctl à définir.
Un exemple de fichier yaml est présenté ici :
apiVersion: "k8s.cni.cncf.io/v1" kind: NetworkAttachmentDefinition metadata: name: tuningnad namespace: default spec: config: '{ "cniVersion": "0.4.0", "name": "tuningnad", "plugins": [{ "type": "bridge" }, { "type": "tuning", "sysctl": { "net.ipv4.conf.IFNAME.accept_redirects": "1" } } ] }'
Appliquez le fichier yaml en exécutant la commande suivante :
$ oc apply -f tuning-example.yaml
Exemple de sortie
networkattachmentdefinition.k8.cni.cncf.io/tuningnad created
Créez un pod tel que
examplepod.yaml
avec la définition de l'attachement réseau similaire à ce qui suit :apiVersion: v1 kind: Pod metadata: name: tunepod namespace: default annotations: k8s.v1.cni.cncf.io/networks: tuningnad 1 spec: containers: - name: podexample image: centos command: ["/bin/bash", "-c", "sleep INF"] securityContext: runAsUser: 2000 2 runAsGroup: 3000 3 allowPrivilegeEscalation: false 4 capabilities: 5 drop: ["ALL"] securityContext: runAsNonRoot: true 6 seccompProfile: 7 type: RuntimeDefault
- 1
- Spécifiez le nom du site configuré
NetworkAttachmentDefinition
. - 2
runAsUser
contrôle l'identifiant de l'utilisateur avec lequel le conteneur est exécuté.- 3
runAsGroup
contrôle l'identifiant du groupe primaire avec lequel les conteneurs sont exécutés.- 4
allowPrivilegeEscalation
détermine si un pod peut demander à autoriser l'escalade des privilèges. S'il n'est pas spécifié, la valeur par défaut est true. Ce booléen contrôle directement si le drapeauno_new_privs
est activé sur le processus du conteneur.- 5
capabilities
permettent des actions privilégiées sans donner un accès complet à la racine. Cette politique permet de s'assurer que toutes les capacités sont supprimées du pod.- 6
runAsNonRoot: true
exige que le conteneur fonctionne avec un utilisateur dont l'UID est différent de 0.- 7
RuntimeDefault
active le profil seccomp par défaut pour un pod ou une charge de travail de conteneur.
Appliquez le fichier yaml en exécutant la commande suivante :
$ oc apply -f examplepod.yaml
Vérifiez que le module est créé en exécutant la commande suivante :
$ oc get pod
Exemple de sortie
NAME READY STATUS RESTARTS AGE tunepod 1/1 Running 0 47s
Connectez-vous au module en exécutant la commande suivante :
$ oc rsh tunepod
Vérifiez les valeurs des drapeaux sysctl configurés. Par exemple, trouvez la valeur
net.ipv4.conf.net1.accept_redirects
en exécutant la commande suivante :sh-4.4# sysctl net.ipv4.conf.net1.accept_redirects
Résultats attendus
net.ipv4.conf.net1.accept_redirects = 1
16.2. Ressources supplémentaires
Chapitre 17. Utilisation du protocole SCTP (Stream Control Transmission Protocol) sur un cluster bare metal
En tant qu'administrateur de cluster, vous pouvez utiliser le protocole SCTP (Stream Control Transmission Protocol) sur un cluster.
17.1. Prise en charge du protocole de transmission de contrôle de flux (SCTP) sur OpenShift Container Platform
En tant qu'administrateur de cluster, vous pouvez activer SCTP sur les hôtes du cluster. Sur Red Hat Enterprise Linux CoreOS (RHCOS), le module SCTP est désactivé par défaut.
SCTP est un protocole fiable basé sur des messages qui fonctionne sur un réseau IP.
Lorsque cette option est activée, vous pouvez utiliser SCTP comme protocole avec les pods, les services et la stratégie réseau. Un objet Service
doit être défini avec le paramètre type
réglé sur la valeur ClusterIP
ou NodePort
.
17.1.1. Exemple de configurations utilisant le protocole SCTP
Vous pouvez configurer un pod ou un service pour qu'il utilise le protocole SCTP en attribuant au paramètre protocol
la valeur SCTP
dans l'objet pod ou service.
Dans l'exemple suivant, un pod est configuré pour utiliser SCTP :
apiVersion: v1 kind: Pod metadata: namespace: project1 name: example-pod spec: containers: - name: example-pod ... ports: - containerPort: 30100 name: sctpserver protocol: SCTP
Dans l'exemple suivant, un service est configuré pour utiliser SCTP :
apiVersion: v1 kind: Service metadata: namespace: project1 name: sctpserver spec: ... ports: - name: sctpserver protocol: SCTP port: 30100 targetPort: 30100 type: ClusterIP
Dans l'exemple suivant, un objet NetworkPolicy
est configuré pour s'appliquer au trafic réseau SCTP sur le port 80
à partir de n'importe quel pod doté d'une étiquette spécifique :
kind: NetworkPolicy apiVersion: networking.k8s.io/v1 metadata: name: allow-sctp-on-http spec: podSelector: matchLabels: role: web ingress: - ports: - protocol: SCTP port: 80
17.2. Activation du protocole de transmission par contrôle de flux (SCTP)
En tant qu'administrateur de cluster, vous pouvez charger et activer le module noyau SCTP figurant sur la liste noire sur les nœuds de travail de votre cluster.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
.
Procédure
Créez un fichier nommé
load-sctp-module.yaml
qui contient la définition YAML suivante :apiVersion: machineconfiguration.openshift.io/v1 kind: MachineConfig metadata: name: load-sctp-module labels: machineconfiguration.openshift.io/role: worker spec: config: ignition: version: 3.2.0 storage: files: - path: /etc/modprobe.d/sctp-blacklist.conf mode: 0644 overwrite: true contents: source: data:, - path: /etc/modules-load.d/sctp-load.conf mode: 0644 overwrite: true contents: source: data:,sctp
Pour créer l'objet
MachineConfig
, entrez la commande suivante :$ oc create -f load-sctp-module.yaml
En option : Pour observer l'état des nœuds pendant que l'opérateur MachineConfig applique le changement de configuration, entrez la commande suivante. Lorsque l'état d'un nœud passe à
Ready
, la mise à jour de la configuration est appliquée.$ oc get nodes
17.3. Vérification de l'activation du protocole de transmission par contrôle de flux (SCTP)
Vous pouvez vérifier que le SCTP fonctionne sur un cluster en créant un pod avec une application qui écoute le trafic SCTP, en l'associant à un service, puis en vous connectant au service exposé.
Conditions préalables
-
Accès à l'internet depuis le cluster pour installer le paquet
nc
. -
Installez le CLI OpenShift (
oc
). -
Accès au cluster en tant qu'utilisateur ayant le rôle
cluster-admin
.
Procédure
La création d'un pod démarre un listener SCTP :
Créer un fichier nommé
sctp-server.yaml
qui définit un pod avec le YAML suivant :apiVersion: v1 kind: Pod metadata: name: sctpserver labels: app: sctpserver spec: containers: - name: sctpserver image: registry.access.redhat.com/ubi8/ubi command: ["/bin/sh", "-c"] args: ["dnf install -y nc && sleep inf"] ports: - containerPort: 30102 name: sctpserver protocol: SCTP
Créez le pod en entrant la commande suivante :
$ oc create -f sctp-server.yaml
Créer un service pour le pod d'écoute SCTP.
Créez un fichier nommé
sctp-service.yaml
qui définit un service avec le YAML suivant :apiVersion: v1 kind: Service metadata: name: sctpservice labels: app: sctpserver spec: type: NodePort selector: app: sctpserver ports: - name: sctpserver protocol: SCTP port: 30102 targetPort: 30102
Pour créer le service, entrez la commande suivante :
$ oc create -f sctp-service.yaml
Créer un pod pour le client SCTP.
Créez un fichier nommé
sctp-client.yaml
avec le langage YAML suivant :apiVersion: v1 kind: Pod metadata: name: sctpclient labels: app: sctpclient spec: containers: - name: sctpclient image: registry.access.redhat.com/ubi8/ubi command: ["/bin/sh", "-c"] args: ["dnf install -y nc && sleep inf"]
Pour créer l'objet
Pod
, entrez la commande suivante :$ oc apply -f sctp-client.yaml
Exécutez une liste d'écoute SCTP sur le serveur.
Pour vous connecter au module serveur, entrez la commande suivante :
$ oc rsh sctpserver
Pour démarrer l'auditeur SCTP, entrez la commande suivante :
$ nc -l 30102 --sctp
Se connecter à l'auditeur SCTP sur le serveur.
- Ouvrez une nouvelle fenêtre ou un nouvel onglet dans votre programme de terminal.
Obtenez l'adresse IP du service
sctpservice
. Entrez la commande suivante :$ oc get services sctpservice -o go-template='{{.spec.clusterIP}}{{"\n"}}'
Pour se connecter au pod client, entrez la commande suivante :
$ oc rsh sctpclient
Pour démarrer le client SCTP, entrez la commande suivante. Remplacez
<cluster_IP>
par l'adresse IP du cluster du servicesctpservice
.# nc <cluster_IP> 30102 --sctp
Chapitre 18. Utilisation du matériel PTP
Vous pouvez configurer les services linuxptp
et utiliser du matériel compatible PTP dans les nœuds de cluster d'OpenShift Container Platform.
18.1. À propos du matériel PTP
Vous pouvez utiliser la console OpenShift Container Platform ou OpenShift CLI (oc
) pour installer PTP en déployant le PTP Operator. L'opérateur PTP crée et gère les services linuxptp
et fournit les fonctionnalités suivantes :
- Découverte des appareils compatibles PTP dans le cluster.
-
Gestion de la configuration des services
linuxptp
. -
Notification des événements d'horloge PTP qui affectent négativement les performances et la fiabilité de votre application avec le sidecar PTP Operator
cloud-event-proxy
.
L'opérateur PTP travaille avec des appareils compatibles PTP sur des clusters approvisionnés uniquement sur une infrastructure bare-metal.
18.2. À propos de PTP
Le Precision Time Protocol (PTP) est utilisé pour synchroniser les horloges d'un réseau. Lorsqu'il est utilisé en conjonction avec un support matériel, le PTP est capable d'une précision inférieure à la microseconde et est plus précis que le Network Time Protocol (NTP).
Le paquet linuxptp
comprend les programmes ptp4l
et phc2sys
pour la synchronisation des horloges. ptp4l
implémente l'horloge frontière PTP et l'horloge ordinaire. ptp4l
synchronise l'horloge matérielle PTP avec l'horloge source avec un horodatage matériel et synchronise l'horloge système avec l'horloge source avec un horodatage logiciel. phc2sys
est utilisé pour l'horodatage matériel afin de synchroniser l'horloge système avec l'horloge matérielle PTP sur le contrôleur d'interface de réseau (NIC).
18.2.1. Éléments d'un domaine PTP
Le protocole PTP est utilisé pour synchroniser plusieurs nœuds connectés dans un réseau, avec des horloges pour chaque nœud. Les horloges synchronisées par PTP sont organisées dans une hiérarchie source-destination. La hiérarchie est créée et mise à jour automatiquement par l'algorithme de la meilleure horloge maîtresse (BMC), qui s'exécute sur chaque horloge. Les horloges de destination sont synchronisées avec les horloges sources, et les horloges de destination peuvent elles-mêmes être la source d'autres horloges en aval. Les types d'horloges suivants peuvent être inclus dans les configurations :
- Horloge du grand maître
- L'horloge grand maître fournit des informations horaires standard aux autres horloges du réseau et assure une synchronisation précise et stable. Elle écrit des horodatages et répond aux demandes de temps des autres horloges. Les horloges grand maître peuvent être synchronisées avec une source de temps GPS (Global Positioning System).
- Horloge ordinaire
- L'horloge ordinaire dispose d'une connexion à port unique qui peut jouer le rôle d'horloge source ou de destination, en fonction de sa position dans le réseau. L'horloge ordinaire peut lire et écrire des horodatages.
- Horloge frontière
- L'horloge périphérique possède des ports dans deux ou plusieurs voies de communication et peut être à la fois une source et une destination pour d'autres horloges de destination. L'horloge périphérique fonctionne comme une horloge de destination en amont. L'horloge de destination reçoit le message de synchronisation, corrige le retard, puis crée un nouveau signal temporel source à transmettre sur le réseau. L'horloge périphérique produit un nouveau paquet de données temporelles qui reste correctement synchronisé avec l'horloge source et peut réduire le nombre de dispositifs connectés qui se rapportent directement à l'horloge source.
18.2.2. Avantages du PTP par rapport au NTP
L'un des principaux avantages du PTP par rapport au NTP est le support matériel présent dans divers contrôleurs d'interface réseau (NIC) et commutateurs de réseau. Le matériel spécialisé permet au PTP de tenir compte des retards dans le transfert des messages et d'améliorer la précision de la synchronisation du temps. Pour obtenir la meilleure précision possible, il est recommandé que tous les composants de réseau entre les horloges PTP soient compatibles avec le matériel PTP.
Le PTP matériel offre une précision optimale, car la carte d'interface réseau peut horodater les paquets PTP au moment exact où ils sont envoyés et reçus. Comparé au PTP logiciel, qui nécessite un traitement supplémentaire des paquets PTP par le système d'exploitation, le PTP matériel offre une précision optimale.
Avant d'activer le PTP, assurez-vous que NTP est désactivé pour les nœuds requis. Vous pouvez désactiver le service chronologique (chronyd
) à l'aide d'une ressource personnalisée MachineConfig
. Pour plus d'informations, voir Désactivation du service chronologique.
18.2.3. Utilisation de PTP avec un matériel à double NIC
OpenShift Container Platform prend en charge le matériel NIC simple et double pour une synchronisation PTP précise dans le cluster.
Pour les réseaux télécoms 5G qui offrent une couverture du spectre à bande moyenne, chaque unité virtuelle distribuée (vDU) nécessite des connexions à 6 unités radio (RU). Pour établir ces connexions, chaque hôte vDU a besoin de deux cartes d'interface réseau configurées en tant qu'horloges limites.
Le matériel Dual NIC vous permet de connecter chaque NIC à la même horloge leader en amont, avec des instances ptp4l
distinctes pour chaque NIC alimentant les horloges en aval.
18.3. Installation de l'opérateur PTP à l'aide du CLI
En tant qu'administrateur de cluster, vous pouvez installer l'Opérateur à l'aide de la CLI.
Conditions préalables
- Un cluster installé sur du matériel bare-metal avec des nœuds dont le matériel prend en charge le protocole PTP.
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
.
Procédure
Créer un espace de noms pour l'opérateur PTP.
Enregistrez le YAML suivant dans le fichier
ptp-namespace.yaml
:apiVersion: v1 kind: Namespace metadata: name: openshift-ptp annotations: workload.openshift.io/allowed: management labels: name: openshift-ptp openshift.io/cluster-monitoring: "true"
Créer le CR
Namespace
:$ oc create -f ptp-namespace.yaml
Créez un groupe d'opérateurs pour l'opérateur PTP.
Enregistrez le YAML suivant dans le fichier
ptp-operatorgroup.yaml
:apiVersion: operators.coreos.com/v1 kind: OperatorGroup metadata: name: ptp-operators namespace: openshift-ptp spec: targetNamespaces: - openshift-ptp
Créer le CR
OperatorGroup
:$ oc create -f ptp-operatorgroup.yaml
S'abonner à l'opérateur PTP.
Enregistrez le YAML suivant dans le fichier
ptp-sub.yaml
:apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: name: ptp-operator-subscription namespace: openshift-ptp spec: channel: "stable" name: ptp-operator source: redhat-operators sourceNamespace: openshift-marketplace
Créer le CR
Subscription
:$ oc create -f ptp-sub.yaml
Pour vérifier que l'opérateur est installé, entrez la commande suivante :
$ oc get csv -n openshift-ptp -o custom-columns=Name:.metadata.name,Phase:.status.phase
Exemple de sortie
Name Phase 4.12.0-202301261535 Succeeded
18.4. Installation de l'opérateur PTP à l'aide de la console web
En tant qu'administrateur de cluster, vous pouvez installer l'opérateur PTP à l'aide de la console web.
Vous devez créer l'espace de noms et le groupe d'opérateurs comme indiqué dans la section précédente.
Procédure
Installez l'opérateur PTP à l'aide de la console web d'OpenShift Container Platform :
- Dans la console Web OpenShift Container Platform, cliquez sur Operators → OperatorHub.
- Choisissez PTP Operator dans la liste des opérateurs disponibles, puis cliquez sur Install.
- Sur la page Install Operator, sous A specific namespace on the cluster, sélectionnez openshift-ptp. Cliquez ensuite sur Install.
En option, vérifier que l'installation de l'opérateur PTP a réussi : Vérifiez que l'opérateur PTP a été installé avec succès :
- Passez à la page Operators → Installed Operators.
Assurez-vous que PTP Operator est listé dans le projet openshift-ptp avec un Status de InstallSucceeded.
NotePendant l'installation, un opérateur peut afficher un état Failed. Si l'installation réussit par la suite avec un message InstallSucceeded, vous pouvez ignorer le message Failed.
Si l'opérateur n'apparaît pas tel qu'il a été installé, il convient de poursuivre le dépannage :
- Allez à la page Operators → Installed Operators et inspectez les onglets Operator Subscriptions et Install Plans pour voir s'il y a des défaillances ou des erreurs sous Status.
-
Allez sur la page Workloads → Pods et vérifiez les journaux pour les pods dans le projet
openshift-ptp
.
18.5. Configuration des dispositifs PTP
L'opérateur PTP ajoute la définition de ressource personnalisée (CRD) NodePtpDevice.ptp.openshift.io
à OpenShift Container Platform.
Une fois installé, l'opérateur PTP recherche dans votre grappe des périphériques réseau compatibles PTP sur chaque nœud. Il crée et met à jour un objet de ressource personnalisée (CR) NodePtpDevice
pour chaque nœud qui fournit un périphérique réseau compatible PTP.
18.5.1. Découverte des périphériques réseau compatibles avec le protocole PTP dans votre cluster
Pour obtenir une liste complète des périphériques réseau compatibles avec le protocole PTP dans votre cluster, exécutez la commande suivante :
$ oc get NodePtpDevice -n openshift-ptp -o yaml
Exemple de sortie
apiVersion: v1 items: - apiVersion: ptp.openshift.io/v1 kind: NodePtpDevice metadata: creationTimestamp: "2022-01-27T15:16:28Z" generation: 1 name: dev-worker-0 1 namespace: openshift-ptp resourceVersion: "6538103" uid: d42fc9ad-bcbf-4590-b6d8-b676c642781a spec: {} status: devices: 2 - name: eno1 - name: eno2 - name: eno3 - name: eno4 - name: enp5s0f0 - name: enp5s0f1 ...
18.5.2. Configuration des services linuxptp en tant qu'horloge ordinaire
Vous pouvez configurer les services linuxptp
(ptp4l
, phc2sys
) comme des horloges ordinaires en créant un objet PtpConfig
custom resource (CR).
Utilisez l'exemple suivant PtpConfig
CR comme base pour configurer les services linuxptp
en tant qu'horloge ordinaire pour votre matériel et votre environnement particuliers. Cet exemple CR ne configure pas les événements rapides PTP. Pour configurer les événements rapides PTP, définissez les valeurs appropriées pour ptp4lOpts
, ptp4lConf
, et ptpClockThreshold
. ptpClockThreshold
n'est nécessaire que lorsque les événements sont activés. Voir "Configuring the PTP fast event notifications publisher" (Configuration de l'éditeur de notifications d'événements rapides PTP) pour plus d'informations.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
. - Installer l'opérateur PTP.
Procédure
Créez le CR
PtpConfig
suivant, puis enregistrez le YAML dans le fichierordinary-clock-ptp-config.yaml
.Configuration recommandée de l'horloge ordinaire PTP
apiVersion: ptp.openshift.io/v1 kind: PtpConfig metadata: name: ordinary-clock-ptp-config namespace: openshift-ptp spec: profile: - name: ordinary-clock interface: "<interface_name>" phc2sysOpts: "-a -r -n 24" ptp4lOpts: "-2 -s" ptpSchedulingPolicy: SCHED_FIFO ptpSchedulingPriority: 10 ptp4lConf: | [global] # # Default Data Set # twoStepFlag 1 slaveOnly 1 priority1 128 priority2 128 domainNumber 24 clockClass 255 clockAccuracy 0xFE offsetScaledLogVariance 0xFFFF free_running 0 freq_est_interval 1 dscp_event 0 dscp_general 0 dataset_comparison G.8275.x G.8275.defaultDS.localPriority 128 # # Port Data Set # logAnnounceInterval -3 logSyncInterval -4 logMinDelayReqInterval -4 logMinPdelayReqInterval -4 announceReceiptTimeout 3 syncReceiptTimeout 0 delayAsymmetry 0 fault_reset_interval 4 neighborPropDelayThresh 20000000 masterOnly 0 G.8275.portDS.localPriority 128 # # Run time options # assume_two_step 0 logging_level 6 path_trace_enabled 0 follow_up_info 0 hybrid_e2e 0 inhibit_multicast_service 0 net_sync_monitor 0 tc_spanning_tree 0 tx_timestamp_timeout 50 unicast_listen 0 unicast_master_table 0 unicast_req_duration 3600 use_syslog 1 verbose 0 summary_interval 0 kernel_leap 1 check_fup_sync 0 # # Servo Options # pi_proportional_const 0.0 pi_integral_const 0.0 pi_proportional_scale 0.0 pi_proportional_exponent -0.3 pi_proportional_norm_max 0.7 pi_integral_scale 0.0 pi_integral_exponent 0.4 pi_integral_norm_max 0.3 step_threshold 2.0 first_step_threshold 0.00002 max_frequency 900000000 clock_servo pi sanity_freq_limit 200000000 ntpshm_segment 0 # # Transport options # transportSpecific 0x0 ptp_dst_mac 01:1B:19:00:00:00 p2p_dst_mac 01:80:C2:00:00:0E udp_ttl 1 udp6_scope 0x0E uds_address /var/run/ptp4l # # Default interface options # clock_type OC network_transport L2 delay_mechanism E2E time_stamping hardware tsproc_mode filter delay_filter moving_median delay_filter_length 10 egressLatency 0 ingressLatency 0 boundary_clock_jbod 0 # # Clock description # productDescription ;; revisionData ;; manufacturerIdentity 00:00:00 userDescription ; timeSource 0xA0 recommend: - profile: ordinary-clock priority: 4 match: - nodeLabel: "node-role.kubernetes.io/worker" nodeName: "<node_name>"
Tableau 18.1. Options de configuration de l'horloge ordinaire PTP CR
Champ de ressource personnalisé Description name
Le nom du CR
PtpConfig
.profile
Spécifier un tableau d'un ou plusieurs objets
profile
. Chaque profil doit être nommé de manière unique.interface
Indiquez l'interface réseau à utiliser par le service
ptp4l
, par exempleens787f1
.ptp4lOpts
Spécifiez les options de configuration du système pour le service
ptp4l
, par exemple-2
pour sélectionner le transport réseau IEEE 802.3. Les options ne doivent pas inclure le nom de l'interface réseau-i <interface>
et le fichier de configuration du service-f /etc/ptp4l.conf
, car le nom de l'interface réseau et le fichier de configuration du service sont automatiquement ajoutés. Ajoutez--summary_interval -4
pour utiliser les événements rapides PTP avec cette interface.phc2sysOpts
Spécifier les options de configuration du système pour le service
phc2sys
. Si ce champ est vide, l'opérateur PTP ne démarre pas le servicephc2sys
. Pour les cartes réseau Intel Columbiaville 800 Series, définissez les options dephc2sysOpts
sur-a -r -m -n 24 -N 8 -R 16
.-m
imprime les messages surstdout
.linuxptp-daemon
DaemonSet
analyse les journaux et génère des métriques Prometheus.ptp4lConf
Indiquez une chaîne contenant la configuration qui remplacera le fichier par défaut
/etc/ptp4l.conf
. Pour utiliser la configuration par défaut, laissez le champ vide.tx_timestamp_timeout
Pour les cartes réseau de la série 800 d'Intel Columbiaville, définissez
tx_timestamp_timeout
sur50
.boundary_clock_jbod
Pour les cartes réseau de la série 800 d'Intel Columbiaville, définissez
boundary_clock_jbod
sur0
.ptpSchedulingPolicy
Politique d'ordonnancement des processus
ptp4l
etphc2sys
. La valeur par défaut estSCHED_OTHER
. UtilisezSCHED_FIFO
sur les systèmes qui prennent en charge l'ordonnancement FIFO.ptpSchedulingPriority
Valeur entière de 1 à 65 utilisée pour définir la priorité FIFO pour les processus
ptp4l
etphc2sys
lorsqueptpSchedulingPolicy
est défini surSCHED_FIFO
. Le champptpSchedulingPriority
n'est pas utilisé lorsqueptpSchedulingPolicy
est défini surSCHED_OTHER
.ptpClockThreshold
Facultatif. Si
ptpClockThreshold
n'est pas présent, les valeurs par défaut sont utilisées pour les champsptpClockThreshold
.ptpClockThreshold
configure le délai de déconnexion de l'horloge maître PTP avant le déclenchement des événements PTP.holdOverTimeout
est la valeur temporelle en secondes avant que l'état de l'événement de l'horloge PTP ne passe àFREERUN
lorsque l'horloge maître PTP est déconnectée. Les paramètresmaxOffsetThreshold
etminOffsetThreshold
configurent les valeurs de décalage en nanosecondes qui se comparent aux valeurs deCLOCK_REALTIME
(phc2sys
) ou au décalage du maître (ptp4l
). Lorsque la valeur de décalageptp4l
ouphc2sys
est en dehors de cette plage, l'état de l'horloge PTP est réglé surFREERUN
. Lorsque la valeur de décalage est comprise dans cette plage, l'état de l'horloge PTP est réglé surLOCKED
.recommend
Spécifier un tableau d'un ou plusieurs objets
recommend
qui définissent les règles d'application deprofile
aux nœuds..recommend.profile
Indiquez le nom de l'objet
.recommend.profile
défini dans la sectionprofile
..recommend.priority
Réglez
.recommend.priority
sur0
pour une horloge ordinaire..recommend.match
Spécifiez les règles
.recommend.match
avecnodeLabel
ounodeName
..recommend.match.nodeLabel
Mettez à jour
nodeLabel
avec lekey
denode.Labels
à partir de l'objet nœud en utilisant la commandeoc get nodes --show-labels
. Par exemple :node-role.kubernetes.io/worker
..recommend.match.nodeLabel
Mettez à jour
nodeName
avec la valeur denode.Name
de l'objet nœud en utilisant la commandeoc get nodes
. Par exemple :compute-0.example.com
.Créez le CR
PtpConfig
en exécutant la commande suivante :$ oc create -f ordinary-clock-ptp-config.yaml
Vérification
Vérifiez que le profil
PtpConfig
est appliqué au nœud.Obtenez la liste des pods dans l'espace de noms
openshift-ptp
en exécutant la commande suivante :$ oc get pods -n openshift-ptp -o wide
Exemple de sortie
NAME READY STATUS RESTARTS AGE IP NODE linuxptp-daemon-4xkbb 1/1 Running 0 43m 10.1.196.24 compute-0.example.com linuxptp-daemon-tdspf 1/1 Running 0 43m 10.1.196.25 compute-1.example.com ptp-operator-657bbb64c8-2f8sj 1/1 Running 0 43m 10.129.0.61 control-plane-1.example.com
Vérifiez que le profil est correct. Examinez les journaux du démon
linuxptp
qui correspond au nœud spécifié dans le profilPtpConfig
. Exécutez la commande suivante :$ oc logs linuxptp-daemon-4xkbb -n openshift-ptp -c linuxptp-daemon-container
Exemple de sortie
I1115 09:41:17.117596 4143292 daemon.go:107] in applyNodePTPProfile I1115 09:41:17.117604 4143292 daemon.go:109] updating NodePTPProfile to: I1115 09:41:17.117607 4143292 daemon.go:110] ------------------------------------ I1115 09:41:17.117612 4143292 daemon.go:102] Profile Name: profile1 I1115 09:41:17.117616 4143292 daemon.go:102] Interface: ens787f1 I1115 09:41:17.117620 4143292 daemon.go:102] Ptp4lOpts: -2 -s I1115 09:41:17.117623 4143292 daemon.go:102] Phc2sysOpts: -a -r -n 24 I1115 09:41:17.117626 4143292 daemon.go:116] ------------------------------------
Ressources supplémentaires
- Pour plus d'informations sur l'ordonnancement des priorités FIFO sur le matériel PTP, voir Configuration de l'ordonnancement des priorités FIFO pour le matériel PTP.
- Pour plus d'informations sur la configuration des événements rapides PTP, voir Configuration de l'éditeur de notifications d'événements rapides PTP.
18.5.3. Configuration des services linuxptp en tant qu'horloge frontière
Vous pouvez configurer les services linuxptp
(ptp4l
, phc2sys
) en tant qu'horloge frontière en créant un objet PtpConfig
custom resource (CR).
Utilisez l'exemple suivant PtpConfig
CR comme base pour configurer les services linuxptp
en tant qu'horloge frontière pour votre matériel et votre environnement particuliers. Cet exemple CR ne configure pas les événements rapides PTP. Pour configurer les événements rapides PTP, définissez les valeurs appropriées pour ptp4lOpts
, ptp4lConf
et ptpClockThreshold
. ptpClockThreshold
n'est utilisé que lorsque les événements sont activés. Voir "Configuring the PTP fast event notifications publisher" (Configuration de l'éditeur de notifications d'événements rapides PTP) pour plus d'informations.
Conditions préalables
-
Installez le CLI OpenShift (
oc
). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin
. - Installer l'opérateur PTP.
Procédure
Créez le CR
PtpConfig
suivant, puis enregistrez le YAML dans le fichierboundary-clock-ptp-config.yaml
.Configuration recommandée de l'horloge limite PTP
--- apiVersion: ptp.openshift.io/v1 kind: PtpConfig metadata: name: boundary-clock-ptp-config namespace: openshift-ptp spec: profile: - name: boundary-clock phc2sysOpts: "-a -r -n 24" ptp4lOpts: "-2" ptpSchedulingPolicy: SCHED_FIFO ptpSchedulingPriority: 10 ptp4lConf: | [<interface_1>] masterOnly 0 [<interface_2>] masterOnly 1 [<interface_3>] masterOnly 1 [<interface_4>] masterOnly 1 [global] # # Default Data Set # twoStepFlag 1 slaveOnly 0 priority1 128 priority2 128 domainNumber 24 clockClass 248 clockAccuracy 0xFE offsetScaledLogVariance 0xFFFF free_running 0 freq_est_interval 1 dscp_event 0 dscp_general 0 dataset_comparison G.8275.x G.8275.defaultDS.localPriority 128 # # Port Data Set # logAnnounceInterval -3 logSyncInterval -4 logMinDelayReqInterval -4 logMinPdelayReqInterval -4 announceReceiptTimeout 3 syncReceiptTimeout 0 delayAsymmetry 0 fault_reset_interval 4 neighborPropDelayThresh 20000000 masterOnly 0 G.8275.portDS.localPriority 128 # # Run time options # assume_two_step 0 logging_level 6 path_trace_enabled 0 follow_up_info 0 hybrid_e2e 0 inhibit_multicast_service 0 net_sync_monitor 0 tc_spanning_tree 0 tx_timestamp_timeout 50 unicast_listen 0 unicast_master_table 0 unicast_req_duration 3600 use_syslog 1 verbose 0 summary_interval 0 kernel_leap 1 check_fup_sync 0 # # Servo Options # pi_proportional_const 0.0 pi_integral_const 0.0 pi_proportional_scale 0.0 pi_proportional_exponent -0.3 pi_proportional_norm_max 0.7 pi_integral_scale 0.0 pi_integral_exponent 0.4 pi_integral_norm_max 0.3 step_threshold 2.0 first_step_threshold 0.00002 max_frequency 900000000 clock_servo pi sanity_freq_limit 200000000 ntpshm_segment 0 # # Transport options # transportSpecific 0x0 ptp_dst_mac 01:1B:19:00:00:00 p2p_dst_mac 01:80:C2:00:00:0E udp_ttl 1 udp6_scope 0x0E uds_address /var/run/ptp4l # # Default interface options # clock_type BC network_transport L2 delay_mechanism E2E time_stamping hardware tsproc_mode filter delay_filter moving_median delay_filter_length 10 egressLatency 0 ingressLatency 0 boundary_clock_jbod 0 # # Clock description # productDescription ;; revisionData ;; manufacturerIdentity 00:00:00 userDescription ; timeSource 0xA0 recommend: - profile: boundary-clock priority: 4 match: - nodeLabel: node-role.kubernetes.io/master nodeName: <nodename>
Tableau 18.2. Options de configuration de l'horloge boundary CR du PTP
Champ de ressource personnalisé Description name
Le nom du CR
PtpConfig
.profile
Spécifier un tableau d'un ou plusieurs objets
profile
.name
Spécifiez le nom d'un objet de profil qui identifie de manière unique un objet de profil.
ptp4lOpts
Spécifiez les options de configuration du système pour le service
ptp4l
. Les options ne doivent pas inclure le nom de l'interface réseau-i <interface>
et le fichier de configuration du service-f /etc/ptp4l.conf
car le nom de l'interface réseau et le fichier de configuration du service sont automatiquement ajoutés.ptp4lConf
Spécifiez la configuration requise pour démarrer
ptp4l
en tant qu'horloge périphérique. Par exemple,ens1f0
se synchronise à partir d'une horloge grand maître etens1f3
synchronise les périphériques connectés.<interface_1>
L'interface qui reçoit l'horloge de synchronisation.
<interface_2>
L'interface qui envoie l'horloge de synchronisation.