Introduction à Skydive
Skydive est un analyseur de topologie et de protocole de réseau open source en temps réel. Il vise à fournir une manière exhaustive de comprendre ce qui se passe dans l'infrastructure réseau.
Capture d'écran d'objets (pods, interfaces) dans kubernetes

Page officielle du projet: https://github.com/skydive-project/skydive
Kubernetes sera inférieur.
Voyons maintenant un exemple plus simple.
Pour démontrer, installez le cluster Etcd sur 3 serveurs. Pour cela, nous utiliserons le rôle de galaxie frank6866.etcd.
ansible-galaxy install frank6866.etcd
Yaml ci-dessous
- hosts: etcd become: yes roles: - frank6866.etcd
Fichier Ansible.cfg ci-dessous
[defaults] inventory = inventory remote_user = user host_key_checking = False stdout_callback=debug
fichier d'inventaire
frank6866-etcd-1 ansible_ssh_host=172.26.9.78 etcd_public_ip=172.26.9.78 frank6866-etcd-2 ansible_ssh_host=172.26.9.79 etcd_public_ip=172.26.9.79 frank6866-etcd-3 ansible_ssh_host=172.26.9.80 etcd_public_ip=172.26.9.80 [cluster1] frank6866-etcd-[1:3] [etcd:children] cluster1 [etcd:vars] etcd_tls_enabled='false'
Nous commençons l'installation
ansible-playbook -i hosts.multiple etcd-cluster.yaml
Après avoir téléchargé le référentiel skydive
git clone https://github.com/skydive-project/skydive.git
Accédez au dossier contrib / ansible / inventaire
cd contrib/ansible/inventory
Modifier l'adresse IP dans le fichier hosts.multiple
[analyzers] IP [agents] IP etcd # skydive-flow-matrix # For skydive-flow-matrix add skydive_extra_config: [agents:vars] skydive_extra_config={'agent.topology.probes': ['socketinfo',]}
Nous commençons l'installation des agents de parachutisme et de l'analyseur
ansible-playbook -i inventory/hosts.multiple playbook.yml.sample
Après cela, depuis notre ordinateur, accédez à IP :8082
Et nous voyons quelque chose comme ça

Skydive montre des objets: des interfaces.
La topologie que vous voyez lorsque vous accédez à Skydive est formée dans le fichier /etc/skydive/skydive.yml
Si vous installez skydive dans kubernetes, il vous montrera les pods.
Si vous commentez la topologie dans la configuration de l'analyseur, nous obtiendrons simplement des objets séparés sans liens.

Configuration avec topologie commentée:
Cap de spoiler analyzer: auth: cluster: backend: cluster password: secret username: skydive listen: 0.0.0.0:8082 # topology: # fabric: # - TOR1[Name=tor1] -> TOR1_PORT1[Name=port1, MTU=1500] # - TOR1_PORT1 -> *[Type=host,Name=skydive-rpm-apatsev-2]/eth0 # - TOR1[Name=tor1] -> TOR1_PORT2[Name=port2, MTU=1500] # - TOR1_PORT2 -> *[Type=host,Name=skydive-rpm-apatsev-3]/eth0 # - TOR1[Name=tor1] -> TOR1_PORT3[Name=port3, MTU=1500] # - TOR1_PORT3 -> *[Type=host,Name=skydive-rpm-apatsev-4]/eth0 analyzers: - 172.26.9.21:8082 auth: cluster: type: basic users: skydive: secret etcd: embedded: true listen: 0.0.0.0:12379 name: skydive-rpm-apatsev-1 flow: protocol: udp host_id: skydive-rpm-apatsev-1
Et maintenant, avec l'aide de skydive-flow-matrix, voyons les connexions actives entre les serveurs.
Installez d'abord skydive-flow-matrix sur votre ordinateur de travail.
git clone https://github.com/skydive-project/skydive-flow-matrix.git cd skydive-flow-matrix/ apt install graphviz sudo pip install virtualenv virtualenv .venv source .venv/bin/activate pip install -r requirements.txt pip install .
Nous obtenons une connectivité active sous forme de texte.
skydive-flow-matrix --analyzer IP :8082 --username admin --password password protocol,server,server_ip,port,server_proc,server_procname,client,client_ip,client_proc,client_procname TCP,skydive-apatsev-2,127.0.0.1,2379,/usr/bin/etcd,etcd,skydive-apatsev-2,127.0.0.1,/usr/bin/etcd,etcd TCP,skydive-apatsev-2,127.0.0.1,4001,/usr/bin/etcd,etcd,skydive-apatsev-2,127.0.0.1,/usr/bin/etcd,etcd TCP,skydive-apatsev-4,172.26.9.80,2380,/usr/bin/etcd,etcd,skydive-apatsev-2,172.26.9.78,/usr/bin/etcd,etcd TCP,skydive-apatsev-2,172.26.9.78,2380,/usr/bin/etcd,etcd,skydive-apatsev-3,172.26.9.79,/usr/bin/etcd,etcd TCP,skydive-apatsev-4,127.0.0.1,4001,/usr/bin/etcd,etcd,skydive-apatsev-4,127.0.0.1,/usr/bin/etcd,etcd TCP,skydive-apatsev-3,127.0.0.1,4001,/usr/bin/etcd,etcd,skydive-apatsev-3,127.0.0.1,/usr/bin/etcd,etcd TCP,skydive-apatsev-3,172.26.9.79,2380,/usr/bin/etcd,etcd,skydive-apatsev-2,172.26.9.78,/usr/bin/etcd,etcd TCP,skydive-apatsev-3,172.26.9.79,2380,/usr/bin/etcd,etcd,skydive-apatsev-4,172.26.9.80,/usr/bin/etcd,etcd TCP,skydive-apatsev-2,172.26.9.78,2380,/usr/bin/etcd,etcd,skydive-apatsev-4,172.26.9.80,/usr/bin/etcd,etcd TCP,skydive-apatsev-4,127.0.0.1,2379,/usr/bin/etcd,etcd,skydive-apatsev-4,127.0.0.1,/usr/bin/etcd,etcd TCP,skydive-apatsev-3,127.0.0.1,2379,/usr/bin/etcd,etcd,skydive-apatsev-3,127.0.0.1,/usr/bin/etcd,etcd TCP,skydive-apatsev-4,172.26.9.80,2380,/usr/bin/etcd,etcd,skydive-apatsev-3,172.26.9.79,/usr/bin/etcd,etcd
Nous obtenons également des connexions actives sous forme graphique.
skydive-flow-matrix --analyzer IP :8082 --username admin --password password --format render

