Go 使用嵌入式core.v1.PodSpec验证CRD

Go 使用嵌入式core.v1.PodSpec验证CRD,go,kubernetes,openapi,Go,Kubernetes,Openapi,我正在开发一个带有CRD的控制器。CRD包括我们的定制内容以及嵌入式core.v1.PodSpec。(v1.13.1) 我在CRD中定义了一个验证部分,该部分可以验证和强制我们的自定义字段上的约束,但我不知道如何为嵌入式PodSpec实现这一点。PodSpec太大,选项太多,无法手动将其添加到CRD的验证部分: apiVersion: apiextensions.k8s.io/v1beta1 kind: CustomResourceDefinition metadata: name: mys

我正在开发一个带有CRD的控制器。CRD包括我们的定制内容以及嵌入式core.v1.PodSpec。(v1.13.1)

我在CRD中定义了一个验证部分,该部分可以验证和强制我们的自定义字段上的约束,但我不知道如何为嵌入式PodSpec实现这一点。PodSpec太大,选项太多,无法手动将其添加到CRD的验证部分:

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: mystuff.example.com
spec:
  group: mystuff.example.com
  versions:
    - name: v1alpha1
      served: true
      storage: true
  names:
    kind: MyStuff
    plural: mystuffs
    singular: mystuff
    shortNames:
    - ms
  scope: Namespaced
  additionalPrinterColumns:
  - JSONPath: .status.phase
    name: Status
    type: string
  - JSONPath: .metadata.resourceVersion
    name: Version
    type: string
  validation:
    openAPIV3Schema:
      properties:
        spec:
          required:
            - myVar1
            - myVar2
            - podSpec
          properties:
            myVar1:
              type: boolean
            myVar2:
              type: boolean
            # Here I need to validate a valid core.v1.PodSpec
            podSpec:
              type: core.v1.PodSpec
其他人是如何做到这一点的

我还需要验证用户可以提交工作负载的任何机制,即直接使用kube apiserver或使用kubectl


谢谢您的帮助。

一般来说,CRD不允许放置对其他对象的引用。关于这一点进行了讨论:。决定不添加参考文献

此注释中描述了解决方法:
我没用过,但你可以试试

一般来说,CRD不允许将引用放在其他对象上。关于这一点进行了讨论:。决定不添加参考文献

此注释中描述了解决方法:
我没用过,但你可以试试

执行CRD验证有多种方法。如您所知,通过
.validation
进行静态验证是一种方法。另一种方法是通过一个。这允许您实现和部署Kubernetes API服务器将在资源许可之前调用的服务器

执行CRD验证有多种方法。如您所知,通过
.validation
进行静态验证是一种方法。另一种方法是通过一个。这允许您实现和部署Kubernetes API服务器将在资源许可之前调用的服务器

是的,我偶然发现了它,但它似乎从v1.9开始就被放弃了。我一直无法让这种方法发挥作用。您是否有其他方法来执行验证,或者有一个示例可供建议的方法参考?我偶然发现了这一点,但它似乎从v1.9开始就被放弃了。我一直无法让这种方法发挥作用。除了我的CRD本身的控制器外,您是否有其他方法来执行验证或示例,可以参考建议的方法以这种方式使用web挂钩,这是否意味着我需要开发和运行控制器/操作员(或您想称之为操作员的任何东西),kubernetes将依次联系以验证使用我的CRD提交的任何工作负载?是的,您将部署无状态微服务。这里有一个例子:要以这种方式使用web钩子,这是否意味着除了我的CRD本身的控制器之外,我还需要开发和运行一个控制器/操作员(或者你想叫它什么),kubernetes反过来会联系它来验证使用我的CRD提交的任何工作负载?是的,你会部署一个无状态微服务。以下是一个例子: