Introducción a Skydive
Skydive es un analizador de protocolos y topología de red de código abierto en tiempo real. Su objetivo es proporcionar una forma exhaustiva de comprender lo que está sucediendo en la infraestructura de red.
Captura de pantalla de objetos (pods, interfaces) en kubernetes

Página oficial del proyecto: https://github.com/skydive-project/skydive
Kubernetes será más bajo.
Ahora veamos un ejemplo más simple.
Para demostrarlo, instale el clúster Etcd en 3 servidores. Para esto usaremos el rol de galaxia frank6866.etcd.
ansible-galaxy install frank6866.etcd
Yaml debajo
- hosts: etcd become: yes roles: - frank6866.etcd
Archivo Ansible.cfg a continuación
[defaults] inventory = inventory remote_user = user host_key_checking = False stdout_callback=debug
archivo de inventario
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'
Comenzamos la instalación
ansible-playbook -i hosts.multiple etcd-cluster.yaml
Después de descargar el repositorio de skydive
git clone https://github.com/skydive-project/skydive.git
Vaya a la carpeta contrib / ansible / Inventory
cd contrib/ansible/inventory
Editar IP en el archivo 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',]}
Comenzamos la instalación de los agentes de paracaidismo y el analizador.
ansible-playbook -i inventory/hosts.multiple playbook.yml.sample
Después de eso, desde nuestra computadora, vaya a IP :8082
Y vemos algo como esto

Skydive muestra objetos: interfaces.
La topología que ve cuando ingresa Skydive se forma en el archivo /etc/skydive/skydive.yml
Si instala skydive en kubernetes, le mostrará los pods.
Si comenta la topología en la configuración del analizador, solo obtendremos objetos separados sin enlaces.

Configuración con topología comentada:
Encabezado 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
Y ahora, con la ayuda de skydive-flow-matrix, veamos las conexiones activas entre los servidores.
Primero instale skydive-flow-matrix en su computadora de trabajo.
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 .
Obtenemos conectividad activa en forma de texto.
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
También obtenemos conexiones activas en forma gráfica.
skydive-flow-matrix --analyzer IP :8082 --username admin --password password --format render

Si comenta la topología en la configuración del analizador e inicia el análisis de la topología, aún obtendremos conexiones activas en forma gráfica.
Es decir, la topología no afecta a la matriz de flujo de paracaidismo

Conclusión
La topología en la ventana principal de paracaidismo muestra los nodos donde está instalado el agente, las interfaces que están instaladas en este nodo.
En topología, los nodos se pueden interconectar a través de interfaces. Para hacer esto, arregle el archivo /etc/skydive/skydive.yml
Ahora instala skydive en Kubernetes
Skydive debe instalarse en la versión de Kubernetes no más de 1.16.
Puede usar kubespray para la instalación.
A continuación, ejecute la instalación de skydive:
git clone https://github.com/skydive-project/skydive.git cd skydive/contrib/kubernetes/ kubectl apply -f skydive.yaml
Después de instalar skydive en kubernetes, comenzamos el reenvío del puerto 8082 a su estación de trabajo.
Este comando debe ejecutarse desde su estación de trabajo.
Antes de eso, debe crear un archivo de configuración en el directorio .kube en el directorio de inicio.
kubectl port-forward service/skydive-analyzer 8082:8082
Algunas capturas de pantalla y objetos de video (pods, interfaces) en kubernetes

Si presionamos más, habrá aún más objetos.

Video:
- Docker (docker)
- Ethtool (ethtool)
- Libvirt (libvirt)
- LLDP (lldp)
- Lxd (lxd)
- NetLINK (netlink)
- NetNS (netns)
- Neutrón (neutrón)
- OVSDB (ovsdb)
- Opencontrail (opencontrail)
- runC (runc)
- Información de socket (socketinfo)
- VPP (vpp)
Donde el analizador puede obtener la topología de:
- Isstio (istio)
- Kubernetes (k8s)
- OVN (ovn)
Amplio soporte para K8
Construyendo un gráfico de nodos:
- general: clúster, espacio de nombres
- calcular: nodo, pod, contenedor
- almacenamiento: reclamo de volumen persistente (pvc), volumen persistente (pv), clase de almacenamiento
- red: política de red, servicio, puntos finales, ingreso
- implementación: implementación, statefulset, replicaset, replicationcontroller, cronjob, trabajo
- configuración: configmap, secreto
Construyendo una gráfica de objetos terminales:
- Propiedad de k8s-k8s (por ejemplo, k8s.namespace - k8s.pod)
- Relación k8s-k8s (por ejemplo, k8s.service - k8s.pod)
- Relación k8s-física (por ejemplo, k8s.node - host)
Mostrar nodos de metadatos:
- campos indexados: campos estándar como
Type
, Name
más k8 específicos como K8s.Namespace
- campos solo almacenados: todo el contenido del recurso k8s almacenado en
K8s.Extra
Construir metadatos de nodos:
- el campo de metadatos del nodo
Status
- con valores Arriba (blanco) / Abajo (rojo)
- implementado actualmente para recursos: pod, persistentvolumeclaim (pvc) y persistentvolume (pv)
Soporte para varios tipos de flujo
- sFlow
- Un paquete
- PCAP
- Zócalo PCAP
- DPDK
- eBPF
- Openvswitch puerto espejo
La búsqueda en la red de Ansible para Skydive se describe en 2 publicaciones.
Estamos buscando personas que puedan escribir publicaciones sobre otras funciones de Skydive.
Telegram chat en skydive.network: https://t.me/skydive_network_en