Si vous commentez la topologie dans la configuration de l'analyseur et démarrez l'analyse de la topologie, nous obtiendrons toujours les connexions actives sous forme graphique.
Autrement dit, la topologie n'affecte pas la matrice de flux de saut en parachute

Conclusion:
La topologie dans la fenêtre principale de parachutisme montre les nœuds où l'agent est installé, les interfaces installées sur ce nœud.
En topologie, les nœuds peuvent être interconnectés via des interfaces. Pour ce faire, corrigez le fichier /etc/skydive/skydive.yml
Installez maintenant skydive dans Kubernetes
Skydive doit être installé dans la version Kubernetes pas plus de 1.16.
Vous pouvez utiliser kubespray pour l'installation.
Ensuite, exécutez l'installation de skydive:
git clone https://github.com/skydive-project/skydive.git cd skydive/contrib/kubernetes/ kubectl apply -f skydive.yaml
Après avoir installé skydive dans kubernetes, démarrez le transfert du port 8082 vers votre poste de travail.
Cette commande doit être exécutée à partir de votre poste de travail.
Avant cela, vous devez créer un fichier de configuration dans le répertoire .kube du répertoire personnel.
kubectl port-forward service/skydive-analyzer 8082:8082
Quelques captures d'écran et objets vidéo (pods, interfaces) dans Kubernetes

Si nous appuyons sur plus, il y aura encore plus d'objets.

Vidéo:
- Docker (docker)
- Ethtool (ethtool)
- Libvirt (libvirt)
- LLDP (lldp)
- Lxd (lxd)
- NetLINK (netlink)
- NetNS (netns)
- Neutron (neutron)
- OVSDB (ovsdb)
- Opencontrail (opencontrail)
- runC (runc)
- Informations sur les sockets (socketinfo)
- VPP (vpp)
Où l'analyseur peut obtenir la topologie:
- Isstio (istio)
- Kubernetes (k8s)
- OVN (ovn)
Prise en charge étendue des K8
Construire un graphe de nœuds:
- général: cluster, espace de noms
- calcul: nœud, pod, conteneur
- stockage: volume persistant (pvc), volume persistant (pv), classe de stockage
- réseau: stratégie réseau, service, points de terminaison, entrée
- déploiement: déploiement, statefulset, replicaset, replicationcontroller, cronjob, job
- configuration: configmap, secret
Construire un graphe d'objets terminaux:
- Propriété de k8s-k8s (par exemple k8s.namespace - k8s.pod)
- Relation k8s-k8s (par exemple k8s.service - k8s.pod)
- relation k8s-physique (par exemple k8s.node - hôte)
Afficher les nœuds de métadonnées:
- champs indexés: champs standard tels que
Type
, Name
plus k8 spécifiques tels que K8s.Namespace
- champs stockés uniquement: tout le contenu de la ressource k8s stockée sous
K8s.Extra
Création de métadonnées de nœud:
- le champ de métadonnées du nœud d'
Status
- avec des valeurs Haut (blanc) / Bas (rouge)
- actuellement implémenté pour les ressources: pod, persistentvolumeclaim (pvc) et persistentvolume (pv)
Prise en charge de différents types de flux
- sFlow
- Afpacket
- PCAP
- Prise PCAP
- DPDK
- eBPF
- Miroir de port Openvswitch
La recherche sur le réseau d'Ansible pour Skydive est décrite dans 2 articles.
Nous recherchons des personnes qui pourraient écrire des articles sur d'autres fonctionnalités de Skydive.
Chat télégramme sur skydive.network: https://t.me/skydive_network_en