需长期完善修改:

Controller:

Controller通过暴露给用户创建和管理网络的API,以便用户对libnetwork进行调用。

  1. drvRegistry成员可以管理driver
  2. 可以获取或创建network
  3. 可以获取或创建sandbox
  4. 实现有WalkNetworks()
  5. 实现有WalkSandboxes()
  6. 可以管理store
  7. 监听unix socket(sandbox_externalkey使用)

Network:

一个网络是一组可以直接互相联通的端点。网络的实现可以是Linux bridge,VLAN等等。一个网络可以包含多个端点。

  1. 可以删除本network
  2. 可以获取或创建endpoint
  3. 实现有WalkEndpoints()
  4. Network有scope的概念,local表示本地,global表示全局
  5. 可以通过getController()获取network的controller

Endpoint:

一个端点可以加入一个沙盒和一个网络。端点的实现可以是veth pair, Open vSwitch内部端口或者相似的设备。一个端点只可以属于一个网络并且只属于一个沙盒。

  1. 可以删除本endpoint
  2. Join()把endpoint加入到sandbox中
  3. Leave()从sandbox中移除endpoint
  4. 可以通过getNetwork()获取所属的network
  5. 可以通过getSandbox()获取所属的sandbox

Sandbox:

Sandbox代表了一个容器中诸如ip地址,mac地址,routes,DNS等信息的配置。Sandbox在用户要求在一个Network创建Endpoint的时候进行创建并分配对应的网络资源。Libnetwork会用特定的操作系统机制(例如:linux的netns)去填充sandbox对应的容器中的网络配置。一个sandbox中可以有多个连接到不同网络的endpoint。

  1. 可以删除本sandbox
  2. 可以获取本sandbox中有的endpoints
  3. 可以通过execFunc()在sandbox中执行命令行

Store:

  1. Libnetwork使用的key-value存储
  2. dataStore是对Store的封装,有scope的概念,有local和global。

Driver:

  1. 网络驱动,有bridge, host, null ,overlay, remote等