Додавання ноди в Skydive топологію вручну через Skydive client

Skydive – це аналізатор топології мережі та протоколів з відкритим вихідним кодом у реальному часі. Він спрямований на те, щоб надати вичерпний спосіб зрозуміти, що відбувається у мережній інфраструктурі.

Щоб зацікавити вас, наведу пару скріншотів про Skydive. Трохи нижче буде пост за введенням у Skydive.

Додавання ноди в Skydive топологію вручну через Skydive client

Додавання ноди в Skydive топологію вручну через Skydive client

Піст «Введення в skydive.network» на Хабрі.

Skydive відображає топологію мережі, отримуючи події від агентів Skydive. Ви коли-небудь задавалися питанням, як додати або відобразити на діаграмі топології мережеві компоненти, які знаходяться поза агентською мережею Skydive або не мережні об'єкти, такі як TOR, сховище даних і т.д. .

Починаючи з версії 0.20, Skydive надає Node rule API, яке може використовуватися для створення нових вузлів та ребер та для оновлення метаданих існуючих вузлів. Node rule API поділено на два API-інтерфейси: API-інтерфейс правила вузла та API-інтерфейс правила ребра. API правила вузла використовується для створення нового вузла та оновлення метаданих існуючого вузла. API правила ребра використовується створення кордону між двома вузлами, тобто. пов'язує два вузли.

У цьому блозі ми побачимо два варіанти використання, один із яких є мережевим компонентом, який не є частиною мережі skydive. Другий варіант – немережевий компонент. Перед цим ми розглянемо деякі основні способи використання правил топології API.

Створення вузла Skydive

Щоб створити вузол, необхідно вказати унікальне ім'я вузла та допустимий тип вузла. Також можна надати деякі додаткові параметри.

skydive client node-rule create --action="create" --node-name="node1" --node-type="fabric" --name="node rule1"
{
  "UUID": "ea21c30f-cfaa-4f2d-693d-95159acb71ed",
  "Name": "node rule1",
  "Description": "",
  "Metadata": {
    "Name": "node1",
    "Type": "fabric"
  },
  "Action": "create",
  "Query": ""
}

Оновлення Метаданих Вузлів Skydive

Щоб оновити метадані існуючого вузла, необхідно надати запит gremlin мови для вибору вузлів, в яких ви хочете оновити метадані. Відповідно до вашого запиту, ви можете оновити метадані одного або декількох вузлів за допомогою правила одного вузла.

skydive client node-rule create --action="update" --name="update rule" --query="G.V().Has('Name', 'node1')" --metadata="key1=val1, key2=val2"
{
  "UUID": "3e6c0e15-a863-4583-6345-715053ac47ce",
  "Name": "update rule",
  "Description": "",
  "Metadata": {
    "key1": "val1",
    "key2": "val2"
  },
  "Action": "update",
  "Query": "G.V().Has('Name', 'node1')"
}

Створення ребра Skydive

Для створення ребра необхідно вказати вихідний і кінцевий вузли та тип зв'язку ребра, для створення дочірнього вузла значення типу зв'язку має бути ownership аналогічно до створення зв'язку типу layer2 значення типу зв'язку має бути layer2. Ви можете створити більше одного зв'язку між двома вузлами, але тип зв'язку має бути різним.

skydive client edge-rule create --name="edge" --src="G.v().has('TID', '2f6f9b99-82ef-5507-76b6-cbab28bda9cb')" --dst="G.V().Has('TID', 'd6ec6e2f-362e-51e5-4bb5-6ade37c2ca5c')" --relationtype="both"
{
  "UUID": "50fec124-c6d0-40c7-42a3-2ed8d5fbd410",
  "Name": "edge",
  "Description": "",
  "Src": "G.v().has('TID', '2f6f9b99-82ef-5507-76b6-cbab28bda9cb')",
  "Dst": "G.V().Has('TID', 'd6ec6e2f-362e-51e5-4bb5-6ade37c2ca5c')",
  "Metadata": {
    "RelationType": "both"
  }
}

Перший варіант використання

У цьому випадку ми розглянемо, як показати немережевий пристрій в skydive топології. Давайте розглянемо, що у нас є сховище даних, яке має бути відображено в топологічній діаграмі skydive з деякими корисними метаданими.

