{
  "properties": {
    "apiVersion": {
      "description": "APIVersion defines the versioned schema of this representation of an object.\nServers should convert recognized schemas to the latest internal value, and\nmay reject unrecognized values.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources",
      "type": [
        "string",
        "null"
      ]
    },
    "kind": {
      "description": "Kind is a string value representing the REST resource this object represents.\nServers may infer this from the endpoint the client submits requests to.\nCannot be updated.\nIn CamelCase.\nMore info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds",
      "type": [
        "string",
        "null"
      ]
    },
    "metadata": {
      "type": "object"
    },
    "spec": {
      "additionalProperties": false,
      "properties": {
        "backendServices": {
          "description": "BackendServices specifies Kubernetes services whose backends\nare automatically synced to Envoy using EDS.  Traffic for these\nservices is not forwarded to an Envoy listener. This allows an\nEnvoy listener load balance traffic to these backends while\nnormal Cilium service load balancing takes care of balancing\ntraffic for these services at the same time.",
          "items": {
            "additionalProperties": false,
            "properties": {
              "name": {
                "description": "Name is the name of a destination Kubernetes service that identifies traffic\nto be redirected.",
                "type": "string"
              },
              "namespace": {
                "description": "Namespace is the Kubernetes service namespace.\nIn CiliumEnvoyConfig namespace defaults to the namespace of the CEC,\nIn CiliumClusterwideEnvoyConfig namespace defaults to \"default\".",
                "type": [
                  "string",
                  "null"
                ]
              },
              "number": {
                "description": "Ports is a set of port numbers, which can be used for filtering in case of underlying\nis exposing multiple port numbers.",
                "items": {
                  "type": "string"
                },
                "type": [
                  "array",
                  "null"
                ]
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        },
        "nodeSelector": {
          "additionalProperties": false,
          "description": "NodeSelector is a label selector that determines to which nodes\nthis configuration applies.\nIf nil, then this config applies to all nodes.",
          "properties": {
            "matchExpressions": {
              "description": "matchExpressions is a list of label selector requirements. The requirements are ANDed.",
              "items": {
                "additionalProperties": false,
                "description": "A label selector requirement is a selector that contains values, a key, and an operator that\nrelates the key and values.",
                "properties": {
                  "key": {
                    "description": "key is the label key that the selector applies to.",
                    "type": "string"
                  },
                  "operator": {
                    "description": "operator represents a key's relationship to a set of values.\nValid operators are In, NotIn, Exists and DoesNotExist.",
                    "enum": [
                      "In",
                      "NotIn",
                      "Exists",
                      "DoesNotExist"
                    ],
                    "type": "string"
                  },
                  "values": {
                    "description": "values is an array of string values. If the operator is In or NotIn,\nthe values array must be non-empty. If the operator is Exists or DoesNotExist,\nthe values array must be empty. This array is replaced during a strategic\nmerge patch.",
                    "items": {
                      "type": "string"
                    },
                    "type": [
                      "array",
                      "null"
                    ],
                    "x-kubernetes-list-type": "atomic"
                  }
                },
                "required": [
                  "key",
                  "operator"
                ],
                "type": "object"
              },
              "type": [
                "array",
                "null"
              ],
              "x-kubernetes-list-type": "atomic"
            },
            "matchLabels": {
              "additionalProperties": {
                "description": "MatchLabelsValue represents the value from the MatchLabels {key,value} pair.",
                "maxLength": 63,
                "pattern": "^(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?$",
                "type": "string"
              },
              "description": "matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels\nmap is equivalent to an element of matchExpressions, whose key field is \"key\", the\noperator is \"In\", and the values array contains only \"value\". The requirements are ANDed.",
              "type": [
                "object",
                "null"
              ]
            }
          },
          "type": [
            "object",
            "null"
          ],
          "x-kubernetes-map-type": "atomic"
        },
        "resources": {
          "description": "Envoy xDS resources, a list of the following Envoy resource types:\ntype.googleapis.com/envoy.config.listener.v3.Listener,\ntype.googleapis.com/envoy.config.route.v3.RouteConfiguration,\ntype.googleapis.com/envoy.config.cluster.v3.Cluster,\ntype.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment, and\ntype.googleapis.com/envoy.extensions.transport_sockets.tls.v3.Secret.",
          "items": {
            "type": "object",
            "x-kubernetes-preserve-unknown-fields": true
          },
          "type": "array"
        },
        "services": {
          "description": "Services specifies Kubernetes services for which traffic is\nforwarded to an Envoy listener for L7 load balancing. Backends\nof these services are automatically synced to Envoy usign EDS.",
          "items": {
            "additionalProperties": false,
            "properties": {
              "listener": {
                "description": "Listener specifies the name of the Envoy listener the\nservice traffic is redirected to. The listener must be\nspecified in the Envoy 'resources' of the same\nCiliumEnvoyConfig.\n\nIf omitted, the first listener specified in 'resources' is\nused.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "name": {
                "description": "Name is the name of a destination Kubernetes service that identifies traffic\nto be redirected.",
                "type": "string"
              },
              "namespace": {
                "description": "Namespace is the Kubernetes service namespace.\nIn CiliumEnvoyConfig namespace this is overridden to the namespace of the CEC,\nIn CiliumClusterwideEnvoyConfig namespace defaults to \"default\".",
                "type": [
                  "string",
                  "null"
                ]
              },
              "ports": {
                "description": "Ports is a set of service's frontend ports that should be redirected to the Envoy\nlistener. By default all frontend ports of the service are redirected.",
                "items": {
                  "type": "integer"
                },
                "type": [
                  "array",
                  "null"
                ]
              }
            },
            "required": [
              "name"
            ],
            "type": "object"
          },
          "type": [
            "array",
            "null"
          ]
        }
      },
      "required": [
        "resources"
      ],
      "type": [
        "object",
        "null"
      ]
    }
  },
  "required": [
    "metadata"
  ],
  "type": "object"
}