From 59bc62c4f13074f69124ef3f500f9504c267990c Mon Sep 17 00:00:00 2001 From: Harry Bagdi Date: Tue, 24 Aug 2021 09:51:24 -0700 Subject: [PATCH] implement GEP-820: remove extension points from route match types --- apis/v1alpha2/httproute_types.go | 11 --- apis/v1alpha2/tcproute_types.go | 49 +++---------- apis/v1alpha2/tlsroute_types.go | 51 +++---------- apis/v1alpha2/udproute_types.go | 46 +++--------- apis/v1alpha2/zz_generated.deepcopy.go | 32 +-------- .../gateway.networking.k8s.io_httproutes.yaml | 33 --------- .../gateway.networking.k8s.io_tcproutes.yaml | 68 +++--------------- .../gateway.networking.k8s.io_tlsroutes.yaml | 71 +++---------------- .../gateway.networking.k8s.io_udproutes.yaml | 68 +++--------------- 9 files changed, 60 insertions(+), 369 deletions(-) diff --git a/apis/v1alpha2/httproute_types.go b/apis/v1alpha2/httproute_types.go index 518b926430..446df2ea55 100644 --- a/apis/v1alpha2/httproute_types.go +++ b/apis/v1alpha2/httproute_types.go @@ -453,17 +453,6 @@ type HTTPRouteMatch struct { // // +optional Method *HTTPMethod `json:"method,omitempty"` - - // ExtensionRef is an optional, implementation-specific extension to the - // "match" behavior. For example, resource "myroutematcher" in group - // "networking.example.net". If the referent cannot be found, the rule is - // not included in the route. The controller must ensure the "ResolvedRefs" - // condition on the Route status is set to `status: False`. - // - // Support: Custom - // - // +optional - ExtensionRef *LocalObjectReference `json:"extensionRef,omitempty"` } // HTTPRouteFilter defines additional processing steps that must be completed diff --git a/apis/v1alpha2/tcproute_types.go b/apis/v1alpha2/tcproute_types.go index 5c9b615b28..0597922c05 100644 --- a/apis/v1alpha2/tcproute_types.go +++ b/apis/v1alpha2/tcproute_types.go @@ -57,35 +57,15 @@ type TCPRouteStatus struct { // TCPRouteRule is the configuration for a given rule. type TCPRouteRule struct { - // Matches define conditions used for matching the rule against incoming TCP - // connections. Each match is independent, i.e. this rule will be matched if - // **any** one of the matches is satisfied. If unspecified (i.e. empty), - // this Rule will match all requests for the associated Listener. - // - // Each client request MUST map to a maximum of one route rule. If a request - // matches multiple rules, matching precedence MUST be determined in order - // of the following criteria, continuing on ties: - // - // * The most specific match specified by ExtensionRef. Each implementation - // that supports ExtensionRef may have different ways of determining the - // specificity of the referenced extension. - // - // If ties still exist across multiple Routes, matching precedence MUST be - // determined in order of the following criteria, continuing on ties: - // - // * The oldest Route based on creation timestamp. For example, a Route with - // a creation timestamp of "2020-09-08 01:02:03" is given precedence over - // a Route with a creation timestamp of "2020-09-08 01:02:04". - // * The Route appearing first in alphabetical order by - // "/". For example, foo/bar is given precedence over - // foo/baz. - // - // If ties still exist within the Route that has been given precedence, - // matching precedence MUST be granted to the first matching rule meeting - // the above criteria. + // Matches define conditions used for matching the rule against incoming UDP + // connections. No matching criteria exists currently but MAY be added in + // future. This implies that it is not possible to define match semantics + // within this resource and that any given listener on the Gateway MUST + // match a single Route resource and a single rule within the Route + // resource. // // +optional - // +kubebuilder:validation:MaxItems=8 + // +kubebuilder:validation:MaxItems=0 Matches []TCPRouteMatch `json:"matches,omitempty"` // BackendRefs defines the backend(s) where matching requests should be @@ -105,19 +85,10 @@ type TCPRouteRule struct { BackendRefs []BackendRef `json:"backendRefs,omitempty"` } -// TCPRouteMatch defines the predicate used to match connections to a -// given action. +// TCPRouteMatch defines the predicate used to match TCP connections to a +// given backend. No matching criteria exists currently but MAY be added +// in future. type TCPRouteMatch struct { - // ExtensionRef is an optional, implementation-specific extension to the - // "match" behavior. For example, resource "mytcproutematcher" in group - // "networking.example.net". If the referent cannot be found, the rule MUST - // not be included in the route. The controller must ensure the - // "ResolvedRefs" condition on the Route status is set to `status: False`. - // - // Support: Custom - // - // +optional - ExtensionRef *LocalObjectReference `json:"extensionRef,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/v1alpha2/tlsroute_types.go b/apis/v1alpha2/tlsroute_types.go index 94b6913acb..5973d3afd0 100644 --- a/apis/v1alpha2/tlsroute_types.go +++ b/apis/v1alpha2/tlsroute_types.go @@ -90,38 +90,15 @@ type TLSRouteStatus struct { // TLSRouteRule is the configuration for a given rule. type TLSRouteRule struct { - // Matches define conditions used for matching the rule against incoming TLS - // connections. Each match is independent, i.e. this rule will be matched if - // **any** one of the matches is satisfied. If unspecified (i.e. empty), - // this Rule will match all requests for the associated Listener. - // - // Each client request MUST map to a maximum of one route rule. If a request - // matches multiple rules, matching precedence MUST be determined in order - // of the following criteria, continuing on ties: - // - // * The longest matching SNI. - // * The longest matching precise SNI (without a wildcard). This means that - // "b.example.com" should be given precedence over "*.example.com". - // * The most specific match specified by ExtensionRef. Each implementation - // that supports ExtensionRef may have different ways of determining the - // specificity of the referenced extension. - // - // If ties still exist across multiple Routes, matching precedence MUST be - // determined in order of the following criteria, continuing on ties: - // - // * The oldest Route based on creation timestamp. For example, a Route with - // a creation timestamp of "2020-09-08 01:02:03" is given precedence over - // a Route with a creation timestamp of "2020-09-08 01:02:04". - // * The Route appearing first in alphabetical order by - // "/". For example, foo/bar is given precedence over - // foo/baz. - // - // If ties still exist within the Route that has been given precedence, - // matching precedence MUST be granted to the first matching rule meeting - // the above criteria. + // Matches define conditions used for matching the rule against incoming UDP + // connections. No matching criteria exists currently but MAY be added in + // future. This implies that it is not possible to define match semantics + // within this resource and that any given listener on the Gateway MUST + // match a single Route resource and a single rule within the Route + // resource. // // +optional - // +kubebuilder:validation:MaxItems=8 + // +kubebuilder:validation:MaxItems=0 Matches []TLSRouteMatch `json:"matches,omitempty"` // BackendRefs defines the backend(s) where matching requests should be @@ -144,19 +121,9 @@ type TLSRouteRule struct { BackendRefs []BackendRef `json:"backendRefs,omitempty"` } -// TLSRouteMatch defines the predicate used to match connections to a -// given action. +// TLSRouteMatch defines the predicate used to match TLS sessions to a given +// backend. No matching criteria exists currently but MAY be added in future. type TLSRouteMatch struct { - // ExtensionRef is an optional, implementation-specific extension to the - // "match" behavior. For example, resource "mytcproutematcher" in group - // "networking.example.net". If the referent cannot be found, the rule MUST - // not be included in the route. The controller must ensure the - // "ResolvedRefs" condition on the Route status is set to `status: False`. - // - // Support: Custom - // - // +optional - ExtensionRef *LocalObjectReference `json:"extensionRef,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/v1alpha2/udproute_types.go b/apis/v1alpha2/udproute_types.go index 4a590c23c3..10087e803f 100644 --- a/apis/v1alpha2/udproute_types.go +++ b/apis/v1alpha2/udproute_types.go @@ -58,34 +58,14 @@ type UDPRouteStatus struct { // UDPRouteRule is the configuration for a given rule. type UDPRouteRule struct { // Matches define conditions used for matching the rule against incoming UDP - // connections. Each match is independent, i.e. this rule will be matched if - // **any** one of the matches is satisfied. If unspecified (i.e. empty), - // this Rule will match all requests for the associated Listener. - // - // Each client request MUST map to a maximum of one route rule. If a request - // matches multiple rules, matching precedence MUST be determined in order - // of the following criteria, continuing on ties: - // - // * The most specific match specified by ExtensionRef. Each implementation - // that supports ExtensionRef may have different ways of determining the - // specificity of the referenced extension. - // - // If ties still exist across multiple Routes, matching precedence MUST be - // determined in order of the following criteria, continuing on ties: - // - // * The oldest Route based on creation timestamp. For example, a Route with - // a creation timestamp of "2020-09-08 01:02:03" is given precedence over - // a Route with a creation timestamp of "2020-09-08 01:02:04". - // * The Route appearing first in alphabetical order by - // "/". For example, foo/bar is given precedence over - // foo/baz. - // - // If ties still exist within the Route that has been given precedence, - // matching precedence MUST be granted to the first matching rule meeting - // the above criteria. + // connections. No matching criteria exists currently but MAY be added in + // future. This implies that it is not possible to define match semantics + // within this resource and that any given listener on the Gateway MUST + // match a single Route resource and a single rule within the Route + // resource. // // +optional - // +kubebuilder:validation:MaxItems=8 + // +kubebuilder:validation:MaxItems=0 Matches []UDPRouteMatch `json:"matches,omitempty"` // BackendRefs defines the backend(s) where matching requests should be @@ -105,19 +85,9 @@ type UDPRouteRule struct { BackendRefs []BackendRef `json:"backendRefs,omitempty"` } -// UDPRouteMatch defines the predicate used to match packets to a -// given action. +// UDPRouteMatch defines the predicate used to match UDP packets to a given +// backend. No matching criteria exists currently but MAY be added in future. type UDPRouteMatch struct { - // ExtensionRef is an optional, implementation-specific extension to the - // "match" behavior. For example, resource "mytcproutematcher" in group - // "networking.example.net". If the referent cannot be found, the rule MUST - // not be included in the route. The controller must ensure the - // "ResolvedRefs" condition on the Route status is set to `status: False`. - // - // Support: Custom - // - // +optional - ExtensionRef *LocalObjectReference `json:"extensionRef,omitempty"` } // +kubebuilder:object:root=true diff --git a/apis/v1alpha2/zz_generated.deepcopy.go b/apis/v1alpha2/zz_generated.deepcopy.go index 169e84c1ae..910be32f30 100644 --- a/apis/v1alpha2/zz_generated.deepcopy.go +++ b/apis/v1alpha2/zz_generated.deepcopy.go @@ -721,11 +721,6 @@ func (in *HTTPRouteMatch) DeepCopyInto(out *HTTPRouteMatch) { *out = new(HTTPMethod) **out = **in } - if in.ExtensionRef != nil { - in, out := &in.ExtensionRef, &out.ExtensionRef - *out = new(LocalObjectReference) - **out = **in - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRouteMatch. @@ -1277,11 +1272,6 @@ func (in *TCPRouteList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TCPRouteMatch) DeepCopyInto(out *TCPRouteMatch) { *out = *in - if in.ExtensionRef != nil { - in, out := &in.ExtensionRef, &out.ExtensionRef - *out = new(LocalObjectReference) - **out = **in - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TCPRouteMatch. @@ -1300,9 +1290,7 @@ func (in *TCPRouteRule) DeepCopyInto(out *TCPRouteRule) { if in.Matches != nil { in, out := &in.Matches, &out.Matches *out = make([]TCPRouteMatch, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } + copy(*out, *in) } if in.BackendRefs != nil { in, out := &in.BackendRefs, &out.BackendRefs @@ -1424,11 +1412,6 @@ func (in *TLSRouteList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *TLSRouteMatch) DeepCopyInto(out *TLSRouteMatch) { *out = *in - if in.ExtensionRef != nil { - in, out := &in.ExtensionRef, &out.ExtensionRef - *out = new(LocalObjectReference) - **out = **in - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TLSRouteMatch. @@ -1447,9 +1430,7 @@ func (in *TLSRouteRule) DeepCopyInto(out *TLSRouteRule) { if in.Matches != nil { in, out := &in.Matches, &out.Matches *out = make([]TLSRouteMatch, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } + copy(*out, *in) } if in.BackendRefs != nil { in, out := &in.BackendRefs, &out.BackendRefs @@ -1576,11 +1557,6 @@ func (in *UDPRouteList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *UDPRouteMatch) DeepCopyInto(out *UDPRouteMatch) { *out = *in - if in.ExtensionRef != nil { - in, out := &in.ExtensionRef, &out.ExtensionRef - *out = new(LocalObjectReference) - **out = **in - } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new UDPRouteMatch. @@ -1599,9 +1575,7 @@ func (in *UDPRouteRule) DeepCopyInto(out *UDPRouteRule) { if in.Matches != nil { in, out := &in.Matches, &out.Matches *out = make([]UDPRouteMatch, len(*in)) - for i := range *in { - (*in)[i].DeepCopyInto(&(*out)[i]) - } + copy(*out, *in) } if in.BackendRefs != nil { in, out := &in.BackendRefs, &out.BackendRefs diff --git a/config/crd/v1alpha2/gateway.networking.k8s.io_httproutes.yaml b/config/crd/v1alpha2/gateway.networking.k8s.io_httproutes.yaml index af01b2aca7..6ddd38c238 100644 --- a/config/crd/v1alpha2/gateway.networking.k8s.io_httproutes.yaml +++ b/config/crd/v1alpha2/gateway.networking.k8s.io_httproutes.yaml @@ -927,39 +927,6 @@ spec: \n ``` match: path: value: \"/foo\" headers: values: \ version: \"1\" ```" properties: - extensionRef: - description: "ExtensionRef is an optional, implementation-specific - extension to the \"match\" behavior. For example, resource - \"myroutematcher\" in group \"networking.example.net\". - If the referent cannot be found, the rule is not included - in the route. The controller must ensure the \"ResolvedRefs\" - condition on the Route status is set to `status: False`. - \n Support: Custom" - properties: - group: - description: Group is the group of the referent. For - example, "networking.k8s.io". When unspecified (empty - string), core API group is inferred. - maxLength: 253 - pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string - kind: - description: Kind is kind of the referent. For example - "HTTPRoute" or "Service". - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ - type: string - name: - description: Name is the name of the referent. - maxLength: 253 - minLength: 1 - type: string - required: - - group - - kind - - name - type: object headers: description: Headers specifies HTTP request header matchers. Multiple match values are ANDed together, meaning, a diff --git a/config/crd/v1alpha2/gateway.networking.k8s.io_tcproutes.yaml b/config/crd/v1alpha2/gateway.networking.k8s.io_tcproutes.yaml index 403d6e2f97..e564f209df 100644 --- a/config/crd/v1alpha2/gateway.networking.k8s.io_tcproutes.yaml +++ b/config/crd/v1alpha2/gateway.networking.k8s.io_tcproutes.yaml @@ -223,67 +223,19 @@ spec: minItems: 1 type: array matches: - description: "Matches define conditions used for matching the - rule against incoming TCP connections. Each match is independent, - i.e. this rule will be matched if **any** one of the matches - is satisfied. If unspecified (i.e. empty), this Rule will - match all requests for the associated Listener. \n Each client - request MUST map to a maximum of one route rule. If a request - matches multiple rules, matching precedence MUST be determined - in order of the following criteria, continuing on ties: \n - * The most specific match specified by ExtensionRef. Each - implementation that supports ExtensionRef may have different - ways of determining the specificity of the referenced extension. - \n If ties still exist across multiple Routes, matching precedence - MUST be determined in order of the following criteria, continuing - on ties: \n * The oldest Route based on creation timestamp. - For example, a Route with a creation timestamp of \"2020-09-08 - 01:02:03\" is given precedence over a Route with a creation - timestamp of \"2020-09-08 01:02:04\". * The Route appearing - first in alphabetical order by \"/\". For - example, foo/bar is given precedence over foo/baz. \n If - ties still exist within the Route that has been given precedence, - matching precedence MUST be granted to the first matching - rule meeting the above criteria." + description: Matches define conditions used for matching the + rule against incoming UDP connections. No matching criteria + exists currently but MAY be added in future. This implies + that it is not possible to define match semantics within this + resource and that any given listener on the Gateway MUST match + a single Route resource and a single rule within the Route + resource. items: description: TCPRouteMatch defines the predicate used to match - connections to a given action. - properties: - extensionRef: - description: "ExtensionRef is an optional, implementation-specific - extension to the \"match\" behavior. For example, resource - \"mytcproutematcher\" in group \"networking.example.net\". - If the referent cannot be found, the rule MUST not be - included in the route. The controller must ensure the - \"ResolvedRefs\" condition on the Route status is set - to `status: False`. \n Support: Custom" - properties: - group: - description: Group is the group of the referent. For - example, "networking.k8s.io". When unspecified (empty - string), core API group is inferred. - maxLength: 253 - pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string - kind: - description: Kind is kind of the referent. For example - "HTTPRoute" or "Service". - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ - type: string - name: - description: Name is the name of the referent. - maxLength: 253 - minLength: 1 - type: string - required: - - group - - kind - - name - type: object + TCP connections to a given backend. No matching criteria + exists currently but MAY be added in future. type: object - maxItems: 8 + maxItems: 0 type: array type: object maxItems: 16 diff --git a/config/crd/v1alpha2/gateway.networking.k8s.io_tlsroutes.yaml b/config/crd/v1alpha2/gateway.networking.k8s.io_tlsroutes.yaml index 7c3d675d98..731a96b5c9 100644 --- a/config/crd/v1alpha2/gateway.networking.k8s.io_tlsroutes.yaml +++ b/config/crd/v1alpha2/gateway.networking.k8s.io_tlsroutes.yaml @@ -265,70 +265,19 @@ spec: minItems: 1 type: array matches: - description: "Matches define conditions used for matching the - rule against incoming TLS connections. Each match is independent, - i.e. this rule will be matched if **any** one of the matches - is satisfied. If unspecified (i.e. empty), this Rule will - match all requests for the associated Listener. \n Each client - request MUST map to a maximum of one route rule. If a request - matches multiple rules, matching precedence MUST be determined - in order of the following criteria, continuing on ties: \n - * The longest matching SNI. * The longest matching precise - SNI (without a wildcard). This means that \"b.example.com\" - should be given precedence over \"*.example.com\". * The most - specific match specified by ExtensionRef. Each implementation - \ that supports ExtensionRef may have different ways of determining - the specificity of the referenced extension. \n If ties - still exist across multiple Routes, matching precedence MUST - be determined in order of the following criteria, continuing - on ties: \n * The oldest Route based on creation timestamp. - For example, a Route with a creation timestamp of \"2020-09-08 - 01:02:03\" is given precedence over a Route with a creation - timestamp of \"2020-09-08 01:02:04\". * The Route appearing - first in alphabetical order by \"/\". For - example, foo/bar is given precedence over foo/baz. \n If - ties still exist within the Route that has been given precedence, - matching precedence MUST be granted to the first matching - rule meeting the above criteria." + description: Matches define conditions used for matching the + rule against incoming UDP connections. No matching criteria + exists currently but MAY be added in future. This implies + that it is not possible to define match semantics within this + resource and that any given listener on the Gateway MUST match + a single Route resource and a single rule within the Route + resource. items: description: TLSRouteMatch defines the predicate used to match - connections to a given action. - properties: - extensionRef: - description: "ExtensionRef is an optional, implementation-specific - extension to the \"match\" behavior. For example, resource - \"mytcproutematcher\" in group \"networking.example.net\". - If the referent cannot be found, the rule MUST not be - included in the route. The controller must ensure the - \"ResolvedRefs\" condition on the Route status is set - to `status: False`. \n Support: Custom" - properties: - group: - description: Group is the group of the referent. For - example, "networking.k8s.io". When unspecified (empty - string), core API group is inferred. - maxLength: 253 - pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string - kind: - description: Kind is kind of the referent. For example - "HTTPRoute" or "Service". - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ - type: string - name: - description: Name is the name of the referent. - maxLength: 253 - minLength: 1 - type: string - required: - - group - - kind - - name - type: object + TLS sessions to a given backend. No matching criteria exists + currently but MAY be added in future. type: object - maxItems: 8 + maxItems: 0 type: array type: object maxItems: 16 diff --git a/config/crd/v1alpha2/gateway.networking.k8s.io_udproutes.yaml b/config/crd/v1alpha2/gateway.networking.k8s.io_udproutes.yaml index eecf67df04..369884e890 100644 --- a/config/crd/v1alpha2/gateway.networking.k8s.io_udproutes.yaml +++ b/config/crd/v1alpha2/gateway.networking.k8s.io_udproutes.yaml @@ -224,67 +224,19 @@ spec: minItems: 1 type: array matches: - description: "Matches define conditions used for matching the - rule against incoming UDP connections. Each match is independent, - i.e. this rule will be matched if **any** one of the matches - is satisfied. If unspecified (i.e. empty), this Rule will - match all requests for the associated Listener. \n Each client - request MUST map to a maximum of one route rule. If a request - matches multiple rules, matching precedence MUST be determined - in order of the following criteria, continuing on ties: \n - * The most specific match specified by ExtensionRef. Each - implementation that supports ExtensionRef may have different - ways of determining the specificity of the referenced extension. - \n If ties still exist across multiple Routes, matching precedence - MUST be determined in order of the following criteria, continuing - on ties: \n * The oldest Route based on creation timestamp. - For example, a Route with a creation timestamp of \"2020-09-08 - 01:02:03\" is given precedence over a Route with a creation - timestamp of \"2020-09-08 01:02:04\". * The Route appearing - first in alphabetical order by \"/\". For - example, foo/bar is given precedence over foo/baz. \n If - ties still exist within the Route that has been given precedence, - matching precedence MUST be granted to the first matching - rule meeting the above criteria." + description: Matches define conditions used for matching the + rule against incoming UDP connections. No matching criteria + exists currently but MAY be added in future. This implies + that it is not possible to define match semantics within this + resource and that any given listener on the Gateway MUST match + a single Route resource and a single rule within the Route + resource. items: description: UDPRouteMatch defines the predicate used to match - packets to a given action. - properties: - extensionRef: - description: "ExtensionRef is an optional, implementation-specific - extension to the \"match\" behavior. For example, resource - \"mytcproutematcher\" in group \"networking.example.net\". - If the referent cannot be found, the rule MUST not be - included in the route. The controller must ensure the - \"ResolvedRefs\" condition on the Route status is set - to `status: False`. \n Support: Custom" - properties: - group: - description: Group is the group of the referent. For - example, "networking.k8s.io". When unspecified (empty - string), core API group is inferred. - maxLength: 253 - pattern: ^$|^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - type: string - kind: - description: Kind is kind of the referent. For example - "HTTPRoute" or "Service". - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z]([-a-zA-Z0-9]*[a-zA-Z0-9])?$ - type: string - name: - description: Name is the name of the referent. - maxLength: 253 - minLength: 1 - type: string - required: - - group - - kind - - name - type: object + UDP packets to a given backend. No matching criteria exists + currently but MAY be added in future. type: object - maxItems: 8 + maxItems: 0 type: array type: object maxItems: 16