Обязательное поле для определения пользовательского ресурса kubernetes

Я пытаюсь написать схему валидации cd kubernetes. У меня есть массив (vc) структур, и одно из полей в этих структурах является обязательным (name поле).

Я пытался просмотреть различные примеры, но это не выдает ошибку, когда name не там. Любые предложения, что не так?

vc:
  type: array
  items:
    type: object
    properties:
      name:
        type: string
      address:
        type: string
    required:
    - name

1 ответ

Если вы используете v1.8, вам необходимо включить CustomResourceValidation Функция Gate для использования функции проверки. Это можно сделать с помощью следующего флага на kube-apiserver:

--feature-gates=CustomResourceValidation=true

Вот пример того, как это работает (я проверял это на v1.12, но это должно работать и на более ранних версиях):

CRD:

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: foos.stable.example.com
spec:
  group: stable.example.com
  versions:
    - name: v1
      served: true
      storage: true
  version: v1
  scope: Namespaced
  names:
    plural: foos
    singular: foo
    kind: Foo
  validation:
    openAPIV3Schema:
      properties:
        spec:
          properties:
            vc:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                  address:
                    type: string
                required:
                - name

Пользовательский ресурс:

apiVersion: "stable.example.com/v1"
kind: Foo
metadata:
  name: new-foo
spec:
  vc:
  - address: "bar"
  1. Создайте CRD.

kubectl create -f crd.yamlcustomresourcedefinition.apiextensions.k8s.io/foos.stable.example.com created

  1. Получите CRD и проверьте, существует ли поле проверки в выходных данных. Если этого не произойдет, возможно, у вас не включены функции.

kubectl get crd foos.stable.example.com -oyaml

  1. Попробуйте создать собственный ресурс. Это должно потерпеть неудачу с:

kubectl create -f cr-validation.yaml

The Foo "new-foo" is invalid: []: Invalid value: map[string]interface {}{"metadata":map[string]interface {}{"creationTimestamp":"2018-11-18T19:45:23Z", "generation":1, "uid":"7d7f8f0b-eb6a-11e8-b861-54e1ad9de0be", "name":"new-foo", "namespace":"default"}, "spec":map[string]interface {}{"vc":[]interface {}{map[string]interface {}{"address":"bar"}}}, "apiVersion":"stable.example.com/v1", "kind":"Foo"}: validation failure list: spec.vc.name in body is required

Другие вопросы по тегам