27|Kubernetes如何进行请求参数校验?

Kubernetes 参数校验流程
- 深入了解
- 翻译
- 解释
- 总结

1. Kubernetes 中的 RESTful API 接口在请求参数校验时,使用了 `metav1.CreateOptions` 类型的变量 `options`,并通过 `validation.ValidateCreateOptions` 函数对其进行参数校验。 2. 校验方法列表中包含了多个通用的资源校验函数,如 `ValidateLabelSelector`、`ValidateDeleteOptions`、`ValidateUpdateOptions` 等,这些函数被大量用于各类资源的校验逻辑中。 3. 在校验资源定义中的 `ObjectMeta.ManagedFields` 字段时,实际上是走的 Mutating Webhook,这是因为 Kubernetes 需要在校验失败时给 `ObjectMeta.ManagedFields` 设置默认值。 4. `rest.BeforeCreate` 函数中会先调用 `strategy.Validate` 方法来进行资源校验,`strategy.Validate` 方法实现会调用`k8s.io/kubernetes/pkg/apis/apps/validation`包中的 `ValidateXXX` 方法来校验资源的参数是否合法。 5. `rest.BeforeCreate` 函数中接着会调用`ValidateObjectMetaAccessor`函数,来校验资源的 `ObjectMeta`字段。 6. `createValidation`方法用来执行 Validating Webhook 列表,如果 kube-apiserver 在启动时加载了 Validating Webhook,则会执行 Validating Webhook 链。 7. Kubernetes 中创建资源的资源定义校验逻辑包括校验 CreateOptions、资源的 `ObjectMeta.ManagedFields`、资源校验策略、资源的 `ObjectMeta`字段和执行 Validating Webhook 校验资源。 8. 通过本节课的学习,应该已经了解了 Kubernetes 中资源校验的流程、校验点和具体的实现方式。 9. 课后练习包括查看准入控制链具体是如何被初始化的以及学习更新资源的校验流程和实现。
《Kubernetes 源码剖析与实战》,新⼈⾸单¥68