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

标签 go kubernetes openapi

我正在开发一个带有 CRD 的 Controller 。 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 不允许引用其他对象。对此进行了讨论:https://github.com/kubernetes/kubernetes/issues/54579 .决定不添加引用。

此评论中描述了解决方法:https://github.com/kubernetes/kubernetes/issues/54579#issuecomment-370372942 我没用过,你可以试试。

关于go - 使用嵌入式 core.v1.PodSpec 验证 CRD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56044319/

相关文章:

go - 使用 json key 文件从 golang 登录到 bigquery

go - golang中 `iota`的全称是什么?

kubernetes - 运行 kubectl 命令时出错

docker - 将 Kubernetes 集群与 Docker 网络互连

go - 访问嵌套结构中的字段

go - 无法通过 Testify Mock 对象错误

java - Swagger/Openapi-注释 : How to produce allOf with $ref?

swagger - 如何覆盖 openapi 规范中的示例?

docker - GKE : tensorflow_model_server: error while loading shared libraries:/usr/lib/x86_64-linux-gnu/libcuda. so.1 中的 GPU 部署:文件太短

Swagger 在 REST API 中识别罕见的端点