Incus 0.3 已发布¶
2023 年 11 月 27 日
简介¶
Incus 团队很高兴地宣布发布 Incus 0.3!
这不是一个非常繁忙的版本,因为 Incus 团队中的大部分人一直在前往弗吉尼亚州里士满参加 Linux Plumbers 会议。
最令人兴奋的新功能可能是添加了对 OpenFGA 的支持,因为与 OpenID Connect 提供商结合使用时,现在允许使用完全开源的身份验证和授权堆栈。这也消除了某些等待从 LXD(具有 Canonical RBAC)迁移到 Incus 的最后一个障碍。
最重要的是,lxd-to-incus
迁移工具已经做了很多改进,我们还添加了对虚拟机中共享路径的热插拔/热移除的支持!
您可以在线试用:https://linuxcontainers.cn/incus/try-it/
享受!
新功能和亮点¶
OpenFGA 对授权控制的支持¶
OpenFGA 是一种开源授权解决方案,它旨在非常易于集成,同时仍然提供非常好的性能。
它基本上是一个在网络上运行的外部守护进程,Incus 会向它询问是否允许特定用户执行特定操作。
您可以在此处了解有关 OpenFGA 的更多信息:https://openfga.dev/
在 Incus 端,OpenFGA 通过一组新的服务器配置密钥启用
- openfga.api.token
- openfga.api.url
- openfga.store.id
- openfga.store.model_id
您需要将这些设置指向您的 OpenFGA 实例,然后配置一个 OIDC 提供程序以进行身份验证。完成后,每当收到用户请求时,都会查询 OpenFGA。
文档:https://linuxcontainers.cn/incus/docs/main/authorization/#open-fine-grained-authorization-openfga
此功能最初是在 LXD 中引入的。
lxd-to-incus
改进¶
lxd-to-incus
迁移工具已经做了很多改进
- 支持 OpenRC 目标系统
- 检测和处理守护进程路径上的挂载点
- 支持迁移 Ceph 存储池
- 支持迁移 OVN 网络
- 生成日志文件
- 生成备份(数据库、OVN 数据)
请注意,由于 LXD 正在发布 LXD 5.20,因此迁移工具只支持将 LXD 5.19 作为源版本。一旦 LXD 发布,并且假设没有导致迁移失败的最后一分钟更改,打包程序应该将其更新到 5.20。
虚拟机中路径的热插拔/热移除¶
Incus 一直以来都支持对磁盘的热插拔和热移除。
使用这些,您会看到虚拟磁盘在 VM 中出现或消失。
但是 Incus 还支持仅共享主机系统中的路径或将共享的自定义卷(文件系统)传递到实例中。
这通过 virtio-fs 或 9p 处理,并且到目前为止,需要停止 VM,添加设备,然后启动 VM。
但现在已经成为过去,Incus 现在通过 QEMU 中的 PCI 热插拔以及与 guest 中的 incus-agent 的通信来支持这些路径的热插拔和热移除,以在热插拔过程中执行实际挂载。
值得注意的是,agent 在热移除之前不会自动卸载文件系统。如果文件系统在 guest 中被挂载,您将在热移除期间收到错误。
完整的变更日志¶
以下是此版本中所有更改的完整列表
完整的提交列表
- lxd-to-incus:查询 systemd 而不是假设服务文件路径
- doc/installing:重新引入直接下载链接
- doc/howto/import-machines:重新引入直接下载链接
- cmd/lxd-to-incus:卸载目标路径
- cmd/lxd-to-incus:添加 OpenRC 目标支持
- doc:从入门链接到迁移指南
- cmd/network {forward,load-balancer}:修正拼写错误 port 为 ports
- i18n:更新翻译模板
- lxd-to-incus:拆分目标
- lxd-to-incus:处理守护进程路径上的挂载点
- [lxd-import] lxd/cluster/config:添加 OpenFGA 配置密钥。
- [lxd-import] incus-doc:运行 make update-metadata。
- [lxd-import] lxd/db:导出 StoragePoolVolumeTypeToName 函数。
- [lxd-import] lxd:向守护进程添加方法以加载 OpenFGA 授权程序。
- [lxd-import] lxd:如果配置了 OpenFGA 授权程序,则在启动时加载它。
- [lxd-import] lxd:在配置更改时加载 OpenFGA 授权程序。
- [lxd-import] test/lint:添加 Openfga 模型 linter。
- [lxd-import] test/includes:添加用于获取证书指纹的工具。
- [lxd-import] test/includes:添加用于运行和与 openfga 服务器交互的工具。
- [lxd-import] test/suites:添加 OpenFGA 测试套件。
- [lxd-import] test/suites:添加 OpenFGA 集群测试。
- [lxd-import] test:在 main 中运行 OpenFGA 测试。
- [lxd-import] workflows:在 github 操作中安装 openfga 服务器和 CLI。
- [lxd-import] doc:将 OpenFGA 添加到词典。
- [lxd-import] lxd/patches:确保重命名仅在集群领导者上执行
- [lxd-import] test/suites:修复 wait_no_operations 帮助程序。
- [lxd-import] lxd/auth:添加 OpenFGA 模型。
- [lxd-import] Makefile:添加用于生成 openfga 模型 json 的 make 目标。
- [lxd-import] lxd/auth:运行 make-openfga。
- Makefile:将 --yes 传递给 npx
- [lxd-import] lxd/auth:添加关系的常量。
- [lxd-import] lxd/auth:添加资源类型和加载选项。
- [lxd-import] gomod:添加 openfga 依赖项。
- [lxd-import] lxd/auth:添加 OpenFGA 授权驱动程序。
- gomod:为 Go 1.20 使用旧的 OpenFGA
- [lxd-import] doc:添加 openfga 服务器配置选项。
- [lxd-import] doc:添加授权说明页面。
- doc/authorization:更新为 Incus
- [lxd-import] doc:更新身份验证页面以分离授权。
- [lxd-import] doc:将授权页面添加到与安全性相关的链接。
- tests:禁用 OpenFGA 测试,直到我们拥有一个测试 OIDC 提供程序
- tests:不需要 OpenFGA
- gomod:更新依赖项
- client:允许覆盖 Web 浏览器
- client:清理 OIDC 登录
- tests:添加 mini-oidc
- tests/link:忽略 test/mini-oidc
- tests:重新启用 openfga 测试
- tests:添加 oidc 帮助程序
- tests:添加 OpenID Connect 测试
- internal/server/auth:将 LXD 替换为 Incus
- cmd/incus-agent:删除 LXD 引用
- tests:更新 OpenFGA 测试以适应 Incus 和 OIDC
- [lxd-import] zfs:支持在补丁中包含 '/' 的 zfs 池
- [lxd-import] test/deps:切换到 ecdsa 证书
- [lxd-import] github:缩短作业名称以改善 UI 视图
- [lxd-import] test/clustering:删除不必要的 shellcheck 忽略并更新其他忽略
- [lxd-import] config:确保将配置密钥值重置为其默认值
- [lxd-import] test:验证 user.* 密钥
- [lxd-import] doc/configuration:查看 openfga.* 文档
- [lxd-import] doc/openfga:对文档进行少量修正
- doc/installing:删除 LXD 引用
- incusd/auth:修正 CA 模式下受信任证书的处理
- tests:正确测试 core.trust_ca_certificates
- lxd-to-incus:跳过非符号链接
- lxd-to-incus:检测目标路径上的挂载点
- lxd-to-incus:重写 rbd 戳记卷
- lxd-to-incus:分离验证代码
- lxd-to-incus:添加高级选项以绕过集群疏散
- incusd/server/task:代码风格
- incusd/server/task:处理 nil 组
- internal/linux:重命名 parseMountinfo
- internal/linux:添加 GetMountinfo
- incusd/storage/drivers/btrfs:在压缩池上跳过 nodatacow
- incusd/storage/drivers/btrfs:检查 datacow 挂载选项
- [lxd-import] metrics:修正指标集中标签合并
- [lxd-import] test:检查文件系统指标中的实例类型
- [lxd-import] test/includes/certificates:添加 gen_cert_and_key()
- [lxd-import] test/metrics:使用 gen_cert_and_key 函数而不是直接调用 openssl
- [lxd-import] test/remote:使用 gen_cert_and_key 函数而不是直接调用 openssl
- [lxd-import] test/tls_restrictions:添加一些双引号
- [lxd-import] test/tls_restrictions:修正一些注释
- [lxd-import] test/tls_restrictions:确保预期的失败获得预期的 403
- [lxd-import] test/tls_restrictions:使用 gen_cert_and_key 函数而不是直接调用 openssl
- [lxd-import] test/tls_restrictions:确保 type=metrics 证书只能访问 /1.0/metrics。
- [lxd-import] lxd/device/proxy:为通配符目标检查考虑路由的 NIC IP
- [lxd-import] lxd/network/driver/bridge:改进 accept_ra 的注释
- [lxd-import] config:限制 user.* 密钥
- [lxd-import] test:验证 user.* 密钥
- [lxd-import] github:使用 Go 1.20 并在 go mod tidy 中检查与它的兼容性
- [lxd-import] github:删除空格
- [lxd-import] lxd/incus-doc:删除嘈杂的日志行
- [lxd-import] test/lint:删除 openfga 模型 linter。
- [lxd-import] test/basic:始终在
incus exec
中使用 -- - [lxd-import] test/basic:使用和不使用 "--" 分隔符进行测试
- [lxd-import] test/clustering:始终在
incus exec
中使用 -- - [lxd-import] test/config:始终在
incus exec
中使用 -- - [lxd-import] test/dev-incus:始终在
incus exec
中使用 -- - [lxd-import] test/image_acl:始终在
incus exec
中使用 -- - [lxd-import] test/storage_snapshots:始终在
incus exec
中使用 -- - [lxd-import] doc/howto/network_ovn_setup:始终在
incus exec
中使用 -- - [lxd-import] doc/howto/instances_troubleshoot:始终在
lxc exec
中使用 -- - [lxd-import] lxd/dev-incus:始终在
incus exec
中使用 -- - [lxd-import] doc/requirements:允许链接到 Go 要求
- [lxd-import] doc/installing:链接到 Go 要求并更新 Ubuntu 说明
- [lxd-import] doc/howto/benchmark_performance:链接到 Go 要求
- [lxd-import] doc/howto/migrate_from_lxc:链接到 Go 要求
- [lxd-import] doc/requirements:Go 1.20 现在是最小版本
- [lxd-import] shared/cert:更新有关 CRL 的代码注释
- [lxd-import] lxd/util/http:在使用 CRL 之前检查它是否由 CA 签名
- [lxd-import] lxc/delete:在错误消息中包含实例名称
- [lxd-import] 更新翻译
- incus:修正首次使用在 init/create 上缺失
- incus:修正首次使用在 admin init 上的消息
- incus:不要在 admin 命令上显示首次使用
- incusd/device:MTU 始终可控
- [lxd-import] lxc:将卷复制到目标项目时使用卷复制
- [lxd-import] shared/network:只有在没有可用的远程证书时才跳过 TLS 验证
- [lxd-import] lxd/daemon_images:修正拼写错误
- [lxd-import] lxd:强制用户在运行访问处理程序之前进行身份验证。
- [lxd-import] lxd/instance/exec:仅在 TCP 套接字上使用 keepalives
- [lxd-import] test:重构本地卷处理
- [lxd-import] test:添加存储卷在项目之间移动
- doc:更新 trust add-certificate
- lxd-to-incus:添加对 OVN 数据库篡改的支持
- doc:在构建说明中将 incus -> incusd。
- lxd-to-incus:添加目标名称
- lxd-to-incus:修正环境变量名称
- lxd-to-incus:修正错误的退出代码
- lxd-to-incus:添加调试日志
- lxd-to-incus:备份数据库
- lxd-to-incus:备份 OVN 数据库
- lxd-to-incus:检测有问题的 btrfs 设置
- tests:解决 shellcheck
- gomod:更新依赖项
- lxd-to-incus: 使用 CLUSTER_NO_STOP 时允许清空服务器
- lxd-to-incus: 修复 ceph 用户名
- lxd-to-incus: 在日志中添加缺少的换行符
- lxd-to-incus: 不要在命令失败时使迁移失败
- lxd-to-incus: 修复格式字符串
- lxd-to-incus: 将 OVS 命令与 OVN 分开
- lxd-to-incus: 修复 OVS 迁移中的拼写错误
- doc: 在 cmdStorageVolumeSnapshotShow 示例中将 lxc 替换为 incus
- doc: 文档化 INCUS_DOCUMENTATION
- [lxd-import] client: 在 InstanceExecArgs 中使用 io.Writer 作为 Stdout/Stderr
- [lxd-import] btrfs: 添加函数以检查给定路径中的子卷
- [lxd-import] btrfs: 创建新池时使用
hasSubvolumes
- [lxd-import] test: 以子卷作为源的 Btrfs 池
- [lxd-import] client: 在 InstanceExecArgs 中使用 io.Reader 作为 Stdin
- [lxd-import] Makefile: 从 go.mod 中删除工具链指令以实现向后兼容
- Makefile: 在所有地方使用 GO 环境变量
- [lxd-import] github: 提取后删除 Go 尖端压缩包
- [lxd-import] config: 修复
acme.ca_url
的简短描述 - [lxd-import] 更新元数据
- [lxd-import] lxd/instance/drivers/driver_qemu: 从 setupNvram 中提取配置卷挂载
- [lxd-import] shared/instance: 修正 volatile.apply_nvram 类型
- [lxd-import] client/lxd/instances: 在 ExecInstance 中尽快关闭 websocket,一旦通道镜像完成
- [lxd-import] lxc/exec: 不再需要使用 io.ReadCloser
- [lxd-import] shared/ws/mirror: MirrorWrite 和 MirrorRead 中不再需要延迟
- [lxd-import] 恢复 "lxd/instance/exec: 只在 TCP 套接字上使用 keepalives"
- [lxd-import] client/lxd/instances: 消费来自服务器的 ping 消息,用于执行控制和 stdin 通道
- incusd/instance/qemu: 发送设备通知
- incus-agent: 正确转发设备事件
- incusd/instance/qemu/qmp: 添加 CharDevice 命令
- incusd/device/disk: 允许 virtiofs 热插拔/热拔插
- incusd/device/disk: 不要为热插拔生成 9p 代理
- incusd/instance/qemu: 添加对 virtiofs 热插拔/热拔插的支持
- incus-agent: 添加对挂载热插拔路径的支持
- gomod:更新依赖项
- doc: 向容器与虚拟机添加 markdown 表格
- doc: 对容器与虚拟机进行细微更改
- incusd/instances: 正确检测未过滤
- incusd/images: 正确检测未过滤
- internal/filter: 支持字符串切片
- incusd/storage_volumes: 允许基于 UsedBy 过滤
文档¶
Incus 文档可在以下位置找到:
https://linuxcontainers.cn/incus/docs/main/
软件包¶
由于 Incus 上游只发布常规发布压缩包,因此没有官方的 Incus 软件包。以下是启动 Incus 和运行的可用选项。
用于 Debian 和 Ubuntu 的 Zabbly 软件包¶
Zabbly 为 Debian 和 Ubuntu 用户提供 Incus 的每日构建和稳定构建。
https://github.com/zabbly/incus
用于 Incus 客户端的 Homebrew 软件包¶
客户端工具可通过 HomeBrew 在 Linux 和 MacOS 上获得。
https://formulae.brew.sh.cn/formula/incus
用于 Incus 客户端的 Chocolatey 软件包¶
客户端工具很快就会通过 Chocolatey 为 Windows 用户提供。
在此之前,二进制文件可在此处找到:https://github.com/lxc/incus/releases/tag/v0.3.0
支持¶
在这个早期阶段,每个 Incus 版本只在下一个版本发布之前得到支持。这将在几个月内发生变化,因为我们计划发布一个 LTS 版本,以与 LXC 和 LXCFS 的 LTS 版本同时发布。
社区支持提供于:https://discuss.linuxcontainers.org
错误可在以下位置报告:https://github.com/lxc/incus/issues