实例与宿主机之间的通信¶
托管工作负载(实例)与其宿主机之间的通信,虽然并非严格必要,但却是非常有用的功能。
在 Incus 中,此功能是通过 /dev/incus/sock
节点实现的,该节点为所有 Incus 实例创建和设置。
此文件是一个 Unix 套接字,实例内部的进程可以连接到它。它是多线程的,因此多个客户端可以同时连接。
注意
security.guestapi
必须设置为 true
(默认值),以便实例允许访问套接字。
实现细节¶
宿主机上的 Incus 绑定 /var/lib/incus/guestapi/sock
并开始监听其上的新连接。
然后,此套接字会暴露到 Incus 在 /dev/incus/sock
启动的每个实例中。
需要单个套接字,以便我们可以超过 4096 个实例,否则,Incus 将不得不为每个实例绑定一个不同的套接字,从而很快达到 FD 限制。
身份验证¶
对 /dev/incus/sock
的查询只会返回与请求实例相关的信息。为了确定请求来自何处,Incus 将提取初始套接字的用户凭据,并将其与它管理的实例列表进行比较。
协议¶
/dev/incus/sock
上的协议是带有 JSON 消息的纯文本 HTTP,因此与 Incus 协议的本地版本非常相似。
与主 Incus API 不同,/dev/incus/sock
API 中没有后台操作和身份验证支持。
REST-API¶
API 结构¶
/
/1.0
/1.0/config
/1.0/config/{key}
/1.0/devices
/1.0/events
/1.0/images/{fingerprint}/export
/1.0/meta-data
API 细节¶
/
¶
GET¶
描述:支持的 API 列表
返回值:支持的 API 端点 URL 列表(默认情况下为
['/1.0']
)
返回值
[
"/1.0"
]
/1.0
¶
GET¶
描述:关于 1.0 API 的信息
返回值:JSON 对象
返回值
{
"api_version": "1.0",
"location": "foo.example.com",
"instance_type": "container",
"state": "Started",
}
PATCH¶
描述:更新实例状态(有效状态为
Ready
和Started
)返回值:无
输入
{
"state": "Ready"
}
/1.0/config
¶
GET¶
描述:配置键列表
返回值:配置键 URL 列表
请注意,配置键名称与实例配置中的名称匹配,但并非所有配置命名空间都将导出到 /dev/incus/sock
。目前,只有 cloud-init.*
和 user.*
键可供实例访问。
目前,也没有任何实例可写命名空间。
返回值
[
"/1.0/config/user.a"
]
/1.0/config/<KEY>
¶
GET¶
描述:该键的值
返回值:纯文本值
返回值
blah
/1.0/devices
¶
GET¶
描述:实例设备映射
返回值:JSON 对象
返回值
{
"eth0": {
"name": "eth0",
"network": "incusbr0",
"type": "nic"
},
"root": {
"path": "/",
"pool": "default",
"type": "disk"
}
}
/1.0/events
¶
GET¶
描述:WebSocket 升级
返回值:无(事件的永不结束的流)
支持的参数为
类型:要订阅的通知的逗号分隔列表(默认为全部)
通知类型如下:
config
(任何user.*
配置键的更改)device
(任何设备添加、更改或删除)
此操作不会返回。每个通知都作为单独的 JSON 对象发送。
{
"timestamp": "2017-12-21T18:28:26.846603815-05:00",
"type": "device",
"metadata": {
"name": "kvm",
"action": "added",
"config": {
"type": "unix-char",
"path": "/dev/kvm"
}
}
}
{
"timestamp": "2017-12-21T18:28:26.846603815-05:00",
"type": "config",
"metadata": {
"key": "user.foo",
"old_value": "",
"value": "bar"
}
}
/1.0/images/<FINGERPRINT>/export
¶
GET¶
描述:从主机下载公共/缓存的图像。
返回:原始图像或错误。
访问:需要将
security.guestapi.images
设置为true
。
返回值
See /1.0/images/<FINGERPRINT>/export in the daemon API.
/1.0/meta-data
¶
GET¶
描述:与 cloud-init 兼容的容器元数据。
返回:cloud-init 元数据。
返回值
#cloud-config
instance-id: af6a01c7-f847-4688-a2a4-37fddd744625
local-hostname: abc