Einführung in Skydive
Skydive ist ein Open-Source-Netzwerktopologie- und Protokollanalysator in Echtzeit. Ziel ist es, einen umfassenden Überblick über die Vorgänge in der Netzwerkinfrastruktur zu erhalten.
Screenshot von Objekten (Pods, Schnittstellen) in Kubernetes

Offizielle Projektseite: https://github.com/skydive-project/skydive
Kubernetes wird niedriger sein.
Sehen wir uns nun ein einfacheres Beispiel an.
Installieren Sie zur Demonstration den Etcd-Cluster auf 3 Servern. Dafür verwenden wir die Galaxienrolle frank6866.etcd.
ansible-galaxy install frank6866.etcd
Yaml unten
- hosts: etcd become: yes roles: - frank6866.etcd
Ansible.cfg Datei unten
[defaults] inventory = inventory remote_user = user host_key_checking = False stdout_callback=debug
Inventardatei
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'
Wir beginnen mit der Installation
ansible-playbook -i hosts.multiple etcd-cluster.yaml
Nach dem Herunterladen des Skydive-Repositorys
git clone https://github.com/skydive-project/skydive.git
Wechseln Sie in den Ordner Contrib / Ansible / Inventar
cd contrib/ansible/inventory
Bearbeiten Sie die IP in der Datei 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',]}
Wir beginnen mit der Installation der Fallschirmspringer und des Analysators
ansible-playbook -i inventory/hosts.multiple playbook.yml.sample
IP :8082
von unserem Computer zu IP :8082
Und wir sehen so etwas

Fallschirmspringen zeigt Objekte: Schnittstellen.
Die Topologie, die Sie sehen, wenn Sie zu Skydive wechseln, wird in der Datei /etc/skydive/skydive.yml erstellt
Wenn Sie Skydive in Kubernetes installieren, werden Ihnen die Pods angezeigt.
Wenn Sie die Topologie in der Konfiguration des Analysators auskommentieren, erhalten wir nur separate Objekte ohne Links.

Konfiguration mit kommentierter Topologie:
Spoiler Überschrift 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
Und jetzt sehen wir uns mit Hilfe der Skydive-Flow-Matrix die aktiven Verbindungen zwischen den Servern an.
Installieren Sie zuerst skydive-flow-matrix auf Ihrem Arbeitscomputer.
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 .
Wir erhalten aktive Konnektivität in Textform.
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
Wir erhalten auch aktive Verbindungen in grafischer Form.
skydive-flow-matrix --analyzer IP :8082 --username admin --password password --format render

Wenn Sie die Topologie in der Konfiguration des Analysators auskommentieren und die Topologieanalyse starten, erhalten wir weiterhin aktive Verbindungen in grafischer Form.
Das heißt, die Topologie beeinflusst die Fallschirmsprung-Flussmatrix nicht

Fazit:
Die Topologie im Hauptfenster von Skydive zeigt die Knoten an, auf denen der Agent installiert ist, sowie die Schnittstellen, die auf diesem Knoten installiert sind.
In der Topologie können Knoten über Schnittstellen miteinander verbunden werden. Korrigieren Sie dazu die Datei /etc/skydive/skydive.yml
Installieren Sie jetzt Skydive in Kubernetes
Skydive muss in Kubernetes Version nicht mehr als 1.16 installiert sein.
Sie können Kubespray für die Installation verwenden.
Führen Sie als Nächstes die Installation von skydive aus:
git clone https://github.com/skydive-project/skydive.git cd skydive/contrib/kubernetes/ kubectl apply -f skydive.yaml
Nach der Installation von skydive in kubernetes starten wir die Weiterleitung von Port 8082 an Ihre Workstation.
Dieser Befehl muss von Ihrer Workstation ausgeführt werden.
Zuvor müssen Sie eine Konfigurationsdatei im Verzeichnis .kube im Ausgangsverzeichnis erstellen.
kubectl port-forward service/skydive-analyzer 8082:8082
Einige Screenshots und Videoobjekte (Pods, Interfaces) in Kubernetes

Wenn wir Plus drücken, gibt es noch mehr Objekte.

Video:
- Docker (Docker)
- Ethtool (Ethtool)
- Libvirt (libvirt)
- LLDP (lldp)
- Lxd (lxd)
- NetLINK (Netlink)
- NetNS (netns)
- Neutron (Neutron)
- OVSDB (ovsdb)
- Opencontrail (offenercontrail)
- runC (runc)
- Socket-Informationen (Socketinfo)
- VPP (vpp)
Woher der Analysator die Topologie beziehen kann:
- Isstio (istio)
- Kubernetes (k8s)
- OVN (ovn)
Breite Unterstützung für K8s
Erstellen eines Diagramms von Knoten:
- Allgemein: Cluster, Namespace
- rechnen: Knoten, Pod, Container
- Speicher: persistentvolumeclaim (pvc), persistentvolum (pv), Speicherklasse
- Netzwerk: Netzwerkpolitik, Service, Endpunkte, Eingang
- Bereitstellung: Bereitstellung, Statefulset, Replikatsatz, Replikationscontroller, Cronjob, Job
- Konfiguration: configmap, geheim
Erstellen eines Diagramms von Terminalobjekten:
- Besitz von k8s-k8s (z. B. k8s.namespace - k8s.pod)
- k8s-k8s-Beziehung (zB k8s.service - k8s.pod)
- k8s-physische Beziehung (zB k8s.node - Host)
Metadatenknoten anzeigen:
- indizierte Felder: Standardfelder wie
Type
, Name
und k8s-spezifische Felder wie K8s.Namespace
- Nur gespeicherte Felder: Der gesamte Inhalt der unter K8s.Extra gespeicherten k8s-Ressource
Erstellen von Knotenmetadaten:
- das Feld Metadaten des Statusknotens
- mit den Werten Up (weiß) / Down (rot)
- Derzeit für Ressourcen implementiert: pod, persistentvolumeclaim (pvc) und persistentvolume (pv)
Unterstützung für verschiedene Arten von Flow
- sFlow
- Afpacket
- PCAP
- PCAP-Buchse
- DPDK
- eBPF
- Openvswitch-Portspiegelung
Die Netzwerksuche von Ansible nach Skydive wird in 2 Beiträgen beschrieben.
Wir suchen Leute, die Beiträge über andere Skydive-Funktionen schreiben können.
Telegramm-Chat auf skydive.network: https://t.me/skydive_network_en