Introdução ao Skydive
O Skydive é um analisador de protocolo e topologia de rede de código aberto em tempo real. Ele tem como objetivo fornecer uma maneira exaustiva de entender o que está acontecendo na infraestrutura de rede.
Captura de tela de objetos (pods, interfaces) no kubernetes

Página oficial do projeto: https://github.com/skydive-project/skydive
Kubernetes será menor.
Agora vamos ver um exemplo mais simples.
Para demonstrar, instale o cluster Etcd em 3 servidores. Para isso, usaremos o papel da galáxia frank6866.etcd.
ansible-galaxy install frank6866.etcd 
Yaml abaixo
 - hosts: etcd become: yes roles: - frank6866.etcd 
Arquivo Ansible.cfg abaixo
 [defaults] inventory = inventory remote_user = user host_key_checking = False stdout_callback=debug 
arquivo de inventário
 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' 
Começamos a instalação
  ansible-playbook -i hosts.multiple etcd-cluster.yaml 
Depois de baixar o repositório skydive
 git clone https://github.com/skydive-project/skydive.git 
Vá para a pasta contrib / ansible / inventário
 cd contrib/ansible/inventory 
Editar IP no arquivo 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',]} 
Iniciamos a instalação de agentes de paraquedismo e do analisador
 ansible-playbook -i inventory/hosts.multiple playbook.yml.sample 
Depois disso, no nosso computador, vá para IP :8082
E vemos algo assim

Skydive mostra objetos: interfaces.
A topologia que você vê quando acessa o Skydive é formada no arquivo /etc/skydive/skydive.yml
Se você instalar o skydive no kubernetes, ele mostrará os pods.
Se você comentar a topologia na configuração do analisador, obteremos objetos separados sem links.

Configure com topologia comentada:
Título 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 
 E agora, com a ajuda da skydive-flow-matrix, vamos ver as conexões ativas entre os servidores.
Primeiro instale a skydive-flow-matrix no seu computador de trabalho.
 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 . 
Temos conectividade ativa em 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 
Também temos conexões ativas em forma gráfica.
 skydive-flow-matrix --analyzer IP   :8082 --username admin --password password --format render 

Se você comentar a topologia na configuração do analisador e iniciar a análise de topologia, ainda obteremos conexões ativas de forma gráfica.
Ou seja, a topologia não afeta a matriz de fluxo skydive

Conclusão:
A topologia na janela principal do skydive mostra os nós em que o agente está instalado, as interfaces que estão instaladas nesse nó.
Na topologia, os nós podem ser interconectados via interfaces. Para fazer isso, corrija o arquivo /etc/skydive/skydive.yml
Agora instale o skydive no Kubernetes
O Skydive precisa ser instalado na versão Kubernetes não mais que 1.16.
Você pode usar o kubespray para instalação.
Em seguida, execute a instalação do skydive:
 git clone https://github.com/skydive-project/skydive.git cd skydive/contrib/kubernetes/ kubectl apply -f skydive.yaml 
Após instalar o skydive no kubernetes, iniciamos o encaminhamento da porta 8082 para sua estação de trabalho.
Este comando deve ser executado na sua estação de trabalho.
Antes disso, você precisa criar um arquivo de configuração no diretório .kube no diretório inicial.
 kubectl port-forward service/skydive-analyzer 8082:8082 
Algumas capturas de tela e objetos de vídeo (pods, interfaces) no kubernetes

Se pressionarmos mais, haverá ainda mais objetos.

Vídeo:
- Docker (janela de encaixe)
- Ethtool (ethtool)
- Libvirt (libvirt)
- LLDP (lldp)
- Lxd (lxd)
- NetLINK (netlink)
- NetNS (netns)
- Nêutron (nêutron)
- OVSDB (ovsdb)
- Opencontrail (opencontrail)
- runC (runc)
- Informações sobre soquete (socketinfo)
- VPP (vpp)
De onde o analisador pode obter a topologia:
- Isstio (istio)
- Kubernetes (k8s)
- OVN (unidade)
Amplo suporte para K8s
Construindo um gráfico de nós:
- geral: cluster, espaço para nome
- computação: nó, pod, contêiner
- armazenamento: persistentvolumeclaim (pvc), persistentvolume (pv), storageclass
- rede: política de rede, serviço, pontos finais, ingresso
- deployment: deployment, statefulset, replicaset, replicationcontroller, cronjob, trabalho
- configuração: configmap, segredo
Construindo um gráfico de objetos de terminal:
- propriedade do k8s-k8s (por exemplo, k8s.namespace - k8s.pod)
- Relação k8s-k8s (por exemplo, k8s.service - k8s.pod)
- relacionamento físico k8s (por exemplo, k8s.node - host)
Exibir nós de metadados:
- campos indexados: campos padrão, como Type,Namee k8s específicos, comoK8s.Namespace
- campos somente armazenados: todo o conteúdo do recurso k8s armazenado no K8s.Extra
Metadados do nó de construção:
- o campo de metadados do nó Status
- com valores Para cima (branco) / Para baixo (vermelho)
- atualmente implementado para recursos: pod, persistentvolumeclaim (pvc) e persistentvolume (pv)
Suporte para vários tipos de fluxo
- sFlow
- Afpacket
- PCAP
- Soquete PCAP
- DPDK
- eBPF
- Espelhamento de porta Openvswitch
A pesquisa de rede do Ansible para o Skydive é descrita em 2 posts.
Estamos à procura de pessoas que possam escrever posts sobre outros recursos do Skydive.
Bate-papo por telegrama no skydive.network: https://t.me/skydive_network_en