Введение в skydive.network

    Введение в Skydive


    Skydive — это анализатор топологии сети и протоколов с открытым исходным кодом в реальном времени. Он направлен на то, чтобы предоставить исчерпывающий способ понять, что происходит в сетевой инфраструктуре.


    Скриншот обьектов (поды, интерфейсы) в kubernetes


    Официальная страница проекта: https://github.com/skydive-project/skydive
    Kubernetes будет ниже.
    А сейчас посмотрим более простой пример.


    Для демонстрации установим на 3 сервера кластер Etcd. Для этого будем использовать galaxy роль frank6866.etcd.


    ansible-galaxy install frank6866.etcd

    Yaml ниже


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

    Файл ansible.cfg ниже


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

    файл inventory


    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'

    Запускаем установку


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

    После скачиваем репозиторий skydive


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

    Переходим в папку contrib/ansible/inventory


    cd contrib/ansible/inventory

    Правим IP в файле 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',]}

    Запускаем установку skydive агентов и анализатора


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

    После со своего компьютера заходим в IP для сервера анализатора:8082
    И видим примерно такую картину


    Skydive показывает обьекты: интерфейсы.
    Топологию, которую вы видете когда заходите в Skydive, формируется в файле /etc/skydive/skydive.yml
    Если вы будете устанавливать skydive в kubernetes, то он будем вам показывать поды.


    Если закоментировать топологию в конфиге анализатора, то получим просто отдельные обьекты без связей.

    Конфиг с закоментированой топологией:


    Заголовок спойлера
    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

    А теперь с помощью skydive-flow-matrix посмотрим активные коннекты между серверами.
    Сначала установим skydive-flow-matrix на вашем рабочем компьютере.


    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 .

    Получим активные коннективности в текстовом виде.


    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

    Так же получим активные коннективности в графическом виде.


    skydive-flow-matrix --analyzer IP для сервера анализатора:8082 --username admin --password password --format render


    Если закоментировать топологию в конфиге анализатора и запустить анализ топологии, то мы все равно получим активные коннективности в графическом виде.
    То есть топология на skydive-flow-matrix не влияет


    Вывод:
    Топология в главном окне skydive показывает ноды где установлен агент, интерфейсы, которые установлены на этой ноде.
    В топологии ноды можно соединять между собой через интерфейсы. Для этого нужно поправить файл /etc/skydive/skydive.yml


    Теперь установим skydive в Kubernetes
    Skydive нужно установливать в Kubernetes версии не больше 1.16.


    Для установки можно использовать kubespray.


    Дальше запускаем установку skydive:


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

    После установки skydive в kubernetes запускаем проброс порта 8082 на вашу рабочу станцию.
    Эту команду нужно запускать с вашей рабочей станции.
    Перед этим нужно создать config файл в директории .kube в домашней директории.


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

    Несколько скриншотов и видео обьектов (поды, интерфейсы) в kubernetes



    Если нажем плюс, то обьектов будет еще больше.



    Видео:



    И под конец привожу откуда агенты могут брать информацию


    • Docker (docker)
    • Ethtool (ethtool)
    • LibVirt (libvirt)
    • LLDP (lldp)
    • Lxd (lxd)
    • NetLINK (netlink)
    • NetNS (netns)
    • Neutron (neutron)
    • OVSDB (ovsdb)
    • Opencontrail (opencontrail)
    • runC (runc)
    • Socket Information (socketinfo)
    • VPP (vpp)

    Откуда анализатор может брать топологию:


    • Istio (istio)
    • Kubernetes (k8s)
    • OVN (ovn)

    Широкая поддержка K8s


    Построение графа нодов:


    • general: cluster, namespace
    • compute: node, pod, container
    • storage: persistentvolumeclaim (pvc), persistentvolume (pv), storageclass
    • network: networkpolicy, service, endpoints, ingress
    • deployment: deployment, statefulset, replicaset, replicationcontroller, cronjob, job
    • configuration: configmap, secret

    Построение графа оконечных обьектов:


    • k8s-k8s ownership (e.g. k8s.namespace – k8s.pod)
    • k8s-k8s relationship (e.g. k8s.service – k8s.pod)
    • k8s-physical relationship (e.g. k8s.node – host)

    Отображнение метаданных ноды:


    • indexed fields: standard fields such as Type, Name plus k8s specific such as K8s.Namespace
    • stored-only fields: the entire content of k8s resource stored under K8s.Extra

    Построение метаданных ноды:


    • the Status node metadata field
    • with values Up (white) / Down (red)
    • currently implemented for resources: pod, persistentvolumeclaim (pvc) and persistentvolume (pv)

    Поддержка различных видов Flow


    • sFlow
    • AFPacket
    • PCAP
    • PCAP socket
    • DPDK
    • eBPF
    • OpenvSwitch port mirroring

    Сетевой поиск с помощью Ansible для Skydive описаны в 2 постах.



    Ищутся люди, которые могли бы писать посты о других возможностях Skydive.
    Телеграм чат по skydive.network: https://t.me/skydive_network_ru

    Комментарии 0

    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

    Самое читаемое