1

假设我的k8s集群上有一个自定义资源暴露在专有 api 端点上,例如somecompany/v1

有没有办法验证.yaml描述此资源的清单?

这是自定义资源提供者应该公开的功能,还是 CRD 本身支持的k8s功能?

4

1 回答 1

2

让我们看一个简单的例子:

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: myresources.stable.example.com
spec:
  group: stable.example.com
  versions:
    - name: v1
      served: true
      storage: true
  scope: Namespaced
  names:
    plural: myresources
    singular: myresource
    kind: MyResource
    shortNames:
    - mr
  validation:
    openAPIV3Schema:
      required: ["spec"]
      properties:
        spec:
          required: ["cert","key","domain"]
          properties:
            cert:
              type: "string"
              minimum: 1
            key:
              type: "string"
              minimum: 1
            domain:
              type: "string"
              minimum: 1 

spec.validation字段描述自定义资源的自定义验证方法。如果某些字段为空,您可以使用验证来阻止资源的创建。在此示例中,OpenAPIV3Schema验证约定用于检查我们自定义资源中某些字段的类型。我们确保自定义资源的specspec.certspec.keyspec.domain 字段确实存在并且它们是字符串类型。用户还可以使用validatingadmissionwebhook作为验证模式。您可以在官方文档中找到更多关于使用该字段的限制。

于 2019-09-02T13:38:55.723 回答