Chapitre 2. Opérateurs de réseautage
2.1. L’opérateur DNS dans OpenShift dédié Copier lienLien copié sur presse-papiers!
Dans OpenShift Dedicated, l’opérateur DNS déploie et gère une instance CoreDNS pour fournir un service de résolution de noms aux pods à l’intérieur du cluster, permet la découverte de Kubernetes Service basé sur DNS et résout les noms internes cluster.local.
2.1.1. Contrôle de l’état de l’opérateur DNS Copier lienLien copié sur presse-papiers!
L’opérateur DNS implémente l’API dns du groupe d’API operator.openshift.io. L’opérateur déploie CoreDNS à l’aide d’un jeu 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 nom.
Procédure
L’opérateur DNS est déployé lors de l’installation avec un objet de déploiement.
La commande oc get permet d’afficher l’état du déploiement:
oc get -n openshift-dns-operator deployment/dns-operator
$ oc get -n openshift-dns-operator deployment/dns-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23h
NAME READY UP-TO-DATE AVAILABLE AGE dns-operator 1/1 1 1 23h
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La commande oc get permet d’afficher l’état de l’opérateur DNS:
oc get clusteroperator/dns
$ oc get clusteroperator/dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE dns 4.1.15-0.11 True False False 92m
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE dns 4.1.15-0.11 True False False 92m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AVAILABLE, PROGRESSING et DEGRADED fournissent des informations sur le statut de l’Opérateur. AVAILABLE est vrai quand au moins 1 pod du jeu de démon CoreDNS signale une condition d’état disponible, et le service DNS a une adresse IP en cluster.
2.1.2. Afficher le DNS par défaut Copier lienLien copié sur presse-papiers!
Chaque nouvelle installation OpenShift Dedicated a un dns.operator nommé par défaut.
Procédure
La commande oc described permet d’afficher les dns par défaut:
oc describe dns.operator/default
$ oc describe dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.3. En utilisant le transfert DNS Copier lienLien copié sur presse-papiers!
Le transfert DNS vous permet de remplacer la configuration de transfert par défaut dans le fichier /etc/resolv.conf de la manière suivante:
Indiquez les serveurs de noms (spec.servers) pour chaque zone. Lorsque la zone transférée est le domaine d’entrée géré par OpenShift Dedicated, le serveur de noms en amont doit être autorisé pour le domaine.
ImportantIl faut spécifier au moins une zone. Dans le cas contraire, votre cluster peut perdre des fonctionnalités.
- Fournir une liste de serveurs DNS en amont (spec.upstreamResolvers).
- Changez la stratégie de transfert par défaut.
La configuration de transfert DNS pour le domaine par défaut peut avoir à la fois les serveurs par défaut spécifiés dans le fichier /etc/resolv.conf et les serveurs DNS en amont.
Procédure
La modification de l’objet DNS Operator nommé par défaut:
oc edit dns.operator/default
$ oc edit dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Après avoir émis la commande précédente, l’opérateur crée et met à jour la carte de configuration nommée dns-default avec des blocs de configuration de serveur supplémentaires basés sur spec.servers.
ImportantLorsque vous spécifiez des valeurs pour le paramètre zones, assurez-vous que vous ne transmettez que des zones spécifiques, telles que votre intranet. Il faut spécifier au moins une zone. Dans le cas contraire, votre cluster peut perdre des fonctionnalités.
Dans le cas où aucun des serveurs n’a une zone correspondant à la requête, la résolution de nom revient aux serveurs DNS en amont.
Configuration du transfert DNS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Doit se conformer à 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 cluster, cluster.local, est un sous-domaine invalide pour le champ zones.
- 3
- Définit la stratégie pour sélectionner les résolveurs en amont listés dans le forwardPlugin. La valeur par défaut est aléatoire. Il est également possible d’utiliser les valeurs RoundRobin et Sequential.
- 4
- Au maximum 15 amonts sont permis par forwardPlugin.
- 5
- Il est possible d’utiliser upstreamResolvers pour remplacer la stratégie de transfert par défaut et transférer la résolution DNS vers les résolveurs DNS spécifiés (résolutionurs en amont) pour le domaine par défaut. Dans le cas où vous ne fournissez pas de résolveurs en amont, les requêtes de nom DNS vont aux serveurs déclarés dans /etc/resolv.conf.
- 6
- Détermine l’ordre dans lequel les serveurs en amont listés en amont sont sélectionnés pour la requête. Il est possible de spécifier l’une de ces valeurs : aléatoire, RoundRobin ou séquentiel. La valeur par défaut est séquentielle.
- 7
- Lorsqu’elle est omise, la plate-forme choisit un défaut, normalement le protocole de la demande du client d’origine. Définissez sur TCP pour spécifier que la plate-forme doit utiliser TCP pour toutes les requêtes DNS en amont, même si la demande client utilise UDP.
- 8
- Il est utilisé pour configurer le type de transport, le nom du serveur et le paquet CA personnalisé optionnel à utiliser lors du transfert de requêtes DNS à un résolveur en amont.
- 9
- Il est possible de spécifier deux types d’amont : SystemResolvConf ou Network. Le SystemResolvConf configure l’amont pour utiliser /etc/resolv.conf et Network définit un Networkresolver. Il est possible d’en spécifier un ou les deux.
- 10
- Dans le cas où le type spécifié est Network, vous devez fournir une adresse IP. Le champ d’adresse doit être une adresse IPv4 ou IPv6 valide.
- 11
- Dans le cas où le type spécifié est Network, vous pouvez éventuellement fournir un port. Le champ port doit avoir une valeur comprise entre 1 et 65535. Dans le cas où vous ne spécifiez pas un port pour l’amont, le port par défaut est 853.
2.1.4. Contrôle de l’état de l’opérateur DNS Copier lienLien copié sur presse-papiers!
Il est possible d’inspecter l’état et d’afficher les détails de l’opérateur DNS à l’aide de la commande oc described.
Procédure
Afficher l’état de l’opérateur DNS:
oc describe clusteroperators/dns
$ oc describe clusteroperators/dns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Bien que les messages et l’orthographe puissent varier dans une version spécifique, la sortie d’état attendue ressemble à:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.5. Affichage des journaux de l’opérateur DNS Copier lienLien copié sur presse-papiers!
En utilisant la commande oc logs, vous pouvez afficher les journaux DNS Operator.
Procédure
Consultez les journaux de l’opérateur DNS:
oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator
$ oc logs -n openshift-dns-operator deployment/dns-operator -c dns-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.6. Définition du niveau de journal CoreDNS Copier lienLien copié sur presse-papiers!
Les niveaux de log pour CoreDNS et l’opérateur CoreDNS sont définis en utilisant différentes méthodes. Il est possible de configurer le niveau de journal CoreDNS pour déterminer la quantité de détails dans les messages d’erreur enregistrés. Les valeurs valides pour le niveau de journal CoreDNS sont Normal, Debug et Trace. Le logLevel par défaut est normal.
Le niveau de journal des erreurs CoreDNS est toujours activé. Les paramètres de niveau de journal suivants rapportent différentes réponses d’erreur:
- LogLevel: Normal active la classe "erreurs": log . { erreur de classe }.
- LogLevel: Debug active la classe "denial": log . { erreur de déni de classe }.
- LogLevel: Trace permet la classe "all": log . {classe tout }.
Procédure
Afin de définir logLevel sur Debug, entrez la commande suivante:
oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Debug"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Afin de définir logLevel sur Trace, entrez la commande suivante:
oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"logLevel":"Trace"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
La vérification
Afin de s’assurer que le niveau de journal souhaité a été défini, vérifiez la carte de configuration:
oc get configmap/dns-default -n openshift-dns -o yaml
$ oc get configmap/dns-default -n openshift-dns -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow À titre d’exemple, après avoir configuré le logLevel sur Trace, vous devriez voir cette strophe dans chaque bloc de serveur:
errors log . { class all }
errors log . { class all }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.7. Définition du niveau de journal de l’opérateur CoreDNS Copier lienLien copié sur presse-papiers!
Les niveaux de log pour CoreDNS et CoreDNS Operator sont définis en utilisant différentes méthodes. Les administrateurs de clusters peuvent configurer le niveau de journal de l’opérateur pour suivre plus rapidement les problèmes DNS OpenShift. Les valeurs valides pour operatorLogLevel sont Normal, Debug et Trace. La trace a les informations les plus détaillées. L’opérateurloglogLevel par défaut est normal. Il y a sept niveaux de journalisation pour les problèmes d’opérateur: Trace, Debug, Info, Avertissement, Erreur, Fatal et Panic. Après que le niveau de journalisation est défini, les entrées de journal avec cette sévérité ou quoi que ce soit au-dessus, il sera enregistré.
- OperatorLogLevel: "Normal" set logrus.SetLogLevel("Info").
- OperatorLogLevel: "Debug" définit logrus.SetLogLevel("Debug").
- OperatorLogLevel: "Trace" définit logrus.SetLogLevel("Trace").
Procédure
Afin de définir operatorLogLevel sur Debug, entrez la commande suivante:
oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Debug"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Afin de définir operatorLogLevel sur Trace, entrez la commande suivante:
oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge
$ oc patch dnses.operator.openshift.io/default -p '{"spec":{"operatorLogLevel":"Trace"}}' --type=merge
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
La vérification
Afin d’examiner le changement qui en résulte, entrez la commande suivante:
oc get dnses.operator -A -oyaml
$ oc get dnses.operator -A -oyaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Il faut voir deux entrées de niveau de journal. L’opérateur operatorLogLevel s’applique aux problèmes d’opérateur DNS OpenShift, et le logLevel s’applique au daemonset des pods CoreDNS:
logLevel: Trace operatorLogLevel: Debug
logLevel: Trace operatorLogLevel: Debug
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Afin d’examiner les journaux du daemonset, entrez la commande suivante:
oc logs -n openshift-dns ds/dns-default
$ oc logs -n openshift-dns ds/dns-default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.8. Réglage du cache CoreDNS Copier lienLien copié sur presse-papiers!
Dans le cas de CoreDNS, vous pouvez configurer la durée maximale de mise en cache réussie ou infructueuse, également connue respectivement sous le nom de mise en cache positive ou négative. Le réglage de la durée du cache des réponses de requête DNS peut réduire la charge pour tous les résolveurs DNS en amont.
La définition des champs TTL à des valeurs basses pourrait entraîner une charge accrue sur le cluster, tous les résolveurs en amont, ou les deux.
Procédure
Éditez l’objet DNS Operator nommé par défaut en exécutant la commande suivante:
oc edit dns.operator.openshift.io/default
$ oc edit dns.operator.openshift.io/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow De modifier les valeurs de mise en cache en temps-à-vie (TTL):
Configuration de la mise en cache DNS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- La valeur de la chaîne 1h est convertie en son nombre respectif de secondes par CoreDNS. En cas d’omission de ce champ, la valeur est supposée être 0s et le cluster utilise la valeur par défaut interne de 900s comme repli.
- 2
- La valeur de la chaîne peut être une combinaison d’unités telles que 0.5h10m et est convertie en son nombre respectif de secondes par CoreDNS. En cas d’omission de ce champ, la valeur est supposée être 0s et le cluster utilise la valeur par défaut interne de 30s comme un repli.
La vérification
Afin d’examiner la modification, regardez à nouveau la carte de configuration en exécutant la commande suivante:
oc get configmap/dns-default -n openshift-dns -o yaml
oc get configmap/dns-default -n openshift-dns -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Assurez-vous que vous voyez des entrées qui ressemblent à l’exemple suivant:
cache 3600 { denial 9984 2400 }
cache 3600 { denial 9984 2400 }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.9. Des tâches avancées Copier lienLien copié sur presse-papiers!
2.1.9.1. Changer l’état de gestion de l’opérateur DNS Copier lienLien copié sur presse-papiers!
L’opérateur DNS gère le composant CoreDNS pour fournir un service de résolution de noms pour les pods et les services dans le cluster. L’état de gestion de l’opérateur DNS est défini sur Gestion par défaut, ce qui signifie que l’opérateur DNS gère activement ses ressources. Il est possible de le changer en Ungaged, ce qui signifie que l’opérateur DNS ne gère pas ses ressources.
Les cas suivants sont des cas d’utilisation pour changer l’état de gestion de l’opérateur DNS:
- Il s’agit d’un développeur et vous souhaitez tester une modification de configuration pour voir s’il corrige un problème dans CoreDNS. Il est possible d’empêcher l’opérateur DNS d’écraser la modification de configuration en définissant l’état de gestion sur Ungaged.
- Il s’agit d’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. Le champ État de gestion de l’opérateur DNS peut être défini sur Ungaged pour appliquer la solution de contournement.
Procédure
Change managementState to Ungaged dans l’opérateur DNS:
oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
oc patch dns.operator.openshift.io default --type merge --patch '{"spec":{"managementState":"Unmanaged"}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow État de l’opérateur DNS utilisant la ligne de commande jsonpath JSON parser:
oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'
$ oc get dns.operator.openshift.io default -ojsonpath='{.spec.managementState}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
"Unmanaged"
"Unmanaged"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Il n’est pas possible de mettre à niveau l’état de gestion sur Ungaged.
2.1.9.2. Contrôle du positionnement des pod DNS Copier lienLien copié sur presse-papiers!
L’opérateur DNS a deux ensembles de démons: un pour CoreDNS appelé dns-default et un pour la gestion du fichier /etc/hosts appelé node-resolver.
Les pods CoreDNS peuvent être attribués et exécutés sur des nœuds spécifiés. Ainsi, si l’administrateur du cluster a configuré des stratégies de sécurité qui interdisent la communication entre paires de nœuds, vous pouvez configurer des pods CoreDNS pour s’exécuter sur un ensemble restreint de nœuds.
Le service DNS est disponible pour tous les pods si les circonstances suivantes sont vraies:
- Les gousses DNS s’exécutent sur certains nœuds dans le cluster.
- Les nœuds sur lesquels les pods DNS ne s’exécutent pas ont une connectivité réseau aux nœuds sur lesquels les pod DNS s’exécutent,
Le jeu de démons de résolution de nœuds doit s’exécuter sur chaque hôte de nœuds, car il ajoute une entrée pour le registre d’images de cluster pour prendre en charge les images en tirant. Les pods node-resolver n’ont qu’un seul travail : rechercher l’adresse IP du cluster du service image-registry.openshift-image-registry.svc et l’ajouter à /etc/hosts sur l’hôte du nœud afin que le temps d’exécution du conteneur puisse résoudre le nom du service.
En tant qu’administrateur de cluster, vous pouvez utiliser un sélecteur de nœuds personnalisé pour configurer le jeu de démon pour que CoreDNS s’exécute ou ne s’exécute pas sur certains nœuds.
Conditions préalables
- C’est toi qui as installé le CLI.
- En tant qu’utilisateur, vous êtes connecté au cluster avec des privilèges cluster-admin.
- L’état de gestion de votre opérateur DNS est configuré sur Managed.
Procédure
Afin de permettre au jeu de démon pour CoreDNS de s’exécuter sur certains nœuds, configurez une tainte et une tolérance:
Définissez une tainte sur les nœuds que vous souhaitez contrôler le placement des pod DNS en entrant la commande suivante:
oc adm taint nodes <node_name> dns-only=abc:NoExecute
$ oc adm taint nodes <node_name> dns-only=abc:NoExecute
1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- <node_name> par le nom réel du nœud.
De modifier l’objet DNS Operator nommé par défaut pour inclure la tolérance correspondante en entrant la commande suivante:
oc edit dns.operator/default
$ oc edit dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Indiquez une touche tainte et une tolérance pour la tainte. La tolérance suivante correspond à la tainte définie sur les nœuds.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Facultatif: Pour spécifier le placement des nœuds à l’aide d’un sélecteur de nœuds, modifiez l’opérateur DNS par défaut:
Éditer l’objet DNS Operator nommé par défaut pour inclure un sélecteur de nœuds:
spec: nodePlacement: nodeSelector: node-role.kubernetes.io/control-plane: ""
spec: nodePlacement: nodeSelector:
1 node-role.kubernetes.io/control-plane: ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Ce sélecteur de nœuds garantit que les gousses CoreDNS s’exécutent uniquement sur les nœuds de plan de contrôle.
2.1.9.3. Configuration du transfert DNS avec TLS Copier lienLien copié sur presse-papiers!
Lorsque vous travaillez dans un environnement hautement réglementé, vous pourriez avoir besoin de la possibilité de sécuriser le trafic DNS lorsque vous transmettez des demandes à des résolveurs en amont afin que vous puissiez assurer un trafic DNS supplémentaire et la confidentialité des données.
Gardez à l’esprit que CoreDNS met en cache les connexions transférées pendant 10 secondes. CoreDNS tiendra une connexion TCP ouverte pendant ces 10 secondes si aucune demande n’est émise. Avec de grands clusters, assurez-vous que votre serveur DNS est conscient qu’il pourrait obtenir de nombreuses nouvelles connexions à tenir ouvert parce que vous pouvez lancer une connexion par nœud. Configurez votre hiérarchie DNS en conséquence pour éviter les problèmes de performance.
Lorsque vous spécifiez des valeurs pour le paramètre zones, assurez-vous que vous ne transmettez que des zones spécifiques, telles que votre intranet. Il faut spécifier au moins une zone. Dans le cas contraire, votre cluster peut perdre des fonctionnalités.
Procédure
La modification de l’objet DNS Operator nommé par défaut:
oc edit dns.operator/default
$ oc edit dns.operator/default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Les administrateurs de clusters peuvent configurer la sécurité des couches de transport (TLS) pour les requêtes DNS transmises.
Configuration du transfert DNS avec TLS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Doit se conformer à 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 cluster, cluster.local, est un sous-domaine invalide pour le champ zones. Le domaine cluster, cluster.local, est un sous-domaine invalide pour les zones.
- 3
- Lorsque vous configurez TLS pour les requêtes DNS transmises, définissez le champ de transport pour avoir la valeur TLS.
- 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 de nom de serveur (SNI) pour valider le certificat de serveur TLS en amont.
- 5
- Définit la stratégie pour sélectionner les résolveurs en amont. La valeur par défaut est aléatoire. Il est également possible d’utiliser les valeurs RoundRobin et Sequential.
- 6
- C’est nécessaire. L’utiliser pour fournir des résolveurs en amont. Au maximum 15 entrées en amont sont autorisées par entrée forwardPlugin.
- 7
- En option. Il peut être utilisé pour remplacer la stratégie par défaut et transférer la résolution DNS vers les résolveurs DNS spécifiés (résolutionurs en amont) pour le domaine par défaut. Dans le cas où vous ne fournissez pas de résolveurs en amont, les requêtes de nom DNS vont aux serveurs de /etc/resolv.conf.
- 8
- Le type réseau est uniquement autorisé lors de l’utilisation de TLS et vous devez fournir une adresse IP. Le type de réseau indique que ce résolveur en amont doit gérer les demandes transmises séparément des résolveurs en amont listés dans /etc/resolv.conf.
- 9
- Le champ d’adresse doit être une adresse IPv4 ou IPv6 valide.
- 10
- En option, vous pouvez fournir un port. Le port doit avoir une valeur comprise entre 1 et 65535. Dans le cas où vous ne spécifiez pas un port pour l’amont, le port par défaut est 853.
NoteLorsque les serveurs sont indéfinis ou invalides, la carte de configuration ne contient que le serveur par défaut.
La vérification
Afficher la carte de configuration:
oc get configmap/dns-default -n openshift-dns -o yaml
$ oc get configmap/dns-default -n openshift-dns -o yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de DNS ConfigMap basé sur l’exemple de transfert TLS
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Les modifications apportées à forwardPlugin déclenchent une mise à jour continue du jeu de démon CoreDNS.