Introducción a skydive.network

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:



Y al final cito de donde los agentes pueden tomar información


  • 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

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


All Articles