diff --git a/crds/ApisixClusterConfig.yaml b/crds/ApisixClusterConfig.yaml new file mode 100644 index 0000000..5b70326 --- /dev/null +++ b/crds/ApisixClusterConfig.yaml @@ -0,0 +1,99 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apisixclusterconfigs.apisix.apache.org +spec: + group: apisix.apache.org + scope: Cluster + names: + plural: apisixclusterconfigs + singular: apisixclusterconfig + kind: ApisixClusterConfig + shortNames: + - acc + preserveUnknownFields: false + versions: + - name: v2 + served: true + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + ingressClassName: + type: string + admin: + type: object + required: + - baseURL + properties: + baseURL: + type: string + pattern: "https?://[^:]+:(\\d+)" + adminKey: + type: string + monitoring: + type: object + properties: + prometheus: + type: object + properties: + enable: + type: boolean + prefer_name: + type: boolean + skywalking: + type: object + properties: + enable: + type: boolean + sampleRatio: + type: number + minimum: 0.00001 + maximum: 1 + status: + type: object + properties: + observedGeneration: + type: integer + conditions: + type: array + items: + type: object + properties: + type: + type: string + status: + type: string + lastTransitionTime: + type: string + reason: + type: string + message: + type: string + required: + - type + - status + - lastTransitionTime diff --git a/crds/ApisixConsumer.yaml b/crds/ApisixConsumer.yaml new file mode 100644 index 0000000..6ccc589 --- /dev/null +++ b/crds/ApisixConsumer.yaml @@ -0,0 +1,252 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apisixconsumers.apisix.apache.org +spec: + group: apisix.apache.org + scope: Namespaced + names: + plural: apisixconsumers + singular: apisixconsumer + kind: ApisixConsumer + shortNames: + - ac + preserveUnknownFields: false + versions: + - name: v2 + served: true + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + required: + - authParameter + properties: + ingressClassName: + type: string + authParameter: + type: object + oneOf: + - required: ["basicAuth"] + - required: ["keyAuth"] + - required: ["wolfRBAC"] + - required: ["jwtAuth"] + - required: ["hmacAuth"] + - required: ["ldapAuth"] + properties: + basicAuth: + type: object + oneOf: + - required: ["value"] + - required: ["secretRef"] + properties: + value: + type: object + properties: + username: + type: string + minLength: 1 + password: + type: string + minLength: 1 + required: + - username + - password + secretRef: + type: object + properties: + name: + type: string + minLength: 1 + required: + - name + keyAuth: + type: object + oneOf: + - required: ["value"] + - required: ["secretRef"] + properties: + value: + type: object + properties: + key: + type: string + minLength: 1 + required: + - key + secretRef: + type: object + properties: + name: + type: string + minLength: 1 + required: + - name + jwtAuth: + type: object + oneOf: + - required: ["value"] + - required: ["secretRef"] + properties: + value: + type: object + properties: + key: + type: string + minLength: 1 + secret: + type: string + public_key: + type: string + algorithm: + type: string + default: HS256 + exp: + type: integer + default: 86400 + base64_secret: + type: boolean + default: false + lifetime_grace_period: + type: integer + default: 0 + required: + - key + secretRef: + type: object + properties: + name: + type: string + minLength: 1 + required: + - name + wolfRBAC: + type: object + oneOf: + - required: ["value"] + - required: ["secretRef"] + properties: + value: + type: object + properties: + server: + type: string + appid: + type: string + header_prefix: + type: string + secretRef: + type: object + properties: + name: + type: string + minLength: 1 + required: + - name + hmacAuth: + type: object + oneOf: + - required: ["value"] + - required: ["secretRef"] + properties: + value: + type: object + properties: + access_key: + type: string + secret_key: + type: string + algorithm: + type: string + clock_skew: + type: integer + signed_headers: + type: array + items: + type: string + keep_headers: + type: boolean + encode_uri_params: + type: boolean + validate_request_body: + type: boolean + max_req_body: + type: integer + required: + - access_key + - secret_key + secretRef: + type: object + properties: + name: + type: string + minLength: 1 + required: + - name + ldapAuth: + type: object + oneOf: + - required: ["value"] + - required: ["secretRef"] + properties: + value: + type: object + properties: + user_dn: + type: string + required: + - user_dn + secretRef: + type: object + properties: + name: + type: string + minLength: 1 + required: + - name + status: + type: object + properties: + observedGeneration: + type: integer + conditions: + type: array + items: + type: object + properties: + type: + type: string + status: + type: string + lastTransitionTime: + type: string + reason: + type: string + message: + type: string + required: + - type + - status + - lastTransitionTime diff --git a/crds/ApisixGlobalRule.yaml b/crds/ApisixGlobalRule.yaml new file mode 100644 index 0000000..7eff6f8 --- /dev/null +++ b/crds/ApisixGlobalRule.yaml @@ -0,0 +1,88 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apisixglobalrules.apisix.apache.org +spec: + group: apisix.apache.org + scope: Namespaced + names: + plural: apisixglobalrules + singular: apisixglobalrule + kind: ApisixGlobalRule + shortNames: + - agr + versions: + - name: v2 + served: true + storage: true + subresources: + status: {} + additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + priority: 0 + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + required: + - plugins + properties: + ingressClassName: + type: string + plugins: + type: array + items: + type: object + properties: + name: + type: string + minLength: 1 + enable: + type: boolean + config: + type: object + x-kubernetes-preserve-unknown-fields: true # we have to enable it since plugin config + secretRef: + type: string + required: + - name + - enable + status: + type: object + properties: + conditions: + type: array + items: + type: object + properties: + "type": + type: string + reason: + type: string + status: + type: string + message: + type: string + observedGeneration: + type: integer diff --git a/crds/ApisixPluginConfig.yaml b/crds/ApisixPluginConfig.yaml new file mode 100644 index 0000000..0c1cc3f --- /dev/null +++ b/crds/ApisixPluginConfig.yaml @@ -0,0 +1,88 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apisixpluginconfigs.apisix.apache.org +spec: + group: apisix.apache.org + scope: Namespaced + names: + plural: apisixpluginconfigs + singular: apisixpluginconfig + kind: ApisixPluginConfig + shortNames: + - apc + versions: + - name: v2 + served: true + storage: true + subresources: + status: {} + additionalPrinterColumns: + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + priority: 0 + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + required: + - plugins + properties: + ingressClassName: + type: string + plugins: + type: array + items: + type: object + properties: + name: + type: string + minLength: 1 + enable: + type: boolean + config: + type: object + x-kubernetes-preserve-unknown-fields: true # we have to enable it since plugin config + secretRef: + type: string + required: + - name + - enable + status: + type: object + properties: + conditions: + type: array + items: + type: object + properties: + "type": + type: string + reason: + type: string + status: + type: string + message: + type: string + observedGeneration: + type: integer diff --git a/crds/ApisixRoute.yaml b/crds/ApisixRoute.yaml new file mode 100644 index 0000000..15f4848 --- /dev/null +++ b/crds/ApisixRoute.yaml @@ -0,0 +1,363 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apisixroutes.apisix.apache.org +spec: + group: apisix.apache.org + scope: Namespaced + names: + plural: apisixroutes + singular: apisixroute + kind: ApisixRoute + shortNames: + - ar + versions: + - name: v2 + served: true + storage: true + subresources: + status: {} + additionalPrinterColumns: + - jsonPath: .spec.http[].match.hosts + name: Hosts + type: string + priority: 0 + - jsonPath: .spec.http[].match.paths + name: URIs + type: string + priority: 0 + - jsonPath: .spec.http[].backends[].serviceName + name: Target Service(HTTP) + type: string + priority: 1 + - jsonPath: .spec.tcp[].match.ingressPort + name: Ingress Server Port(TCP) + type: integer + priority: 1 + - jsonPath: .spec.tcp[].match.backend.serviceName + name: Target Service(TCP) + type: string + priority: 1 + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + priority: 0 + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + anyOf: + - required: ["http"] + - required: ["stream"] + properties: + ingressClassName: + type: string + http: + type: array + minItems: 1 + items: + type: object + anyOf: + - required: ["name", "match", "backends"] + - required: ["name", "match", "upstreams"] + properties: + name: + type: string + minLength: 1 + priority: + type: integer + timeout: + type: object + properties: + connect: + type: string + send: + type: string + read: + type: string + match: + type: object + required: + - paths + properties: + paths: + type: array + minItems: 1 + items: + type: string + hosts: + type: array + minItems: 1 + items: + type: string + pattern: "^\\*?[0-9a-zA-Z-._]+(:\\d+)?$" + methods: + type: array + minItems: 1 + items: + type: string + enum: + - "CONNECT" + - "DELETE" + - "GET" + - "HEAD" + - "OPTIONS" + - "PATCH" + - "POST" + - "PUT" + - "TRACE" + remoteAddrs: + type: array + minItems: 1 + items: + type: string + exprs: + type: array + minItems: 1 + items: + type: object + properties: + subject: + type: object + properties: + scope: + type: string + enum: + - "Cookie" + - "Header" + - "Path" + - "Query" + - "Variable" + name: + type: string + minLength: 1 + required: + - scope + op: + type: string + enum: + - Equal + - NotEqual + - GreaterThan + - GreaterThanEqual + - LessThan + - LessThanEqual + - In + - NotIn + - RegexMatch + - RegexNotMatch + - RegexMatchCaseInsensitive + - RegexNotMatchCaseInsensitive + value: + type: string + set: + type: array + items: + type: string + oneOf: + - required: ["subject", "op", "value"] + - required: ["subject", "op", "set"] + filter_func: + type: string + websocket: + type: boolean + plugin_config_name: + type: string + minLength: 1 + plugin_config_namespace: + type: string + minLength: 1 + upstreams: + description: Upstreams refer to ApisixUpstream CRD + type: array + items: + description: ApisixRouteUpstreamReference contains a ApisixUpstream + CRD reference + type: object + properties: + name: + type: string + weight: + type: integer + backends: + type: array + minItems: 1 + items: + type: object + properties: + serviceName: + type: string + minLength: 1 + servicePort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resolveGranularity: + type: string + enum: ["endpoint", "service"] + weight: + type: integer + minimum: 0 + subset: + type: string + required: + - serviceName + - servicePort + plugins: + type: array + items: + type: object + properties: + name: + type: string + minLength: 1 + enable: + type: boolean + config: + type: object + x-kubernetes-preserve-unknown-fields: true # we have to enable it since plugin config + secretRef: + type: string + required: + - name + - enable + authentication: + type: object + properties: + enable: + type: boolean + type: + type: string + enum: + - "basicAuth" + - "keyAuth" + - "jwtAuth" + - "wolfRBAC" + - "hmacAuth" + - "ldapAuth" + keyAuth: + type: object + properties: + header: + type: string + jwtAuth: + type: object + properties: + header: + type: string + query: + type: string + cookie: + type: string + ldapAuth: + type: object + properties: + base_dn: + type: string + ldap_uri: + type: string + use_tls: + type: boolean + uid: + type: string + required: + - enable + stream: + type: array + minItems: 1 + items: + type: object + required: ["name", "match", "backend", "protocol"] + properties: + "protocol": + type: string + enum: ["TCP", "UDP"] + name: + type: string + minLength: 1 + match: + type: object + properties: + host: + type: string + ingressPort: + type: integer + minimum: 1 + maximum: 65535 + required: + - ingressPort + backend: + type: object + properties: + serviceName: + type: string + minLength: 1 + servicePort: + anyOf: + - type: integer + - type: string + x-kubernetes-int-or-string: true + resolveGranularity: + type: string + enum: ["endpoint", "service"] + subset: + type: string + required: + - serviceName + - servicePort + plugins: + type: array + items: + type: object + properties: + name: + type: string + minLength: 1 + enable: + type: boolean + config: + type: object + x-kubernetes-preserve-unknown-fields: true # we have to enable it since plugin config + secretRef: + type: string + required: + - name + - enable + status: + type: object + properties: + conditions: + type: array + items: + type: object + properties: + "type": + type: string + reason: + type: string + status: + type: string + message: + type: string + observedGeneration: + type: integer diff --git a/crds/ApisixTls.yaml b/crds/ApisixTls.yaml new file mode 100644 index 0000000..a90b473 --- /dev/null +++ b/crds/ApisixTls.yaml @@ -0,0 +1,196 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apisixtlses.apisix.apache.org +spec: + group: apisix.apache.org + scope: Namespaced + names: + plural: apisixtlses + singular: apisixtls + kind: ApisixTls + shortNames: + - atls + preserveUnknownFields: false + versions: + - name: v2 + served: true + storage: true + subresources: + status: {} + additionalPrinterColumns: + - jsonPath: .spec.hosts + name: SNIs + type: string + - jsonPath: .spec.secret.name + name: Secret Name + type: string + - jsonPath: .spec.secret.namespace + name: Secret Namespace + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + schema: + openAPIV3Schema: + description: ApisixTls defines SSL resource in APISIX. + type: object + properties: + apiVersion: + description: 'APIVersion defines the versioned schema of this representation + of an object. Servers should convert recognized schemas to the latest + internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + type: string + kind: + description: 'Kind is a string value representing the REST resource + this object represents. Servers may infer this from the endpoint the + client submits requests to. Cannot be updated. In CamelCase. More + info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + type: string + metadata: + type: object + spec: + description: ApisixTlsSpec is the specification of ApisixSSL. + type: object + required: + - hosts + - secret + properties: + ingressClassName: + type: string + client: + description: ApisixMutualTlsClientConfig describes the mutual TLS + CA and verify depth + type: object + properties: + caSecret: + description: ApisixSecret describes the Kubernetes Secret name + and namespace. + type: object + required: + - name + - namespace + properties: + name: + type: string + minLength: 1 + namespace: + type: string + minLength: 1 + depth: + type: integer + skip_mtls_uri_regex: + type: array + items: + type: string + hosts: + type: array + minItems: 1 + items: + type: string + pattern: ^\*?[0-9a-zA-Z-.]+$ + secret: + description: ApisixSecret describes the Kubernetes Secret name and + namespace. + type: object + required: + - name + - namespace + properties: + name: + type: string + minLength: 1 + namespace: + type: string + minLength: 1 + status: + description: ApisixStatus is the status report for Apisix ingress Resources + type: object + properties: + conditions: + type: array + items: + description: "Condition contains details for one aspect of the + current state of this API Resource. --- This struct is intended + for direct use as an array at the field path .status.conditions. + \ For example, type FooStatus struct{ // Represents the + observations of a foo's current state. // Known .status.conditions.type + are: \"Available\", \"Progressing\", and \"Degraded\" // + +patchMergeKey=type // +patchStrategy=merge // +listType=map + \ // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" + patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` + \n // other fields }" + type: object + required: + - lastTransitionTime + - message + - reason + - status + - type + properties: + lastTransitionTime: + description: lastTransitionTime is the last time the condition + transitioned from one status to another. This should be + when the underlying condition changed. If that is not known, + then using the time when the API field changed is acceptable. + type: string + format: date-time + message: + description: message is a human readable message indicating + details about the transition. This may be an empty string. + type: string + maxLength: 32768 + observedGeneration: + description: observedGeneration represents the .metadata.generation + that the condition was set based upon. For instance, if + .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration + is 9, the condition is out of date with respect to the current + state of the instance. + type: integer + format: int64 + minimum: 0 + reason: + description: reason contains a programmatic identifier indicating + the reason for the condition's last transition. Producers + of specific condition types may define expected values and + meanings for this field, and whether the values are considered + a guaranteed API. The value should be a CamelCase string. + This field may not be empty. + type: string + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + status: + description: status of the condition, one of True, False, + Unknown. + type: string + enum: + - "True" + - "False" + - Unknown + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + --- Many .condition.type values are consistent across resources + like Available, but because arbitrary conditions can be + useful (see .node.status.conditions), the ability to deconflict + is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) + type: string + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ diff --git a/crds/ApisixUpstream.yaml b/crds/ApisixUpstream.yaml new file mode 100644 index 0000000..5497b5b --- /dev/null +++ b/crds/ApisixUpstream.yaml @@ -0,0 +1,462 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: apisixupstreams.apisix.apache.org +spec: + group: apisix.apache.org + scope: Namespaced + names: + plural: apisixupstreams + singular: apisixupstream + kind: ApisixUpstream + shortNames: + - au + versions: + - name: v2 + served: true + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + ingressClassName: + type: string + discovery: + description: Discovery is used to configure service discovery for + upstream + type: object + properties: + serviceName: + type: string + type: + type: string + args: + type: object + x-kubernetes-preserve-unknown-fields: true + externalNodes: + description: ExternalNodes contains external nodes the Upstream + should use If this field is set, the upstream will use these nodes + directly without any further resolves + type: array + items: + description: ApisixUpstreamExternalNode is the external node conf + type: object + properties: + name: + type: string + type: + type: string + weight: + type: integer + port: + type: integer + subsets: + type: array + items: + type: object + properties: + name: + type: string + minLength: 1 + labels: + type: object + x-kubernetes-preserve-unknown-fields: true + required: ["name", "labels"] + loadbalancer: + type: object + properties: + type: + type: string + enum: + - roundrobin + - chash + - ewma + - least_conn + hashOn: + type: string + enum: + - vars + - vars_combinations + - header + - cookie + - consumer + key: + type: string + required: + - type + scheme: + type: string + enum: + - http + - grpc + - https + - grpcs + retries: + type: integer + minimum: 0 + timeout: + type: object + properties: + connect: + type: string + read: + type: string + send: + type: string + passHost: + type: string + enum: + - pass + - node + - rewrite + upstreamHost: + type: string + pattern: "^\\*?[0-9a-zA-Z-._]+$" + tlsSecret: + description: ApisixSecret describes the Kubernetes Secret name and + namespace. + type: object + required: + - name + - namespace + properties: + name: + type: string + minLength: 1 + namespace: + type: string + minLength: 1 + healthCheck: + type: object + anyOf: + - required: + - active + - required: + - active + - passive + properties: + active: + type: object + properties: + type: + type: string + enum: + - http + - https + - tcp + timeout: + type: number + minimum: 0 + concurrency: + type: integer + minimum: 1 + host: + type: string + pattern: "^\\*?[0-9a-zA-Z-._]+$" + port: + type: integer + minimum: 1 + maximum: 65535 + httpPath: + type: string + minLength: 1 + strictTLS: + type: boolean + requestHeaders: + type: array + minItems: 1 + items: + type: string + healthy: + type: object + properties: + interval: + type: string + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + successes: + type: integer + minimum: 1 + maximum: 254 + unhealthy: + type: object + properties: + interval: + type: string + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + httpFailures: + type: integer + minimum: 1 + maximum: 254 + tcpFailures: + type: integer + minimum: 1 + maximum: 254 + timeouts: + type: integer + minimum: 0 + passive: + type: object + properties: + type: + type: string + enum: + - http + - https + - tcp + healthy: + type: object + properties: + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + successes: + type: integer + minimum: 1 + maximum: 254 + unhealthy: + type: object + properties: + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + httpFailures: + type: integer + minimum: 1 + maximum: 254 + tcpFailures: + type: integer + minimum: 1 + maximum: 254 + timeouts: + type: integer + minimum: 0 + portLevelSettings: + type: array + items: + type: object + properties: + port: + type: integer + minimum: 1 + maximum: 65535 + loadbalancer: + type: object + properties: + type: + type: string + enum: + - roundrobin + - chash + - ewma + - least_conn + hashOn: + type: string + enum: + - vars + - vars_combinations + - header + - cookie + - consumer + key: + type: string + required: + - type + scheme: + type: string + enum: + - http + - grpc + retries: + type: integer + minimum: 0 + timeout: + type: object + properties: + connect: + type: string + read: + type: string + send: + type: string + healthCheck: + type: object + anyOf: + - required: + - active + - required: + - active + - passive + properties: + active: + type: object + properties: + type: + type: string + enum: + - http + - https + - tcp + timeout: + type: number + minimum: 0 + concurrency: + type: integer + minimum: 1 + host: + type: string + pattern: "^\\*?[0-9a-zA-Z-._]+$" + port: + type: integer + minimum: 1 + maximum: 65535 + httpPath: + type: string + minLength: 1 + strictTLS: + type: boolean + requestHeaders: + type: array + minItems: 1 + items: + type: string + healthy: + type: object + properties: + interval: + type: string + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + successes: + type: integer + minimum: 1 + maximum: 254 + unhealthy: + type: object + properties: + interval: + type: string + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + httpFailures: + type: integer + minimum: 1 + maximum: 254 + tcpFailures: + type: integer + minimum: 1 + maximum: 254 + timeout: + type: string + passive: + type: object + properties: + type: + type: string + enum: + - http + - https + - tcp + healthy: + type: object + properties: + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + successes: + type: integer + minimum: 1 + maximum: 254 + unhealthy: + type: object + properties: + httpCodes: + type: array + minItems: 1 + items: + type: integer + minimum: 200 + maximum: 599 + httpFailures: + type: integer + minimum: 1 + maximum: 254 + tcpFailures: + type: integer + minimum: 1 + maximum: 254 + timeout: + type: string + status: + type: object + properties: + conditions: + type: array + items: + type: object + properties: + "type": + type: string + reason: + type: string + status: + type: string + message: + type: string + observedGeneration: + type: integer diff --git a/crds/kustomization.yaml b/crds/kustomization.yaml new file mode 100644 index 0000000..5956f58 --- /dev/null +++ b/crds/kustomization.yaml @@ -0,0 +1,25 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +resources: + - ./ApisixRoute.yaml + - ./ApisixUpstream.yaml + - ./ApisixTls.yaml + - ./ApisixClusterConfig.yaml + - ./ApisixConsumer.yaml + - ./ApisixPluginConfig.yaml + - ./ApisixGlobalRule.yaml