libnetwork基本概念-v1.12.3
需长期完善修改:
Controller:
Controller通过暴露给用户创建和管理网络的API,以便用户对libnetwork进行调用。
- drvRegistry成员可以管理driver
- 可以获取或创建network
- 可以获取或创建sandbox
- 实现有WalkNetworks()
- 实现有WalkSandboxes()
- 可以管理store
- 监听unix socket(sandbox_externalkey使用)
Network:
一个网络是一组可以直接互相联通的端点。网络的实现可以是Linux bridge,VLAN等等。一个网络可以包含多个端点。
- 可以删除本network
- 可以获取或创建endpoint
- 实现有WalkEndpoints()
- Network有scope的概念,local表示本地,global表示全局
- 可以通过getController()获取network的controller
Endpoint:
一个端点可以加入一个沙盒和一个网络。端点的实现可以是veth pair, Open vSwitch内部端口或者相似的设备。一个端点只可以属于一个网络并且只属于一个沙盒。
- 可以删除本endpoint
- Join()把endpoint加入到sandbox中
- Leave()从sandbox中移除endpoint
- 可以通过getNetwork()获取所属的network
- 可以通过getSandbox()获取所属的sandbox
Sandbox:
Sandbox代表了一个容器中诸如ip地址,mac地址,routes,DNS等信息的配置。Sandbox在用户要求在一个Network创建Endpoint的时候进行创建并分配对应的网络资源。Libnetwork会用特定的操作系统机制(例如:linux的netns)去填充sandbox对应的容器中的网络配置。一个sandbox中可以有多个连接到不同网络的endpoint。
- 可以删除本sandbox
- 可以获取本sandbox中有的endpoints
- 可以通过execFunc()在sandbox中执行命令行
Store:
- Libnetwork使用的key-value存储
- dataStore是对Store的封装,有scope的概念,有local和global。
Driver:
- 网络驱动,有bridge, host, null ,overlay, remote等