使用 snapd 的配置 confdb 在 snap 之间共享 snap 配置的概念证明。
对于简单的演示,请参阅此存储库。
警告
在此之前,Confdb 以前称为注册表和方面。 Snapd、Snapcraft 和 Store 尚未跟上此重命名。现在,将所有提到的“confdb”替换为“registry”,将“confdbs”替换为“registries”。
笔记
请注意,注册表以前的名称是方面,这就是快照具有方面前缀的原因。
要安装此 PoC,只需运行安装脚本:
$ /bin/bash -c " $( curl -fsSL https://raw.githubusercontent.com/canonical/registries-poc/main/install.sh ) "
Acknowledging account/f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN assertion...
Acknowledging account-key/xkd_Y2ay5N2Uo14v_wsCtfVJYLAVbJgxbiKM8Ne4mZBflaROriZgk2nb5i9Oebum assertion...
Acknowledging network-confdb.assert assertion...
Installing aspects-poc-server...
aspects-poc-server (edge) 0.2 from Stephen Mwangi (st3v3nmw) installed
Installing aspects-poc-control...
aspects-poc-control (edge) 0.2 from Stephen Mwangi (st3v3nmw) installed
Installing aspects-poc-vpn...
aspects-poc-vpn (edge) 0.2 from Stephen Mwangi (st3v3nmw) installed
Installing aspects-poc-reporting...
aspects-poc-reporting (edge) 0.2 from Stephen Mwangi (st3v3nmw) installed
确保您已使用上面的安装脚本安装了 PoC。该脚本应安装server
、 control
快照、 vpn
快照和reporting
快照。
一切都应该自动运行,并且control
单元应该联系服务器进行注册。注册后, observe-device
confdb 视图应如下所示:
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/observe-device -d
{
"registered": 1719407517,
"uuid": "ca155b32-2472-4650-afb0-c6f967328afe"
}
control
快照还将在初始安装期间设置设备的默认配置:
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/control-interfaces config -d
{
"config": {
"eth0": {
"interface-type": "ethernet",
"ip-address": "172.16.0.3"
},
"wlan0": {
"interface-type": "wifi",
"ip-address": "192.168.0.104"
}
}
}
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/control-tunnel -d
{
"interface": "eth0",
"peers": [
"192.168.21.3",
"192.168.151.225",
"192.168.21.7"
]
}
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/control-telemetry -d
{
"monitor-packets-received": false,
"monitor-packets-sent": true,
"monitor-peers": true,
"sample-rate": 2
}
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/control-device -d
{
"server-url": "http://127.0.0.1:8000"
}
从那时起, control
快照将每分钟运行一次并模拟每个接口上的数据包流 ( config.{interface}.stats
)。您可以通过检查快照的守护进程来确认这一点:
$ snap logs aspects-poc-control
systemd[1]: Starting snap.aspects-poc-control.daemon.service - Service for snap application aspects-poc-control.daemon...
aspects-poc-control.daemon[409009]: eth0: 9 packets ↑, 1 packets ↓
aspects-poc-control.daemon[409009]: wlan0: 5 packets ↑, 4 packets ↓
systemd[1]: snap.aspects-poc-control.daemon.service: Deactivated successfully.
systemd[1]: Finished snap.aspects-poc-control.daemon.service - Service for snap application aspects-poc-control.daemon.
systemd[1]: Starting snap.aspects-poc-control.daemon.service - Service for snap application aspects-poc-control.daemon...
aspects-poc-control.daemon[410059]: eth0: 7 packets ↑, 4 packets ↓
aspects-poc-control.daemon[410059]: wlan0: 2 packets ↑, 4 packets ↓
systemd[1]: snap.aspects-poc-control.daemon.service: Deactivated successfully.
systemd[1]: Finished snap.aspects-poc-control.daemon.service - Service for snap application aspects-poc-control.daemon.
您可以通过运行以下命令来确认这些更新:
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/observe-interfaces packets-received
Key Value
packets-received.eth0 127
packets-received.wlan0 148
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/observe-interfaces packets-sent
Key Value
packets-sent.eth0 130
packets-sent.wlan0 131
vpn
snap 有一个每分钟运行一次的服务来模拟 VPN 隧道的更改。目前这仅限于删除和添加对等节点到隧道的另一端。这些操作中的每一个都有 10% 的几率发生。
您可以通过检查快照的守护进程来确认这一点:
$ snap logs aspects-poc-vpn
systemd[1]: snap.aspects-poc-vpn.daemon.service: Deactivated successfully.
systemd[1]: Finished snap.aspects-poc-vpn.daemon.service - Service for snap application aspects-poc-vpn.daemon.
systemd[1]: Starting snap.aspects-poc-vpn.daemon.service - Service for snap application aspects-poc-vpn.daemon...
aspects-poc-vpn.daemon[412358]: No changes to tunnel.
systemd[1]: snap.aspects-poc-vpn.daemon.service: Deactivated successfully.
systemd[1]: Finished snap.aspects-poc-vpn.daemon.service - Service for snap application aspects-poc-vpn.daemon.
systemd[1]: Starting snap.aspects-poc-vpn.daemon.service - Service for snap application aspects-poc-vpn.daemon...
aspects-poc-vpn.daemon[413769]: No changes to tunnel.
systemd[1]: snap.aspects-poc-vpn.daemon.service: Deactivated successfully.
systemd[1]: Finished snap.aspects-poc-vpn.daemon.service - Service for snap application aspects-poc-vpn.daemon.
您还可以检查observe-tunnel
confdb视图来查看当前的对等点:
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/observe-tunnel peers
[
"192.168.21.3",
"192.168.151.225",
"192.168.21.7"
]
reporting
快照有一项每分钟运行一次的服务,用于收集有关网络当前状态的指标。收集的指标由control-metrics
confdb 视图控制:
$ snap get f22PSauKuNkwQTM9Wz67ZCjNACuSjjhN/network/control-telemetry -d
{
"monitor-packets-received": false,
"monitor-packets-sent": true,
"monitor-peers": true,
"sample-rate": 2
}
您可以通过运行以下命令来检查网络状态:
$ snap logs aspects-poc-reporting -n 25
aspects-poc-reporting.daemon[389998]: INFO:root:The network stats are:
aspects-poc-reporting.daemon[389998]: INFO:root: {'device-id': 'ca155b32-2472-4650-afb0-c6f967328afe',
aspects-poc-reporting.daemon[389998]: 'packets-sent': {'eth0': 137, 'wlan0': 141},
aspects-poc-reporting.daemon[389998]: 'tunnel-peers': ['192.168.21.3', '192.168.151.225', '192.168.21.7']}
aspects-poc-reporting.daemon[389998]: INFO:root:Next run in 30.00 seconds
aspects-poc-reporting.daemon[389998]: INFO:root:The network stats are:
aspects-poc-reporting.daemon[389998]: INFO:root: {'device-id': 'ca155b32-2472-4650-afb0-c6f967328afe',
aspects-poc-reporting.daemon[389998]: 'packets-sent': {'eth0': 137, 'wlan0': 141},
aspects-poc-reporting.daemon[389998]: 'tunnel-peers': ['192.168.21.3', '192.168.151.225', '192.168.21.7']}
aspects-poc-reporting.daemon[389998]: INFO:root:Next run in 30.00 seconds
aspects-poc-reporting.daemon[389998]: INFO:root:The network stats are:
aspects-poc-reporting.daemon[389998]: INFO:root: {'device-id': 'ca155b32-2472-4650-afb0-c6f967328afe',
aspects-poc-reporting.daemon[389998]: 'packets-sent': {'eth0': 138, 'wlan0': 150},
aspects-poc-reporting.daemon[389998]: 'tunnel-peers': ['192.168.21.3', '192.168.151.225', '192.168.21.7']}
aspects-poc-reporting.daemon[389998]: INFO:root:Next run in 30.00 seconds
aspects-poc-reporting.daemon[389998]: INFO:root:The network stats are:
aspects-poc-reporting.daemon[389998]: INFO:root: {'device-id': 'ca155b32-2472-4650-afb0-c6f967328afe',
aspects-poc-reporting.daemon[389998]: 'packets-sent': {'eth0': 138, 'wlan0': 150},
aspects-poc-reporting.daemon[389998]: 'tunnel-peers': ['192.168.21.3', '192.168.151.225', '192.168.21.7']}
aspects-poc-reporting.daemon[389998]: INFO:root:Next run in 30.00 seconds
aspects-poc-reporting.daemon[389998]: INFO:root:The network stats are:
aspects-poc-reporting.daemon[389998]: INFO:root: {'device-id': 'ca155b32-2472-4650-afb0-c6f967328afe',
aspects-poc-reporting.daemon[389998]: 'packets-sent': {'eth0': 145, 'wlan0': 154},
aspects-poc-reporting.daemon[389998]: 'tunnel-peers': ['192.168.21.3', '192.168.151.225', '192.168.21.7']}
aspects-poc-reporting.daemon[389998]: INFO:root:Next run in 30.00 seconds
服务器运行时(已安装相应的 snap),可以在 http://127.0.0.1:8000/docs 上获取文档。
确保您已使用上面的安装脚本安装了 PoC,以确保所有断言均得到确认并打开了 confdbs 等实验性功能。
运行make
或make all
一次构建所有快照,或运行以下命令单独构建它们:
$ make control
Building control snap...
Generated snap metadata
Created snap package aspects-poc-control_0.2_amd64.snap
$ make reporting
Building reporting snap...
Generated snap metadata
Created snap package aspects-poc-reporting_0.2_amd64.snap
$ make server
Building server snap...
Generated snap metadata
Created snap package aspects-poc-server_0.2_amd64.snap
$ make vpn
Building vpn snap...
Generated snap metadata
Created snap package aspects-poc-vpn_0.2_amd64.snap
要使用下面的 make 目标,请确保安装了 yq。您可以使用 Homebrew 或快速安装它:
$ brew install yq
$ snap install yq
运行make install-all
一次安装所有快照,或运行以下命令单独安装它们:
$ make install-server
Installing server snap...
aspects-poc-server 0.2 installed
$ make install-control
Installing control snap...
aspects-poc-control 0.2 installed
$ make install-vpn
Installing vpn snap...
aspects-poc-vpn 0.2 installed
$ make install-reporting
Installing reporting snap...
aspects-poc-reporting 0.2 installed