通过 Skydive 客户端手动将节点添加到 Skydive 拓扑

Skydive 是一款开源的实时网络拓扑和协议分析器。 它旨在提供一种全面的方法来了解网络基础设施中发生的情况。

为了引起您的兴趣,我将给您一些有关 Skydive 的屏幕截图。 下面会有一篇介绍跳伞的帖子。

通过 Skydive 客户端手动将节点添加到 Skydive 拓扑

通过 Skydive 客户端手动将节点添加到 Skydive 拓扑

邮政 ”skydive.network简介» 关于哈布雷。

Skydive 通过接收来自 Skydive 代理的网络事件来显示网络拓扑。 您是否想知道如何在拓扑图中添加或显示 Skydive 代理网络之外的网络组件或非网络对象(例如 TOR、数据存储等)。借助 Node 规则 API,无需再担心这一点。

从0.20版本开始,Skydive提供了节点规则API,可用于创建新节点和边以及更新现有节点的元数据。 节点规则API分为两个API:节点规则API和边缘规则API。 节点规则 API 用于创建新节点并更新现有节点的元数据。 边缘规则 API 用于在两个节点之间创建边界,即连接两个节点。

在本博客中,我们将看到两个用例,其中之一是不属于跳伞网络的网络组件。 第二个选项是非网络组件。 在此之前,我们将了解使用拓扑规则 API 的一些基本方法。

创建跳伞节点

要创建节点,您必须提供唯一的节点名称和有效的节点类型。 您还可以提供一些附加选项。

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": ""
}

更新跳伞节点元数据

要更新现有节点的元数据,您必须提供 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')"
}

创建跳伞边缘

创建边时,必须指定源节点、目的节点以及边的链路类型;创建子节点时,链路类型值必须为ownership;同样,创建链路类型layer2时,链路类型值必须为第2层。 您可以在两个节点之间创建多个链接,但链接的类型必须不同。

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 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 拓扑

第二个用例

在本例中,我们将了解如何添加不属于跳伞网络的网络设备。 让我们看一下这个例子。 我们有两个跳伞代理运行在两个不同的主机上,为了连接这两个主机,我们需要一个 TOR 交换机。 尽管我们可以通过在配置文件中定义结构节点和链接来实现此目的,但让我们看看如何使用拓扑规则 API 来实现相同的目的。

如果没有 TOR 交换机,两个代理将显示为两个不同的节点,没有任何链接,如下图所示。

通过 Skydive 客户端手动将节点添加到 Skydive 拓扑

现在运行以下主机规则命令来创建 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 拓扑

现在运行以下 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"

现在,在 TOR 交换机和端口之间以及代理和端口之间创建了所有权和第 2 层关联。 现在最终的拓扑如下图所示。

通过 Skydive 客户端手动将节点添加到 Skydive 拓扑

现在,两个主机/代理已正确连接,您可以测试连接或创建两个主机之间的最短路径捕获。

PS 链接到 原帖

我们正在寻找可以撰写有关其他跳伞功能的帖子的人。
电报聊天 通过 skydive.network。

来源: habr.com

添加评论