Introduction à skydive.network

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:



Et à la fin, je cite d'où les agents peuvent prendre des informations


  • 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

Source: https://habr.com/ru/post/fr472724/


All Articles