返回新闻概述

Incus 0.3 已发布

2023 年 11 月 27 日

简介

Incus 团队很高兴地宣布发布 Incus 0.3!

这不是一个非常繁忙的版本,因为 Incus 团队中的大部分人一直在前往弗吉尼亚州里士满参加 Linux Plumbers 会议。

最令人兴奋的新功能可能是添加了对 OpenFGA 的支持,因为与 OpenID Connect 提供商结合使用时,现在允许使用完全开源的身份验证和授权堆栈。这也消除了某些等待从 LXD(具有 Canonical RBAC)迁移到 Incus 的最后一个障碍。

最重要的是,lxd-to-incus 迁移工具已经做了很多改进,我们还添加了对虚拟机中共享路径的热插拔/热移除的支持!

image|690x459

您可以在线试用: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