gpt4 book ai didi

Kubernetes:验证对自定义资源的更新请求

转载 作者:行者123 更新时间:2023-12-04 21:02:13 25 4
gpt4 key购买 nike

我在集群中创建了自定义资源定义 (CRD) 及其 Controller ,现在我可以创建自定义资源,但是如何验证对 CR 的更新请求?例如,只能更新某些字段。

最佳答案

自定义资源上的 Kubernetes 文档有一个关于 Advanced features and flexibility 的部分(别介意验证请求应该被视为一个非常基本的功能😉)。对于 CRD 的验证,它说:

Most validation can be specified in the CRD using OpenAPI v3.0 validation. Any other validations supported by addition of a Validating Webhook.


OpenAPI v3.0 验证不会帮助您完成您要查找的内容,即确保自定义资源上某些字段的不变性,它仅对您查看对象的一个​​实例并确定是否为无状态验证有帮助它是否有效,您无法将其与资源的先前版本进行比较并验证没有任何更改。
您可以使用验证 Webhooks。感觉就像一个重量级的解决方案,因为你需要实现一个符合验证 Webhook 契约的服务器(用特定类型的响应响应特定类型的请求),但你至少将拥有所需的数据来做出所需的决定,例如知道这是一个 UPDATE 请求并知道旧对象的样子。更多详情请见 here .我还没有真正尝试过验证 Webhooks,但感觉它可以工作。
我使用的另一种方法是将用户提供的数据存储在 Status 中。第一次创建自定义资源的子资源,然后总是查看那里的数据。对 Spec 的任何更改被忽略,尽管您的 Controller 可以注意到 Spec 中的内容之间的差异以及 Status 中的内容,并在 Status 中嵌入警告告诉用户他们以无效的方式改变了对象,并且他们指定的值被忽略。您可以看到该方法的示例 herehere .根据 relevant README section在该链接的 repo 中,这会导致以下行为:

The AVAILABLE column will show false if the UAA client for the team has not been successfully created. The WARNING column will display a warning if you have mutated the Team spec after initial creation. The DIRECTOR column displays the originally provided value for spec.director and this is the value that this team will continue to use. If you do attempt to mutate the Team resource, you can see your (ignored) user-provided value with the -o wide flag:

$ kubectl get team --all-namespaces -owide
NAMESPACE NAME DIRECTOR AVAILABLE WARNING USER-PROVIDED DIRECTOR
test test vbox-admin true vbox-admin

If we attempt to mutate the spec.director property, here's what we will see:

$ kubectl get team --all-namespaces -owide
NAMESPACE NAME DIRECTOR AVAILABLE WARNING USER-PROVIDED DIRECTOR
test test vbox-admin true API resource has been mutated; all changes ignored bad-new-director-name

关于Kubernetes:验证对自定义资源的更新请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57764927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com