24.4. Tracer Openflow avec ovnkube-trace
Les flux de trafic OVN et OVS peuvent être simulés dans un seul utilitaire appelé ovnkube-trace. L'utilitaire ovnkube-trace exécute ovn-trace, ovs-appctl ofproto/trace et ovn-detrace et met en corrélation ces informations dans un seul résultat.
Vous pouvez exécuter le binaire ovnkube-trace à partir d'un conteneur dédié. Pour les versions postérieures à OpenShift Container Platform 4.7, vous pouvez également copier le binaire sur un hôte local et l'exécuter à partir de cet hôte.
Les binaires des images Quay ne fonctionnent pas actuellement pour les environnements à double pile IP ou IPv6 uniquement. Pour ces environnements, vous devez compiler à partir des sources.
24.4.1. Installation de ovnkube-trace sur l'hôte local Copier lienLien copié sur presse-papiers!
L'outil ovnkube-trace trace des simulations de paquets pour un trafic UDP ou TCP arbitraire entre des points d'un cluster OpenShift Container Platform piloté par OVN-Kubernetes. Copiez le binaire ovnkube-trace sur votre hôte local pour qu'il puisse être exécuté sur le cluster.
Conditions préalables
-
Vous avez installé l'OpenShift CLI (
oc). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
cluster-admin.
Procédure
Créez une variable pod en utilisant la commande suivante :
POD=$(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-master -o name | head -1 | awk -F '/' '{print $NF}')$ POD=$(oc get pods -n openshift-ovn-kubernetes -l app=ovnkube-master -o name | head -1 | awk -F '/' '{print $NF}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante sur votre hôte local pour copier le binaire des pods
ovnkube-master:oc cp -n openshift-ovn-kubernetes $POD:/usr/bin/ovnkube-trace ovnkube-trace
$ oc cp -n openshift-ovn-kubernetes $POD:/usr/bin/ovnkube-trace ovnkube-traceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Rendez
ovnkube-traceexécutable en exécutant la commande suivante :chmod +x ovnkube-trace
$ chmod +x ovnkube-traceCopy to Clipboard Copied! Toggle word wrap Toggle overflow Affichez les options disponibles sur
ovnkube-traceen exécutant la commande suivante :./ovnkube-trace -help
$ ./ovnkube-trace -helpCopy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Les arguments de ligne de commande pris en charge sont des constructions Kubernetes familières, telles que les espaces de noms, les pods, les services, de sorte que vous n'avez pas besoin de trouver l'adresse MAC, l'adresse IP des nœuds de destination ou le type ICMP.
Les niveaux d'enregistrement sont les suivants :
- 0 (production minimale)
- 2 (plus d'informations sur les résultats des commandes de suivi)
- 5 (sortie de débogage)
24.4.2. Exécution de ovnkube-trace Copier lienLien copié sur presse-papiers!
Lancer ovn-trace pour simuler la transmission de paquets au sein d'un réseau logique OVN.
Conditions préalables
-
Vous avez installé l'OpenShift CLI (
oc). -
Vous êtes connecté au cluster avec un utilisateur disposant des privilèges
cluster-admin. -
Vous avez installé
ovnkube-tracesur l'hôte local
Exemple : Test du fonctionnement de la résolution DNS à partir d'un module déployé
Cet exemple illustre comment tester la résolution DNS d'un module déployé vers le module DNS central qui fonctionne dans le cluster.
Procédure
Démarrez un service web dans l'espace de noms par défaut en entrant la commande suivante :
oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow Liste des pods fonctionnant dans l'espace de noms
openshift-dns:oc get pods -n openshift-dns
oc get pods -n openshift-dnsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante
ovn-kube-tracepour vérifier que la résolution DNS fonctionne :Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Espace de noms du pod source
- 2
- Nom du pod source
- 3
- Espace de noms du pod de destination
- 4
- Nom du pod de destination
- 5
- Utilisez le protocole de transport
udp. Le port 53 est le port utilisé par le service DNS. - 6
- Définir le niveau de journalisation à 1 (0 est le niveau minimal et 5 est le niveau de débogage)
Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow La sortie indique le succès du pod déployé vers le port DNS et indique également qu'il est réussi dans l'autre sens. Vous savez donc que le trafic bidirectionnel est supporté sur le port UDP 53 si mon pod web veut faire de la résolution DNS à partir du core DNS.
Si, par exemple, cela n'a pas fonctionné et que vous souhaitiez obtenir ovn-trace, ovs-appctl ofproto/trace et ovn-detrace, ainsi que d'autres informations de type débogage, augmentez le niveau du journal à 2 et exécutez à nouveau la commande de la manière suivante :
Les résultats de cette augmentation du niveau de journalisation sont trop nombreux pour être énumérés ici. En cas d'échec, la sortie de cette commande montre quel flux laisse tomber ce trafic. Par exemple, une politique de réseau d'entrée ou de sortie peut être configurée sur le cluster qui n'autorise pas ce trafic.
Exemple : Vérification à l'aide de la sortie debug d'un refus par défaut configuré
Cet exemple montre comment identifier, à l'aide de la sortie de débogage, qu'une stratégie de refus par défaut à l'entrée bloque le trafic.
Procédure
Créez le fichier YAML suivant qui définit une politique
deny-by-defaultpour refuser l'entrée de tous les pods dans tous les espaces de noms. Enregistrez le YAML dans le fichierdeny-by-default.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquez la politique en entrant la commande suivante :
oc apply -f deny-by-default.yaml
$ oc apply -f deny-by-default.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
networkpolicy.networking.k8s.io/deny-by-default created
networkpolicy.networking.k8s.io/deny-by-default createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow Démarrez un service web dans l'espace de noms
defaulten entrant la commande suivante :oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80
$ oc run web --namespace=default --image=nginx --labels="app=web" --expose --port=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour créer l'espace de noms
prod:oc create namespace prod
$ oc create namespace prodCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour étiqueter l'espace de noms
prod:oc label namespace/prod purpose=production
$ oc label namespace/prod purpose=productionCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpinedans l'espace de nomsprodet démarrer un shell :oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- sh
$ oc run test-6459 --namespace=prod --rm -i -t --image=alpine -- shCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Ouvrez une autre session de terminal.
Dans cette nouvelle session de terminal, exécutez
ovn-tracepour vérifier l'échec de la communication entre le pod sourcetest-6459fonctionnant dans l'espace de nomsprodet le pod de destination fonctionnant dans l'espace de nomsdefault:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
I0116 14:20:47.380775 50822 ovs.go:90] Maximum command line arguments set to: 191102 ovn-trace source pod to destination pod indicates failure from test-6459 to web
I0116 14:20:47.380775 50822 ovs.go:90] Maximum command line arguments set to: 191102 ovn-trace source pod to destination pod indicates failure from test-6459 to webCopy to Clipboard Copied! Toggle word wrap Toggle overflow Augmentez le niveau de journalisation à 2 pour révéler la raison de l'échec en exécutant la commande suivante :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le trafic entrant est bloqué en raison de la politique de refus par défaut en place
Créez une politique qui autorise le trafic de tous les pods dans un espace de noms particulier avec un label
purpose=production. Sauvegardez le YAML dans le fichierweb-allow-prod.yaml:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquez la politique en entrant la commande suivante :
oc apply -f web-allow-prod.yaml
$ oc apply -f web-allow-prod.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez
ovnkube-tracepour vérifier que le trafic est maintenant autorisé en entrant la commande suivante :Copy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Dans le shell ouvert, exécutez la commande suivante :
wget -qO- --timeout=2 http://web.default
wget -qO- --timeout=2 http://web.defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow