Introdução ao skydive.network

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:



E no final cito de onde os agentes podem obter informações


  • 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 , Name e k8s específicos, como K8s.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

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


All Articles