1# Copyright 2020 Google LLC
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
15apiVersion: apiextensions.k8s.io/v1
16kind: CustomResourceDefinition
17metadata:
18 annotations:
19 cnrm.cloud.google.com/version: 1.106.0
20 creationTimestamp: null
21 labels:
22 cnrm.cloud.google.com/dcl2crd: "true"
23 cnrm.cloud.google.com/managed-by-kcc: "true"
24 cnrm.cloud.google.com/stability-level: stable
25 cnrm.cloud.google.com/system: "true"
26 name: networkservicesgrpcroutes.networkservices.cnrm.cloud.google.com
27spec:
28 group: networkservices.cnrm.cloud.google.com
29 names:
30 categories:
31 - gcp
32 kind: NetworkServicesGRPCRoute
33 plural: networkservicesgrpcroutes
34 shortNames:
35 - gcpnetworkservicesgrpcroute
36 - gcpnetworkservicesgrpcroutes
37 singular: networkservicesgrpcroute
38 scope: Namespaced
39 versions:
40 - additionalPrinterColumns:
41 - jsonPath: .metadata.creationTimestamp
42 name: Age
43 type: date
44 - description: When 'True', the most recent reconcile of the resource succeeded
45 jsonPath: .status.conditions[?(@.type=='Ready')].status
46 name: Ready
47 type: string
48 - description: The reason for the value in 'Ready'
49 jsonPath: .status.conditions[?(@.type=='Ready')].reason
50 name: Status
51 type: string
52 - description: The last transition time for the value in 'Status'
53 jsonPath: .status.conditions[?(@.type=='Ready')].lastTransitionTime
54 name: Status Age
55 type: date
56 name: v1beta1
57 schema:
58 openAPIV3Schema:
59 properties:
60 apiVersion:
61 description: 'apiVersion defines the versioned schema of this representation
62 of an object. Servers should convert recognized schemas to the latest
63 internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources'
64 type: string
65 kind:
66 description: 'kind is a string value representing the REST resource this
67 object represents. Servers may infer this from the endpoint the client
68 submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds'
69 type: string
70 metadata:
71 type: object
72 spec:
73 properties:
74 description:
75 description: Optional. A free-text description of the resource. Max
76 length 1024 characters.
77 type: string
78 gateways:
79 items:
80 oneOf:
81 - not:
82 required:
83 - external
84 required:
85 - name
86 - not:
87 anyOf:
88 - required:
89 - name
90 - required:
91 - namespace
92 required:
93 - external
94 properties:
95 external:
96 description: 'Allowed value: The `selfLink` field of a `NetworkServicesGateway`
97 resource.'
98 type: string
99 name:
100 description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
101 type: string
102 namespace:
103 description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
104 type: string
105 type: object
106 type: array
107 hostnames:
108 description: 'Required. Service hostnames with an optional port for
109 which this route describes traffic. Format: [:] Hostname is the
110 fully qualified domain name of a network host. This matches the
111 RFC 1123 definition of a hostname with 2 notable exceptions: - IPs
112 are not allowed. - A hostname may be prefixed with a wildcard label
113 (*.). The wildcard label must appear by itself as the first label.
114 Hostname can be “precise” which is a domain name without the terminating
115 dot of a network host (e.g. “foo.example.com”) or “wildcard”, which
116 is a domain name prefixed with a single wildcard label (e.g. *.example.com).
117 Note that as per RFC1035 and RFC1123, a label must consist of lower
118 case alphanumeric characters or ‘-’, and must start and end with
119 an alphanumeric character. No other punctuation is allowed. The
120 routes associated with a Router must have unique hostnames. If you
121 attempt to attach multiple routes with conflicting hostnames, the
122 configuration will be rejected. For example, while it is acceptable
123 for routes for the hostnames "*.foo.bar.com" and "*.bar.com" to
124 be associated with the same route, it is not possible to associate
125 two routes both with "*.bar.com" or both with "bar.com". In the
126 case that multiple routes match the hostname, the most specific
127 match will be selected. For example, "foo.bar.baz.com" will take
128 precedence over "*.bar.baz.com" and "*.bar.baz.com" will take precedence
129 over "*.baz.com". If a port is specified, then gRPC clients must
130 use the channel URI with the port to match this rule (i.e. "xds:///service:123"),
131 otherwise they must supply the URI without a port (i.e. "xds:///service").'
132 items:
133 type: string
134 type: array
135 location:
136 description: Immutable. The location for the resource
137 type: string
138 meshes:
139 items:
140 oneOf:
141 - not:
142 required:
143 - external
144 required:
145 - name
146 - not:
147 anyOf:
148 - required:
149 - name
150 - required:
151 - namespace
152 required:
153 - external
154 properties:
155 external:
156 description: 'Allowed value: The `selfLink` field of a `NetworkServicesMesh`
157 resource.'
158 type: string
159 name:
160 description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
161 type: string
162 namespace:
163 description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
164 type: string
165 type: object
166 type: array
167 projectRef:
168 description: Immutable. The Project that this resource belongs to.
169 oneOf:
170 - not:
171 required:
172 - external
173 required:
174 - name
175 - not:
176 anyOf:
177 - required:
178 - name
179 - required:
180 - namespace
181 required:
182 - external
183 properties:
184 external:
185 description: |-
186 The project for the resource
187
188 Allowed value: The Google Cloud resource name of a `Project` resource (format: `projects/{{name}}`).
189 type: string
190 name:
191 description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
192 type: string
193 namespace:
194 description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
195 type: string
196 type: object
197 resourceID:
198 description: Immutable. Optional. The name of the resource. Used for
199 creation and acquisition. When unset, the value of `metadata.name`
200 is used as the default.
201 type: string
202 rules:
203 description: Required. A list of detailed rules defining how to route
204 traffic. Within a single GrpcRoute, the GrpcRoute.RouteAction associated
205 with the first matching GrpcRoute.RouteRule will be executed. At
206 least one rule must be supplied.
207 items:
208 properties:
209 action:
210 description: Required. A detailed rule defining how to route
211 traffic. This field is required.
212 properties:
213 destinations:
214 description: Optional. The destination services to which
215 traffic should be forwarded. If multiple destinations
216 are specified, traffic will be split between Backend Service(s)
217 according to the weight field of these destinations.
218 items:
219 properties:
220 serviceRef:
221 oneOf:
222 - not:
223 required:
224 - external
225 required:
226 - name
227 - not:
228 anyOf:
229 - required:
230 - name
231 - required:
232 - namespace
233 required:
234 - external
235 properties:
236 external:
237 description: |-
238 Required. The URL of a destination service to which to route traffic. Must refer to either a BackendService or ServiceDirectoryService.
239
240 Allowed value: The Google Cloud resource name of a `ComputeBackendService` resource (format: `projects/{{project}}/global/backendServices/{{name}}`).
241 type: string
242 name:
243 description: 'Name of the referent. More info:
244 https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
245 type: string
246 namespace:
247 description: 'Namespace of the referent. More
248 info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
249 type: string
250 type: object
251 weight:
252 description: 'Optional. Specifies the proportion of
253 requests forwarded to the backend referenced by
254 the serviceName field. This is computed as: weight/Sum(weights
255 in this destination list). For non-zero values,
256 there may be some epsilon from the exact proportion
257 defined here depending on the precision an implementation
258 supports. If only one serviceName is specified and
259 it has a weight greater than 0, 100% of the traffic
260 is forwarded to that backend. If weights are specified
261 for any one service name, they need to be specified
262 for all of them. If weights are unspecified for
263 all services, then, traffic is distributed in equal
264 proportions to all of them.'
265 format: int64
266 type: integer
267 required:
268 - serviceRef
269 type: object
270 type: array
271 faultInjectionPolicy:
272 description: Optional. The specification for fault injection
273 introduced into traffic to test the resiliency of clients
274 to destination service failure. As part of fault injection,
275 when clients send requests to a destination, delays can
276 be introduced on a percentage of requests before sending
277 those requests to the destination service. Similarly requests
278 from clients can be aborted by for a percentage of requests.
279 timeout and retry_policy will be ignored by clients that
280 are configured with a fault_injection_policy
281 properties:
282 abort:
283 description: The specification for aborting to client
284 requests.
285 properties:
286 httpStatus:
287 description: The HTTP status code used to abort
288 the request. The value must be between 200 and
289 599 inclusive.
290 format: int64
291 type: integer
292 percentage:
293 description: The percentage of traffic which will
294 be aborted. The value must be between [0, 100]
295 format: int64
296 type: integer
297 type: object
298 delay:
299 description: The specification for injecting delay to
300 client requests.
301 properties:
302 fixedDelay:
303 description: Specify a fixed delay before forwarding
304 the request.
305 type: string
306 percentage:
307 description: The percentage of traffic on which
308 delay will be injected. The value must be between
309 [0, 100]
310 format: int64
311 type: integer
312 type: object
313 type: object
314 retryPolicy:
315 description: Optional. Specifies the retry policy associated
316 with this route.
317 properties:
318 numRetries:
319 description: Specifies the allowed number of retries.
320 This number must be > 0. If not specpfied, default
321 to 1.
322 format: int64
323 type: integer
324 retryConditions:
325 description: '- connect-failure: Router will retry on
326 failures connecting to Backend Services, for example
327 due to connection timeouts. - refused-stream: Router
328 will retry if the backend service resets the stream
329 with a REFUSED_STREAM error code. This reset type
330 indicates that it is safe to retry. - cancelled: Router
331 will retry if the gRPC status code in the response
332 header is set to cancelled - deadline-exceeded: Router
333 will retry if the gRPC status code in the response
334 header is set to deadline-exceeded - resource-exhausted:
335 Router will retry if the gRPC status code in the response
336 header is set to resource-exhausted - unavailable:
337 Router will retry if the gRPC status code in the response
338 header is set to unavailable'
339 items:
340 type: string
341 type: array
342 type: object
343 timeout:
344 description: Optional. Specifies the timeout for selected
345 route. Timeout is computed from the time the request has
346 been fully processed (i.e. end of stream) up until the
347 response has been completely processed. Timeout includes
348 all retries.
349 type: string
350 type: object
351 matches:
352 description: Optional. Matches define conditions used for matching
353 the rule against incoming gRPC requests. Each match is independent,
354 i.e. this rule will be matched if ANY one of the matches is
355 satisfied. If no matches field is specified, this rule will
356 unconditionally match traffic.
357 items:
358 properties:
359 headers:
360 description: Optional. Specifies a collection of headers
361 to match.
362 items:
363 properties:
364 key:
365 description: Required. The key of the header.
366 type: string
367 type:
368 description: 'Optional. Specifies how to match against
369 the value of the header. If not specified, a default
370 value of EXACT is used. Possible values: MATCH_TYPE_UNSPECIFIED,
371 MATCH_ANY, MATCH_ALL'
372 type: string
373 value:
374 description: Required. The value of the header.
375 type: string
376 required:
377 - key
378 - value
379 type: object
380 type: array
381 method:
382 description: Optional. A gRPC method to match against.
383 If this field is empty or omitted, will match all methods.
384 properties:
385 caseSensitive:
386 description: Optional. Specifies that matches are
387 case sensitive. The default value is true. case_sensitive
388 must not be used with a type of REGULAR_EXPRESSION.
389 type: boolean
390 grpcMethod:
391 description: Required. Name of the method to match
392 against. If unspecified, will match all methods.
393 type: string
394 grpcService:
395 description: Required. Name of the service to match
396 against. If unspecified, will match all services.
397 type: string
398 type:
399 description: 'Optional. Specifies how to match against
400 the name. If not specified, a default value of "EXACT"
401 is used. Possible values: TYPE_UNSPECIFIED, EXACT,
402 REGULAR_EXPRESSION'
403 type: string
404 required:
405 - grpcMethod
406 - grpcService
407 type: object
408 type: object
409 type: array
410 required:
411 - action
412 type: object
413 type: array
414 required:
415 - hostnames
416 - location
417 - projectRef
418 - rules
419 type: object
420 status:
421 properties:
422 conditions:
423 description: Conditions represent the latest available observation
424 of the resource's current state.
425 items:
426 properties:
427 lastTransitionTime:
428 description: Last time the condition transitioned from one status
429 to another.
430 type: string
431 message:
432 description: Human-readable message indicating details about
433 last transition.
434 type: string
435 reason:
436 description: Unique, one-word, CamelCase reason for the condition's
437 last transition.
438 type: string
439 status:
440 description: Status is the status of the condition. Can be True,
441 False, Unknown.
442 type: string
443 type:
444 description: Type is the type of the condition.
445 type: string
446 type: object
447 type: array
448 createTime:
449 description: Output only. The timestamp when the resource was created.
450 format: date-time
451 type: string
452 observedGeneration:
453 description: ObservedGeneration is the generation of the resource
454 that was most recently observed by the Config Connector controller.
455 If this is equal to metadata.generation, then that means that the
456 current reported status reflects the most recent desired state of
457 the resource.
458 type: integer
459 selfLink:
460 description: Output only. Server-defined URL of this resource
461 type: string
462 updateTime:
463 description: Output only. The timestamp when the resource was updated.
464 format: date-time
465 type: string
466 type: object
467 required:
468 - spec
469 type: object
470 served: true
471 storage: true
472 subresources:
473 status: {}
474status:
475 acceptedNames:
476 kind: ""
477 plural: ""
478 conditions: []
479 storedVersions: []
View as plain text