Introduction to skydive.network

Introduction to Skydive


Skydive is a real-time, open-source network topology and protocol analyzer. It aims to provide an exhaustive way to understand what is happening in the network infrastructure.


Screenshot of objects (pods, interfaces) in kubernetes


Official project page: https://github.com/skydive-project/skydive
Kubernetes will be lower.
Now let's see a simpler example.


To demonstrate, install the Etcd cluster on 3 servers. For this we will use the galaxy role frank6866.etcd.


ansible-galaxy install frank6866.etcd 

Yaml below


 - hosts: etcd become: yes roles: - frank6866.etcd 

Ansible.cfg file below


 [defaults] inventory = inventory remote_user = user host_key_checking = False stdout_callback=debug 

inventory file


 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' 

We start installation


  ansible-playbook -i hosts.multiple etcd-cluster.yaml 

After downloading the skydive repository


 git clone https://github.com/skydive-project/skydive.git 

Go to the contrib / ansible / inventory folder


 cd contrib/ansible/inventory 

Edit IP in hosts.multiple file


 [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',]} 

We start the installation of skydive agents and the analyzer


 ansible-playbook -i inventory/hosts.multiple playbook.yml.sample 

After that, from your computer, go to IP :8082
And we see something like this


Skydive shows objects: interfaces.
The topology that you see when you go to Skydive is formed in the file /etc/skydive/skydive.yml
If you install skydive in kubernetes, then it will show you the pods.


If you comment out the topology in the analyzer’s config, we’ll just get separate objects without links.

Config with commented topology:


Spoiler heading
 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 

And now, with the help of skydive-flow-matrix, let's see the active connections between the servers.
First install skydive-flow-matrix on your work computer.


 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 . 

We get the active connectivity in text form.


 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 

We also get active connections in graphical form.


 skydive-flow-matrix --analyzer IP   :8082 --username admin --password password --format render 


If you comment out the topology in the analyzer’s config and start the topology analysis, we will still get active connections in graphical form.
That is, the topology does not affect skydive-flow-matrix


Output:
The topology in the main skydive window shows the nodes where the agent is installed, the interfaces that are installed on this node.
In topology, nodes can be interconnected via interfaces. To do this, fix the file /etc/skydive/skydive.yml


Now install skydive in Kubernetes
Skydive needs to be installed in Kubernetes version no more than 1.16.


You can use kubespray for installation.


Next, run the installation of skydive:


 git clone https://github.com/skydive-project/skydive.git cd skydive/contrib/kubernetes/ kubectl apply -f skydive.yaml 

After installing skydive in kubernetes, we start port 8082 forwarding to your workstation.
This command must be run from your workstation.
Before that, you need to create a config file in the .kube directory in the home directory.


 kubectl port-forward service/skydive-analyzer 8082:8082 

A few screenshots and video objects (pods, interfaces) in kubernetes



If we click plus, then there will be even more objects.



Video:



And in the end I quote from where agents can take information



Where the analyzer can get the topology from:



Wide support for K8s


Building a graph of nodes:



Building a graph of terminal objects:



Display metadata nodes:



Building node metadata:



Support for various types of Flow



Ansible's network search for Skydive is described in 2 posts.



We are looking for people who could write posts about other Skydive features.
Telegram chat on skydive.network: https://t.me/skydive_network_en



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


All Articles