Нам просто потрібно створити правило вузла, щоб додати пристрій до топології. Ми можемо додати метадані пристрої як частину команди create або пізніше створити одну або кілька команд update node rule.

Виконайте наведену нижче команду правила вузла, щоб додати пристрій до схеми топології.

skydive client node-rule create --action="create" --node-name="sda" --node-type="persistentvolume" --metadata="DEVNAME=/dev/sda,DEVTYPE=disk,ID.MODEL=SD_MMC, ID.MODEL ID=0316, ID.PATH TAG=pci-0000_00_14_0-usb-0_3_1_0-scsi-0_0_0_0, ID.SERIAL SHORT=20120501030900000, ID.VENDOR=Generic-, ID.VENDOR ID=0bda, MAJOR=8, MINOR=0, SUBSYSTEM=block, USEC_INITIALIZED=104393719727"

Виконайте команду нижче правила ребра, щоб зв'язати створений вузол із вузлом хоста.

skydive client edge-rule create --src="G.V().Has('Name', 'node1')" --dst="G.V().Has('Name', 'sda')" --relationtype="ownership"

Після наведених вище команд тепер можна побачити пристрій, видимий на схемі топології skydive із заданими метаданими, як показано на малюнку нижче.

Додавання ноди в Skydive топологію вручну через Skydive client

Другий варіант використання

У цьому випадку ми побачимо, як додати мережний пристрій, який не є частиною skydive мережі. Давайте розглянемо цей приклад. У нас є два агенти skydive, що працюють на двох різних хостах, для підключення цих двох хостів нам потрібний комутатор TOR. Навіть якщо ми можемо досягти цього, визначивши вузли структури та посилання в конфігураційному файлі, давайте подивимося, як ми можемо зробити те саме за допомогою API правил топології.

Без комутатора TOR два агенти будуть виглядати як два різні вузли без будь-яких посилань, як показано на малюнку нижче.

Додавання ноди в Skydive топологію вручну через Skydive client

Тепер виконайте такі команди Правила вузла, щоб створити комутатор TOR та порти.

skydive client node-rule create --node-name="TOR" --node-type="fabric" --action="create"
skydive client node-rule create --node-name="port1" --node-type="port" --action="create"
skydive client node-rule create --node-name="port2" --node-type="port" --action="create"

Як бачите, комутатор TOR і порти створені та додані до топології skydive, і тепер топологія буде виглядати так, як показано на малюнку нижче.

Додавання ноди в Skydive топологію вручну через Skydive client

Тепер виконайте наведені нижче команди Edge Rule для створення зв'язку між комутатором TOR, портом 1 та публічним інтерфейсом хоста 1.

skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port1')" --relationtype="ownership"
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port1')" --relationtype="layer2"
skydive client edge-rule create --src="G.V().Has('TID', '372c254d-bac9-50c2-4ca9-86dcc6ce8a57')" --dst="G.V().Has('Name', 'port1')" --relationtype="layer2"

Виконайте такі команди, щоб створити зв'язок між комутатором TOR, портом 2 та публічним інтерфейсом хоста 2

skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port2')" --relationtype="layer2"
skydive client edge-rule create --src="G.V().Has('Name', 'TOR')" --dst="G.V().Has('Name', 'port2')" --relationtype="ownership"
skydive client edge-rule create --src="G.V().Has('TID', '50037073-7862-5234-4996-e58cc067c69c')" --dst="G.V().Has('Name', 'port2')" --relationtype="layer2"

Тепер створюються зв'язки ownership і layer2 між комутатором TOR і портом, і навіть зв'язку layer2 між агентами і портами. Тепер остаточна топологія буде виглядати так, як показано нижче.

Додавання ноди в Skydive топологію вручну через Skydive client

Тепер два хоста / агента пов'язані правильно, і ви можете перевірити підключення або створити захоплення найкоротшого шляху між двома хостами.

PS Посилання на оригінал посту

Шукаються люди, які б могли писати пости про інші можливості Skydive.
Телеграм-чат на skydive.network.

Джерело: habr.com

Додати коментар або відгук