4个版本 (2个重大变更)

0.3.0 2024年1月26日
0.2.2 2024年1月25日
0.2.1 2024年1月19日
0.2.0 2024年1月19日
0.1.0 2024年1月11日

#527 in 网络编程


用于 subg

Apache-2.0

58KB
1.5K SLoC

子网花园

描述

子网花园是一种基于源代码管理的网络基础设施管理方法,类似于IPAM,无需设置专门的IPAM服务器。数据库是一个可由任何文本编辑器编辑的文本文件,并存储在git仓库中。

特性

  • 可读文本文件
  • 基于Git的版本控制
  • 自动子网分配

如何使用

安装

使用cargo

cargo install subg

这将把 subg 二进制文件安装到 ~/.cargo/bin。请确保此目录已包含在您的 PATH 环境变量中。

初始化

子网花园将其数据存储在池文件中。此文件是一个源代码控制友好的文本文件,可以用任何文本编辑器进行编辑,并易于置于版本控制之下。每个池文件负责管理单个父子网下的子网。

例如,要创建一个新的池文件,用于管理 10.10.0.0/16 子网,运行

subg init 10.10.0.0/16

这将创建一个名为 subnet-garden-pool.yaml 的新池文件。

您还可以管理IPv6子网。例如,要管理 fc00::/112 子网,运行

subg init fc00::/112

您可以使用 --pool-path 选项指定池文件的备用名称

subg init --pool-path institute-network.yaml 10.10.0.0/16

您还可以设置 SUBG_POOL_PATH 环境变量以指定池文件。这在每次运行命令时避免指定 --pool-path 选项非常有用

# Using an environment variable
export SUBG_POOL_PATH=institute-network.yaml
subg init 10.10.0.0/16

还可以将池文件存储为JSON而不是YAML

export SUBG_POOL_PATH=subnet-garden-pool.json
subg init 10.10.0.0/16

管理子网

初始化池文件后,您可以开始分配、释放和管理子网的信息。

子网分配

当您需要分配新的子网时,可以通过请求覆盖所需主机位数的子网来实现。

分配匿名子网

例如,要分配一个可以容纳8位主机(256个主机)的子网,请运行

subg allocate 8

这将从池中分配一个8位子网。子网的地址由池中的可用空间确定。

分配命名子网

子网可以分配名称。一旦分配,可以在其他命令中引用该名称。例如,要分配具有名称的子网,请运行

subg allocate 8 tardigrade-lab

这将创建一个名为 tardigrade-lab 的8位子网。

分配一组子网

在许多情况下,需要分配一组子网,例如在多个数据中心和可用区域构建系统时。例如,在两个可用区域和两个区域中分别分配2个8位子网,请运行

subg allocate 8 tardigrade-project-{}-{}-{} us-east-1,eu-central-1 a,b %0..2

这将总共分配8个子网

tardigrade-project-us-east-1-a-0
tardigrade-project-us-east-1-a-1
tardigrade-project-us-east-1-b-0
tardigrade-project-us-east-1-b-1
tardigrade-project-eu-central-1-a-0
tardigrade-project-eu-central-1-a-1
tardigrade-project-eu-central-1-b-0
tardigrade-project-eu-central-1-b-1

声明特定的CIDR

在某些情况下,您可能希望分配具有特定地址的子网。例如,在将子网池应用于现有网络时。要声明特定的子网,请运行

subg claim 10.10.110.0/24

查看已分配的子网

要查看已分配的子网,请运行

subg cidrs

要查看命名子网列表,请使用

subg names

子网命名

可以添加、更改或删除子网的名称。示例

为未命名的子网添加名称

subg rename 10.10.0.0/24 rotifer-lab

更改子网的名称

subg rename rotifer-lab other-microbe-lab

要删除子网的名称,请省略名称

subg rename other-microbe-lab

释放子网

子网可以通过名称或CIDR释放。例如,要释放之前声明的子网,请运行

subg free 10.10.110.0/24

子网名称模板

在描述一组子网时,名称参数变为用于描述每个新子网名称的模板。模板后面的参数将在每种组合中生成。值将替换模板中的每个 {} 占位符。

列表参数

列表参数指定为逗号分隔的值列表。例如,要为每个可用区域 ab 生成子网列表,请运行

subg allocate 8 tardigrade-experiment-az-{} a,b

这将创建两个网络,tardigrade-experiment-az-atardigrade-experiment-az-b

范围参数

范围参数用于指定数字范围。例如,要生成6个子网的列表,请运行

subg allocate 8 rotifer-experiment-{} %0..6

注意,范围不包含最后一个数字。这将创建6个子网

rotifer-experiment-0
rotifer-experiment-1
rotifer-experiment-2
rotifer-experiment-3
rotifer-experiment-4
rotifer-experiment-5

子网花园池格式

子网花园池文件存储为YAML或JSON文件。以下是一个YAML池文件的示例

cidr: 10.10.0.0/16
subnets:
- cidr: 10.10.0.0/24
- cidr: 10.10.1.0/24
  name: tardigrade-lab
- cidr: 10.10.110.0/24

依赖关系

~1–1.7MB
~40K SLoC