多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

Kubernetes Python Client 详解:V1GroupSubject 模型与基于用户组的请求匹配

Kubernetes Python Client 详解:V1GroupSubject 模型与基于用户组的请求匹配 后端云原生容器编排【免费下载链接】pythonOfficial Python client library for kubernetes项目地址https://gitcode.com/gh_mirrors/python1/python点击查看免费下载导读本文基于官方 Python 客户端库kubernetes 项目中的V1GroupSubject模型类展开讲解。该模型用于 Kubernetes 的 flowcontrolAPI Priority and Fairness请求优先级与公平性体系中以**用户组Group**为维度匹配请求发起者。读完本文你将掌握V1GroupSubject的字段语义、源码实现细节、在FlowcontrolV1Subject中的嵌套位置以及如何在 Python 中构造、序列化与反序列化该模型从而在客户端侧正确表达按组匹配的 PriorityLevelConfiguration 策略。一、V1GroupSubject 是什么APF 中按组匹配请求发起者Kubernetes 的 flowcontrol.apiserver.k8s.io 组对应客户端中的flowcontrol_v1_api提供API Priority and FairnessAPF能力用于控制请求的优先级排队与公平调度。而要对请求实施优先级策略首先要回答“这个请求是谁发起的”这一角色由Subject主体概念承担。在 FlowcontrolV1Subject 模型源码 中Subject 的定义非常明确Subject matches the originator of a request, as identified by the request authentication system. There are three ways of matching an originator; by user, group, or service account.即Subject 用于匹配请求的发起者共有三种匹配维度——user用户名、group用户组、serviceAccount服务账号。V1GroupSubject正是其中的group 维度实现负责“按用户组名称匹配请求发起者”。在 OpenAPI 定义中scripts/swagger.jsonflowcontrol.v1.Subject的group字段通过$ref指向v1.GroupSubjectgroup: { $ref: #/definitions/v1.GroupSubject, description: group matches based on user group name. }也就是说V1GroupSubject不是一个孤立的模型它是FlowcontrolV1Subject.group字段的承载类型。客户端在构造 APF 策略时需要先构造V1GroupSubject实例再把它放进FlowcontrolV1Subject的group字段同时将kind字段设为Group。二、模型定义与唯一字段nameV1GroupSubject是一个非常精简的模型只包含一个必填字段name。这一点在 OpenAPI 定义中明确可见scripts/swagger.jsonv1.GroupSubject: { description: GroupSubject holds detailed information for group-kind subject., properties: { name: { description: name is the user group that matches, or \*\ to match all user groups. ... Required., type: string } }, required: [name], type: object }在 异步版模型源码 中字段声明为name: StrictStr Field( descriptionname is the user group that matches, or * to match all user groups. ... Required. )字段语义总结如下项目说明字段名name类型strPython 侧为StrictStr即严格字符串校验是否必填是OpenAPIrequired列表与字段注释均标注 Required取值含义匹配的用户组名称取值为*时表示匹配所有用户组常见组名来源Kubernetes apiserver 认证包pkg/authentication/user/user.go中定义了一些知名组名如system:masters、system:authenticated等需要特别强调的是*通配语义将name设为*即可匹配所有用户组这在需要放行全部经过认证的请求时非常实用。三、从源码看模型实现细节3.1 基于 pydantic 的严格配置该模型继承自pydantic.BaseModel其model_configkubernetes/aio/client/models/v1_group_subject.py#L115-L121采用如下严格策略model_config ConfigDict( validate_by_nameTrue, validate_by_aliasTrue, validate_assignmentTrue, extraforbid, protected_namespaces(), )其中值得关注的是validate_by_nameTrue/validate_by_aliasTrue同时支持按属性名name与按 wire 别名同样为name校验validate_assignmentTrue实例构造之后的字段赋值也会触发校验杜绝运行时塞入非法类型extraforbid禁止传入未声明的额外字段这与 OpenAPI 模型严格的 schema 约束一致避免拼写错误被静默忽略name: StrictStr要求值必须是真正的str类型传入数字等会被直接拒绝。3.2 序列化与反序列化与客户端库中其他模型一致V1GroupSubject提供了一整套转换方法kubernetes/aio/client/models/v1_group_subject.py#L124-L209方法作用to_str()/__repr__返回pprint格式化后的可读字符串表示to_json()返回 JSON 字符串按 wire 别名序列化from_json(json_str)从 JSON 字符串反序列化出模型实例内部调用from_dictto_dict()返回 dict 表示serializeTrue时使用 wire 名称from_dict(obj)从 dict 构造模型实例obj为None时返回None其openapi_types与attribute_map也保持一致openapi_types {name: str} attribute_map {name: name}由于name的 Python 属性名与 JSON wire 名称完全相同序列化路径上没有别名换算模型十分直观。3.3 同步与异步双版本该模型在仓库中存在两个完全同构的实现异步版kubernetes/aio/client/models/v1_group_subject.py供kubernetes.aio异步客户端使用同步版kubernetes/client/models/v1_group_subject.py供kubernetes.client同步客户端使用。两版代码逻辑完全一致均基于pydantic生成。这意味着无论使用同步还是异步客户端V1GroupSubject的构造与字段语义都没有差异。四、在 FlowcontrolV1Subject 中的嵌套位置V1GroupSubject的价值体现在它作为FlowcontrolV1Subject的group字段被整体引用。FlowcontrolV1Subject共有四个字段kubernetes/aio/client/models/flowcontrol_v1_subject.py#L99-L126字段类型说明kindstr必填指明其他三个字段中哪一个非空groupOptional[V1GroupSubject]按用户组名匹配userOptional[V1UserSubject]按用户名匹配service_accountOptional[V1ServiceAccountSubject]按服务账号匹配从from_dict的实现kubernetes/aio/client/models/flowcontrol_v1_subject.py#L236-L259可以看到group字段的反序列化会委托给V1GroupSubject.from_dict(...)group: V1GroupSubject.from_dict(obj[group]) if obj.get(group) is not None else None,同理在序列化侧__openapi_generator_modern_projection也会对group调用其自身的to_dict()进行递归转换。这就是客户端库中嵌套模型的标准协作方式外层模型负责组装内层模型负责字段级转换。三种 Subject 的完整属性对比可进一步参考 FlowcontrolV1Subject.md 与 V1GroupSubject.md 两份模型文档。五、实战使用示例5.1 直接构造 V1GroupSubjectfrom kubernetes.aio.client.models.v1_group_subject import V1GroupSubject # 匹配特定用户组 group_subject V1GroupSubject(namesystem:masters) # 匹配所有用户组 wildcard_subject V1GroupSubject(name*)由于name为必填字段且开启了validate_assignment漏传name或传入非字符串值都会在构造/赋值时立即报错。5.2 组合进 FlowcontrolV1Subject 使用from kubernetes.aio.client.models.flowcontrol_v1_subject import FlowcontrolV1Subject from kubernetes.aio.client.models.v1_group_subject import V1GroupSubject subject FlowcontrolV1Subject( kindGroup, groupV1GroupSubject(namesystem:authenticated), )5.3 JSON 与 dict 互转模型文档 V1GroupSubject.md 给出了标准的 JSON/dict 转换流程from kubernetes.aio.client.models.v1_group_subject import V1GroupSubject # 从 JSON 字符串创建实例 json_str {name: system:authenticated} instance V1GroupSubject.from_json(json_str) # 打印 JSON 字符串表示 print(instance.to_json()) # 转换为 dict再转回实例 subject_dict instance.to_dict() restored V1GroupSubject.from_dict(subject_dict)该流程可用于在客户端与 API Server 之间传递策略配置例如配合flowcontrol_v1_api的 PriorityLevelConfiguration 读写接口。六、模块文档与索引位置V1GroupSubject在异步客户端的模块文档中通过 Sphinxautomodule指令自动生成doc/source/kubernetes.aio.client.models.v1_group_subject.rst并在 kubernetes/aio/client/models/__init__.py 中随包一并导出因此可以直接以from kubernetes.aio.client.models import V1GroupSubject方式导入同步版同理见 kubernetes/client/models/init.py。总结V1GroupSubject虽然只承载一个name字段却是 Kubernetes APF 体系中按用户组维度匹配请求的核心构件。它通过与FlowcontrolV1Subject的嵌套协作将“哪个用户组发出的请求走哪条优先级策略”这一语义在 Python 客户端中落地。理解它的必填约束、*通配语义以及严格的 pydantic 校验行为是在客户端正确构造 PriorityLevelConfiguration 策略的前提。相关源码与文档路径如下便于继续深入异步模型实现kubernetes/aio/client/models/v1_group_subject.py同步模型实现kubernetes/client/models/v1_group_subject.py宿主模型kubernetes/aio/client/models/flowcontrol_v1_subject.py模型文档kubernetes/aio/docs/V1GroupSubject.mdOpenAPI 定义scripts/swagger.json赞分享后端云原生容器编排【免费下载链接】pythonOfficial Python client library for kubernetes项目地址https://gitcode.com/gh_mirrors/python1/python点击查看免费下载相关推荐Kubernetes Python Client 中 AuthenticationV1TokenRequest 模型详解ServiceAccount 令牌请求的完整指南Kubernetes Python Client 中 AuthenticationV1TokenRequest 模型详解ServiceAccount 令牌请求后端云原生容器编排Kubernetes Python 客户端详解StorageV1TokenRequest 模型与 ServiceAccount Token 请求实战Kubernetes Python 客户端详解StorageV1TokenRequest 模型与 ServiceAccount Token 请求实战 本篇技术后端云原生容器编排Kubernetes Python 客户端 V1NonResourcePolicyRule 模型详解为非资源请求定义流量控制匹配规则Kubernetes Python 客户端 V1NonResourcePolicyRule 模型详解为非资源请求定义流量控制匹配规则 V1NonResourc后端云原生容器编排上一篇Floci实战指南使用Terraform与Floci进行基础设施测试的完整教程下一篇【亲测免费】 探索PyTorch的Opacus隐私保护深度学习的新里程碑创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表