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-trace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Rendez
ovnkube-trace
exécutable en exécutant la commande suivante :chmod +x ovnkube-trace
$ chmod +x ovnkube-trace
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Affichez les options disponibles sur
ovnkube-trace
en exécutant la commande suivante :./ovnkube-trace -help
$ ./ovnkube-trace -help
Copy 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-trace
sur 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=80
Copy 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-dns
Copy 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-trace
pour 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-default
pour 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.yaml
Copy 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 created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Démarrez un service web dans l'espace de noms
default
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=80
Copy 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 prod
Copy 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=production
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez la commande suivante pour déployer une image
alpine
dans l'espace de nomsprod
et 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 -- sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Ouvrez une autre session de terminal.
Dans cette nouvelle session de terminal, exécutez
ovn-trace
pour vérifier l'échec de la communication entre le pod sourcetest-6459
fonctionnant dans l'espace de nomsprod
et 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 web
Copy 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.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exécutez
ovnkube-trace
pour 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.default
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Résultats attendus
Copy to Clipboard Copied! Toggle word wrap Toggle overflow