gpt4 book ai didi

Kubernetes:是否可以在突变准入网络钩子(Hook)中改变状态子资源?

转载 作者:行者123 更新时间:2023-12-05 03:56:15 26 4
gpt4 key购买 nike

我正在为 CRD 编写 mutate 和 validate admission webhook。我正在使用 kubebuilder 来设置 CRD。规范和状态子资源运行正常。

作为突变的一部分,我有一个需要更新状态子资源的要求。

例如,Exam 是我的 CR,status.status 是考试状态。我想在突变中将状态设置为“NotDone”。

我尝试了以下方法

  1. 此处解释了 Json 修补方法 https://banzaicloud.com/blog/k8s-admission-webhooks/这给出了找不到自定义资源的错误。即它需要我们更新状态的自定义资源。
  2. 使用 go 客户端获取和更新状态 https://book-v1.book.kubebuilder.io/basics/status_subresource.html

但这些方法都不适合我。

我想知道是否有可能更新 admission webhooks 中的状态子资源?

最佳答案

当在 .spec.versions[].subresources 中设置自定义资源定义 (CRD) 时变异和验证准入 Webhook 必须包含在 .webhooks[].rules[].resources 中的子资源两者 <custom resource name><custom resource name>/<subresource name>值,以便改变和验证资源和子资源。

例如对于测试 CRD:

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: test.test
spec:
group: test
scope: Namespaced
names:
kind: Test
listKind: TestList
plural: tests
singular: test
shortNames:
- tst
versions:
- name: v1
served: true
storage: true
subresources:
status: { }

您必须像这样定义一个变异的准入网络钩子(Hook):

apiVersion: admissionregistration.k8s.io/v1
kind: MutatingWebhookConfiguration
metadata:
name: test
webhooks:
- name: test
sideEffects: None
rules:
- operations: ["CREATE", "UPDATE"]
apiGroups: ["test"]
apiVersions: ["*"]
resources: ["test", "test/status"]
failurePolicy: Fail
clientConfig:
service:
namespace: test
name: test
path: '/test'
caBundle: <the certificate in base64>
admissionReviewVersions: ["v1"]

类似于验证准入网络钩子(Hook):

apiVersion: admissionregistration.k8s.io/v1
kind: ValidatingWebhookConfiguration
metadata:
name: test
webhooks:
- name: test
sideEffects: None
rules:
- operations: ["CREATE", "UPDATE"]
apiGroups: ["test"]
apiVersions: ["*"]
resources: ["test", "test/status"]
failurePolicy: Fail
clientConfig:
service:
namespace: test
name: test
path: '/test'
caBundle: <the certificate in base64>
admissionReviewVersions: ["v1"]

此示例中的变异和验证 webhook 将在创建时被调用两次。第一次是资源,第二次是子资源。您可以通过阅读字段 .request.subResource 在请求中确定调用是针对资源还是子资源。 .对于资源来说它将是空的,它将包含子资源的子资源名称。这对于验证很重要,因为子资源上的突变仅在为子资源调用 webhook 时才可用。

这里需要特别注意的是,子资源的 mutating 和 validating webhook 在创建自定义资源的过程中不会被同步调用。相反,它们在自定义资源创建后被异步调用,因此子资源验证失败不会阻止自定义资源的创建。

关于Kubernetes:是否可以在突变准入网络钩子(Hook)中改变状态子资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59564757/

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