ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Kata Containers 中 Cloud Hypervisor LandlockConfig 模型解析:基于 OpenAPI 客户端的文件系统访问控制配置

Kata Containers 中 Cloud Hypervisor LandlockConfig 模型解析:基于 OpenAPI 客户端的文件系统访问控制配置 云原生容器运行时【免费下载链接】kata-containersKata Containers is an open source project and community working to build a standard implementation of lightweight Virtual Machines (VMs) that feel and perform like containers, but provide the workload isolation and security advantages of VMs. https://katacontainers.io/项目地址https://gitcode.com/gh_mirrors/ka/kata-containers点击查看免费下载LandlockConfig 是 Kata Containers 仓库中 Cloud Hypervisor Go API 客户端由 OpenAPI Generator 生成里的一个核心数据模型用于描述路径 访问权限形式的 Landlock 规则配合 VmConfig 中的landlock_enable开关可在沙箱虚拟机启动时对 VMM 进程施加基于 Landlock LSM 的文件系统访问控制。本文将以 LandlockConfig.md 为骨架结合仓库内的 OpenAPI 定义、Go 实现以及 virtcontainers 调用链完整讲解该模型的字段语义、构造与序列化方式以及它在 Kata Containers 启动 Cloud Hypervisor 虚拟机时扮演的角色帮助读者理解如何在代码层面配置和消费这套 Landlock 规则。Landlock 与 Cloud Hypervisor 客户端在 Kata 中的定位Kata Containers 的运行时Go 版位于 src/runtime/virtcontainers其中clh.go负责与 Cloud Hypervisor VMM 交互。为了管理虚拟机生命周期创建、启动、挂起、热插拔设备、快照迁移等Kata 通过 Cloud Hypervisor 提供的本地 HTTP API地址形如http://localhost/api/v1详见 客户端 README发起请求。这套 HTTP API 以 OpenAPI 3.0 规范定义仓库中的权威来源有两个cloud-hypervisor.yamlCloud Hypervisor API 的原始 OpenAPI 规范API 版本 0.3.0client/由 OpenAPI Generator 生成的 Go 客户端代码、模型文档与 README。Landlock 是 Linux 内核提供的 LSMLinux Security Module沙箱机制Cloud Hypervisor 借助它在 VMM 层面限制自身对宿主机文件系统的访问landlock_enable打开该能力landlock_rules则以白名单形式声明 VMM 可以读写哪些路径。Kata Containers 将其纳入VmConfig使沙箱在创建虚拟机时即可按需收紧 VMM 的文件系统权限。LandlockConfig 模型定义Path 与 Access 两个必填字段LandlockConfig 的模型文档LandlockConfig.md将其定义为只有两个属性的简单结构NameTypeDescriptionNotesPathstringAccessstring字段语义可从 OpenAPI 规范的 schema 精确确认。在 cloud-hypervisor.yaml 中LandlockConfig: required: - path - access type: object properties: path: type: string access: type: string由此可以得到明确的实现事实path对应 Go 字段Path表示被 Landlock 规则覆盖的文件系统路径目录或文件例如/run/kata-containers、某个共享卷的挂载点等access对应 Go 字段Access表示该路径上允许的访问权限集合。Cloud Hypervisor 的 Landlock 规则以字符串形式表达权限位具体取值集合由 VMM 侧定义本文仅依据仓库内 OpenAPI 定义权限枚举以 Cloud Hypervisor 实际行为为准两个字段都是必填项required构造 LandlockConfig 实例时两者必须同时赋值缺失任何一个都会导致 API 请求校验失败。在 Go 客户端中这一结构被生成为 model_landlock_config.go// LandlockConfig struct for LandlockConfig type LandlockConfig struct { Path string json:path Access string json:access }注意 JSON 标签为path与access与 HTTP API 请求体中的字段名严格一致发送到/vm.create等接口时会原样序列化。LandlockConfig 在 VmConfig 中的使用总开关加规则列表LandlockConfig 并非独立使用而是作为VmConfig的landlock_rules数组元素存在。在 VmConfig.md 的模型表中末尾两项即为NameTypeDescriptionNotesLandlockEnablePointer tobool[optional] [default to false]LandlockRulesPointer to[]LandlockConfig[optional]与之对应的 OpenAPI 定义位于 cloud-hypervisor.yamllandlock_enable: type: boolean default: false landlock_rules: type: array items: $ref: #/components/schemas/LandlockConfig在 Go 生成的 model_vm_config.go 中LandlockEnable *bool json:landlock_enable,omitempty LandlockRules *[]LandlockConfig json:landlock_rules,omitempty这两者的配合关系是landlock_enable默认为false此时即使landlock_rules有内容也不会生效只有当landlock_enable置为true时landlock_rules中逐条LandlockConfig声明的路径 访问权限才会被 Cloud Hypervisor 应用到 VMM 进程上LandlockRules使用指针指向切片*[]LandlockConfig表示该字段可缺省序列化时带omitempty未设置则不会出现在请求体中。Go 客户端 API 方法详解构造、取值与赋值模型文档 LandlockConfig.md 罗列了全部 8 个公开方法其实际实现都在 model_landlock_config.go 中下面逐一说明。构造函数func NewLandlockConfig(path string, access string) *LandlockConfigNewLandlockConfig实例化一个新的 LandlockConfig 对象将传入的path与access直接赋给对应字段后返回指针实现。由于path、access均为 schema 中的必填属性构造器保证这两个字段总是被设置满足 API 校验要求。func NewLandlockConfigWithDefaults() *LandlockConfigNewLandlockConfigWithDefaults仅分配一个空对象不设置任何字段实现。此构造器只初始化有默认值的属性——而 LandlockConfig 的两个属性都没有定义默认值因此返回的是零值对象并不保证必填字段已被赋值直接发送到 API 端会被拒绝。文档中已明确提示这一点。访问器与赋值器每个字段都配套生成了一组方法实现模式完全相同方法语义GetPath() string/GetAccess() string返回字段值若接收者为 nil 则返回零值空字符串GetPathOk() (*string, bool)/GetAccessOk() (*string, bool)返回字段指针与布尔标记用于判断值是否已被设置SetPath(v string)/SetAccess(v string)将字段设置为给定值以GetPath为例model_landlock_config.go#L42-L50func (o *LandlockConfig) GetPath() string { if o nil { var ret string return ret } return o.Path }GetPathOk则在对象为 nil 时返回(nil, false)否则返回字段指针与true。这套Ok 方法 布尔标记是 OpenAPI Generator 生成 Go 客户端的标准惯例便于调用方在构造配置时安全地判断字段是否可读。JSON 序列化与可空包装模型还提供了两个与 JSON 处理相关的能力MarshalJSONmodel_landlock_config.go#L90-L99将对象序列化为{path:...,access:...}形式两个字段无条件写入NullableLandlockConfig包装类型model_landlock_config.go#L101-L138提供Get、Set、IsSet、Unset以及带指针语义的MarshalJSON/UnmarshalJSON用于显式表达字段是否被设置的状态适合在配置合并、快照恢复等场景中区分零值与未赋值。在 Kata Containers 运行时中的落地从构造规则到发送 APIKata Containers 的 Cloud Hypervisor 封装位于 src/runtime/virtcontainers/clh.go其中定义了cloudHypervisor结构与clhClientApi接口clh.go#L100-L129并通过CreateVM(ctx, vmConfig)将组装好的chclient.VmConfig发送到/vm.create接口。整个VmConfig是在 clh.go#L567 附近的构建流程中逐步填充的clh.vmconfig *chclient.NewVmConfig(*chclient.NewPayloadConfig()) ... clh.vmconfig.Platform chclient.NewPlatformConfig()这意味着任何希望为沙箱启用 Landlock 的路径都应在该构建流程中向clh.vmconfig.LandlockEnable赋true并通过chclient.NewLandlockConfig(path, access)构造规则追加到LandlockRules切片中。从源码结构看LandlockConfig 的消费路径为调用方virtcontainers 的 Cloud Hypervisor 实现构造[]chclient.LandlockConfig每条规则即一个Path Access组合将其挂载到VmConfig.LandlockRules同时置位VmConfig.LandlockEnableclhClientApi.CreateVM将整个VmConfig序列化为 JSON 并PUT /vm.createCloud Hypervisor VMM 依据landlock_enable与landlock_rules对自身进程施加 Landlock LSM 限制。仓库内的生成校验示例client/api/openapi.yaml也展示了该字段的默认形态landlock_enable: false且landlock_rules为空数组与默认不启用的语义一致。实战在 Go 代码中构造 LandlockConfig 并装配 VmConfig综合上述模型一个可运行的构造片段如下基于客户端公开 APIimport ( chclient github.com/kata-containers/kata-containers/src/runtime/virtcontainers/pkg/cloud-hypervisor/client ) // 1) 构造单条 Landlock 规则路径 访问权限 rule : chclient.NewLandlockConfig(/run/kata-containers, rw) // 等价写法 // rule : chclient.LandlockConfig{Path: /run/kata-containers, Access: rw} // rule.SetPath(/run/kata-containers) // rule.SetAccess(rw) // 2) 构造 VmConfigpayload 为必填参数 vmConfig : chclient.NewVmConfig(*chclient.NewPayloadConfig()) // 3) 启用 Landlock 并装配规则列表 enable : true vmConfig.LandlockEnable enable vmConfig.LandlockRules []chclient.LandlockConfig{*rule} // 4) 序列化后的 JSON 形如 // {payload:{...},landlock_enable:true,landlock_rules:[{path:/run/kata-containers,access:rw}]}几个关键注意点NewLandlockConfig的参数顺序是(path, access)两者都必须为非空字符串若使用NewLandlockConfigWithDefaults()后再 Set务必同时设置两个字段否则必填校验失败LandlockEnable与LandlockRules均为指针类型赋值时需取地址enable、[]LandlockConfig{...}是否真正启用 Landlock 最终由 VMM 侧的内核支持与 Cloud Hypervisor 编译选项共同决定Kata 客户端只负责正确传递配置。与其他模型的关联与进一步阅读LandlockConfig 在客户端模型体系中与以下文档/代码直接关联VmConfig.mdVmConfig全量字段表LandlockEnable、LandlockRules位于其中作为虚拟机总配置的一部分model_vm_config.goVmConfig的 Go 实现含LandlockRules的Get/GetOk/Set/Has方法族cloud-hypervisor.yamlOpenAPI 规范源头LandlockConfig schema 与 VmConfig schema 均在此定义client/api/openapi.yaml生成客户端的嵌入式 OpenAPI 定义副本含请求示例clh.goKata Containers 侧 Cloud Hypervisor 封装CreateVM等接口是VmConfig的最终消费方。若想继续深入整个模型体系可参考 客户端 README 的模型列表含BalloonConfig、CpusConfig、MemoryConfig、NetConfig、FsConfig、VsockConfig等全部模型与 DefaultApi 文档/vm.create、/vm.boot、/vm.add-device等全部 API 端点。小结LandlockConfig 是 Cloud Hypervisor OpenAPI 客户端中结构最简单的模型之一却承担着沙箱文件系统访问控制的关键职责两个必填字段Path与Access定义一条白名单规则若干规则组成VmConfig.LandlockRules由LandlockEnable总开关统一启停。理解其字段语义、构造函数与 JSON 序列化方式是正确配置 Kata Containers Cloud Hypervisor 沙箱 Landlock 能力的第一步。本文涉及的全部定义、实现与调用点均可直接在 client/docs/LandlockConfig.md、model_landlock_config.go 与 clh.go 中逐一核对。赞分享云原生容器运行时【免费下载链接】kata-containersKata Containers is an open source project and community working to build a standard implementation of lightweight Virtual Machines (VMs) that feel and perform like containers, but provide the workload isolation and security advantages of VMs. https://katacontainers.io/项目地址https://gitcode.com/gh_mirrors/ka/kata-containers点击查看免费下载相关推荐Kata Containers 中的 cloud-hypervisor VmmPingResponseVMM 存活探测与 API 客户端模型解析Kata Containers 中的 cloud hypervisor VmmPingResponseVMM 存活探测与 API 客户端模型解析 VmmPin云原生容器运行时Kata Containers 中的 cloud-hypervisor OpenAPI Go 客户端基于本地 HTTP API 的 VMM 管理实战指南Kata Containers 中的 cloud hypervisor OpenAPI Go 客户端基于本地 HTTP API 的 VMM 管理实战指南 导读云原生容器运行时Kata Containers 中 Cloud Hypervisor 的 VdpaConfigvDPA 设备热插拔配置模型与 Go 客户端实践Kata Containers 中 Cloud Hypervisor 的 VdpaConfigvDPA 设备热插拔配置模型与 Go 客户端实践 导读 本文围绕云原生容器运行时上一篇Hardhat 仓库中的 Template PackageNomic Foundation 标准化 npm 包工程脚手架的完整实践下一篇WarcraftHelper完全指南5个步骤让魔兽争霸3在现代电脑上完美运行创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表