You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现K8s CRD中四个可选字段的互斥性?

CRD字段互斥性与可选性实现方案

你之前的配置仅针对optionOne做了简单排除,未覆盖所有互斥场景,因此无法生效。要实现四个字段可选(可全不填)且互斥(最多填一个),需借助OpenAPI v3的oneOf规则,结合required和not覆盖所有合法场景:

正确的CRD字段验证配置

spec:
  validation:
    openAPIV3Schema:
      type: object
      properties:
        optionOne:
          type: string
        optionTwo:
          type: string
        optionThree:
          type: string
        optionFour:
          type: string
      oneOf:
        # 仅填写optionOne
        - required: ["optionOne"]
          allOf:
            - not: { required: ["optionTwo"] }
            - not: { required: ["optionThree"] }
            - not: { required: ["optionFour"] }
        # 仅填写optionTwo
        - required: ["optionTwo"]
          allOf:
            - not: { required: ["optionOne"] }
            - not: { required: ["optionThree"] }
            - not: { required: ["optionFour"] }
        # 仅填写optionThree
        - required: ["optionThree"]
          allOf:
            - not: { required: ["optionOne"] }
            - not: { required: ["optionTwo"] }
            - not: { required: ["optionFour"] }
        # 仅填写optionFour
        - required: ["optionFour"]
          allOf:
            - not: { required: ["optionOne"] }
            - not: { required: ["optionTwo"] }
            - not: { required: ["optionThree"] }
        # 四个字段全不填
        - not:
            anyOf:
              - required: ["optionOne"]
              - required: ["optionTwo"]
              - required: ["optionThree"]
              - required: ["optionFour"]

配置说明

  • oneOf规则确保对象只能匹配其中一个分支,从根源上实现互斥逻辑;
  • 前四个分支分别对应"仅填写单个字段"的场景:用required指定当前字段必填,同时通过not排除其他三个字段的存在;
  • 最后一个分支允许四个字段全不填,满足可选性要求。

如果你的CRD还有其他业务必填字段,只需将这些字段添加到properties中即可,上述互斥规则不会受影响。

内容的提问来源于stack exchange,提问作者Mykhailo Shyshov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 13:24:51