定义需要以下字段之一或不需要字段的 Kubernetes 自定义资源

Define Kubernetes Custom Resource requiring one of the following fields or no fields

我尝试定义一个新的自定义资源,要求它具有 (1) 字段 A、(2) 字段 B 或 (3) 空主体之一。

例如:{A:1}、{B:1}、{}可以,但{A:1、B:2}不行。

这是我的自定义资源以 OpenApi 模式的形式定义:

foo:
  type: object
  properties:
    a:
     type: int
    b:
     type: int
  oneOf:
    - required: ["a"]
    - required: ["b"]
    # no sure how to include the empty body

我应该如何在 oneOf 约束中包含空主体?

OpenAPI 3.1

您可以使用 'null'(带引号)。

oneOf:
  - type: 'null'

或具有 属性 类型 null 的对象。

oneOf:
  - NullObjectExample:
    type: object
    properties:
      prop1:
        type: 'null'

OpenAPI 3.0

没有 null 类型,但您可以使用 nullable 字符串。您可能想要添加一个 description 说明这在任何时候都应为空。

oneOf:
  - type: string
    nullable: true

或者,具有可为空字符串的对象 属性。

oneOf:
  - NullObjectExample:
    type: object
    properties:
      prop1:
        type: string
        nullable: true

为什么没有空对象

除了意图不明确之外,这还可能存在安全漏洞。有关解释,请参阅 this page。简而言之:

If you do not clearly define the schema and you leave properties of a JSON payload empty, you effectively allow attackers to pass in any data. This means that you are opening your backend to various attacks, such as SQL injection.