This is an automated email from the ASF dual-hosted git repository.
zhangjintao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git
The following commit(s) were added to refs/heads/master by this push:
new 0630ac5 feat: upgrade CRD version to v1 (#693)
0630ac5 is described below
commit 0630ac55697eaf01017715fcad87b154cb64d9d4
Author: Jintao Zhang <[email protected]>
AuthorDate: Wed Sep 29 00:43:00 2021 +0800
feat: upgrade CRD version to v1 (#693)
---
Makefile | 2 +-
README.md | 2 +-
docs/en/latest/practices/check-crd-status.md | 2 +-
.../latest/practices/proxy-the-httpbin-service.md | 2 +-
docs/en/latest/practices/the-hard-way.md | 65 +-
.../crd/{v1beta1 => v1}/ApisixClusterConfig.yaml | 66 +-
samples/deploy/crd/v1/ApisixConsumer.yaml | 100 +++
samples/deploy/crd/v1/ApisixRoute.yaml | 890 +++++++++++++++++++++
samples/deploy/crd/v1/ApisixTls.yaml | 187 +++++
samples/deploy/crd/v1/ApisixUpstream.yaml | 387 +++++++++
.../deploy/crd/{v1beta1 => v1}/kustomization.yaml | 0
samples/deploy/crd/v1beta1/ApisixConsumer.yaml | 100 ---
samples/deploy/crd/v1beta1/ApisixRoute.yaml | 324 --------
samples/deploy/crd/v1beta1/ApisixTls.yaml | 187 -----
samples/deploy/crd/v1beta1/ApisixUpstream.yaml | 387 ---------
samples/deploy/kustomization.yaml | 2 +-
16 files changed, 1605 insertions(+), 1098 deletions(-)
diff --git a/Makefile b/Makefile
index 1697554..477a313 100644
--- a/Makefile
+++ b/Makefile
@@ -71,7 +71,7 @@ unit-test:
### e2e-test: Run e2e test cases (kind is required)
.PHONY: e2e-test
e2e-test: ginkgo-check push-images-to-kind
- kubectl apply -k $(PWD)/samples/deploy/crd/v1beta1
+ kubectl apply -k $(PWD)/samples/deploy/crd/v1
cd test/e2e && ginkgo -cover -coverprofile=coverage.txt -r
--randomizeSuites --randomizeAllSpecs --trace -p --nodes=$(E2E_CONCURRENCY)
.PHONY: ginkgo-check
diff --git a/README.md b/README.md
index 4062417..a6ca33b 100644
--- a/README.md
+++ b/README.md
@@ -59,7 +59,7 @@ This project is currently general availability.
## Prerequisites
-Apisix ingress controller requires Kubernetes version 1.15+.
+Apisix ingress controller requires Kubernetes version 1.16+. Because we used
`CustomResourceDefinition` v1 stable API.
From the version 1.0.0, APISIX-ingress-controller need to work with Apache
APISIX version 2.7+.
## Apache APISIX Ingress vs. Kubernetes Ingress Nginx
diff --git a/docs/en/latest/practices/check-crd-status.md
b/docs/en/latest/practices/check-crd-status.md
index 049691a..6ba4024 100644
--- a/docs/en/latest/practices/check-crd-status.md
+++ b/docs/en/latest/practices/check-crd-status.md
@@ -96,5 +96,5 @@ Status:
If can not see the Status information, please check the following points:
1. The version of Apache APISIX Ingress Controller needs to be >= 1.0.
-2. Use the latest CRD definition file, refer to
[here](https://github.com/apache/apisix-ingress-controller/tree/master/samples/deploy/crd/v1beta1).
+2. Use the latest CRD definition file, refer to
[here](https://github.com/apache/apisix-ingress-controller/tree/master/samples/deploy/crd/v1).
3. Use the latest RBAC configuration, refer to
[here](https://github.com/apache/apisix-ingress-controller/tree/master/samples/deploy/rbac).
diff --git a/docs/en/latest/practices/proxy-the-httpbin-service.md
b/docs/en/latest/practices/proxy-the-httpbin-service.md
index 3ed5cce..56dda7a 100644
--- a/docs/en/latest/practices/proxy-the-httpbin-service.md
+++ b/docs/en/latest/practices/proxy-the-httpbin-service.md
@@ -42,7 +42,7 @@ kubectl expose pod httpbin --port 80
## Resource Delivery
-In order to let Apache APISIX proxies requests to httpbin, we need to create
an `ApisixRoute` resource, if you're not familiar with it, see the
[reference](https://github.com/apache/apisix-ingress-controller/blob/master/samples/deploy/crd/v1beta1/ApisixRoute.yaml)
for the details.
+In order to let Apache APISIX proxies requests to httpbin, we need to create
an `ApisixRoute` resource, if you're not familiar with it, see the
[reference](https://github.com/apache/apisix-ingress-controller/blob/master/samples/deploy/crd/v1/ApisixRoute.yaml)
for the details.
```yaml
# httpbin-route.yaml
diff --git a/docs/en/latest/practices/the-hard-way.md
b/docs/en/latest/practices/the-hard-way.md
index 5b990cb..1440ae1 100644
--- a/docs/en/latest/practices/the-hard-way.md
+++ b/docs/en/latest/practices/the-hard-way.md
@@ -601,70 +601,11 @@ subjects:
Then, we need to create ApisixRoute CRD:
-```yaml
-
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: apisixroutes.apisix.apache.org
-spec:
- group: apisix.apache.org
- versions:
- - name: v1
- served: true
- storage: false
- - name: v2alpha1
- served: true
- storage: false
- - name: v2beta1
- served: true
- storage: true
- scope: Namespaced
- names:
- plural: apisixroutes
- singular: apisixroute
- kind: ApisixRoute
- shortNames:
- - ar
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: apisixtlses.apisix.apache.org
-spec:
- group: apisix.apache.org
- versions:
- - name: v1
- served: true
- storage: true
- scope: Namespaced
- names:
- plural: apisixtlses
- singular: apisixtls
- kind: ApisixTls
- shortNames:
- - atls
----
-apiVersion: apiextensions.k8s.io/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: apisixupstreams.apisix.apache.org
-spec:
- group: apisix.apache.org
- versions:
- - name: v1
- served: true
- storage: true
- scope: Namespaced
- names:
- plural: apisixupstreams
- singular: apisixupstream
- kind: ApisixUpstream
- shortNames:
- - au
+```bash
+kubectl apply -k samples/deploy/crd/v1
```
-This yaml doesn't contain all the CRDs for APISIX Ingress Controller. Please
refer to
[samples](http://github.com/apache/apisix-ingress-controller/blob/master/samples/deploy/crd)
for details.
+Please refer to
[samples](http://github.com/apache/apisix-ingress-controller/blob/master/samples/deploy/crd)
for details.
To make the ingress controller works properly with APISIX, we need to create a
config file containing the APISIX admin API URL and API key as below:
diff --git a/samples/deploy/crd/v1beta1/ApisixClusterConfig.yaml
b/samples/deploy/crd/v1/ApisixClusterConfig.yaml
similarity index 59%
rename from samples/deploy/crd/v1beta1/ApisixClusterConfig.yaml
rename to samples/deploy/crd/v1/ApisixClusterConfig.yaml
index b1d11d1..6594f2a 100644
--- a/samples/deploy/crd/v1beta1/ApisixClusterConfig.yaml
+++ b/samples/deploy/crd/v1/ApisixClusterConfig.yaml
@@ -15,16 +15,12 @@
# limitations under the License.
#
-apiVersion: apiextensions.k8s.io/v1beta1
+apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
name: apisixclusterconfigs.apisix.apache.org
spec:
group: apisix.apache.org
- versions:
- - name: v2alpha1
- served: true
- storage: true
scope: Cluster
names:
plural: apisixclusterconfigs
@@ -33,39 +29,43 @@ spec:
shortNames:
- acc
preserveUnknownFields: false
- subresources:
- status: {}
- validation:
- openAPIV3Schema:
- type: object
- properties:
- spec:
+ versions:
+ - name: v2alpha1
+ served: true
+ storage: true
+ subresources:
+ status: {}
+ schema:
+ openAPIV3Schema:
type: object
properties:
- admin:
- type: object
- required:
- - baseURL
- properties:
- baseURL:
- type: string
- pattern: "https?://[^:]+:(\\d+)"
- adminKey:
- type: string
- monitoring:
+ spec:
type: object
properties:
- prometheus:
+ admin:
type: object
+ required:
+ - baseURL
properties:
- enable:
- type: boolean
- skywalking:
+ baseURL:
+ type: string
+ pattern: "https?://[^:]+:(\\d+)"
+ adminKey:
+ type: string
+ monitoring:
type: object
properties:
- enable:
- type: boolean
- sampleRatio:
- type: number
- minimum: 0.00001
- maximum: 1
+ prometheus:
+ type: object
+ properties:
+ enable:
+ type: boolean
+ skywalking:
+ type: object
+ properties:
+ enable:
+ type: boolean
+ sampleRatio:
+ type: number
+ minimum: 0.00001
+ maximum: 1
diff --git a/samples/deploy/crd/v1/ApisixConsumer.yaml
b/samples/deploy/crd/v1/ApisixConsumer.yaml
new file mode 100644
index 0000000..04fedfd
--- /dev/null
+++ b/samples/deploy/crd/v1/ApisixConsumer.yaml
@@ -0,0 +1,100 @@
+#
+# 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: v2alpha1
+ served: true
+ storage: true
+ subresources:
+ status: {}
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ required:
+ - authParameter
+ properties:
+ authParameter:
+ type: object
+ oneOf:
+ - required: ["basicAuth"]
+ - required: ["keyAuth"]
+ 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
diff --git a/samples/deploy/crd/v1/ApisixRoute.yaml
b/samples/deploy/crd/v1/ApisixRoute.yaml
new file mode 100644
index 0000000..c09f754
--- /dev/null
+++ b/samples/deploy/crd/v1/ApisixRoute.yaml
@@ -0,0 +1,890 @@
+#
+# 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: v1
+ served: true
+ storage: false
+ deprecated: 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[].backend.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: ["tcp"]
+ - required: ["stream"]
+ properties:
+ http:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ oneOf:
+ - required: ["name", "match", "backend"]
+ - required: ["name", "match", "backends"]
+ 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
+ pattern:
"^/[a-zA-Z0-9\\-._~%!$&'()+,;=:@/]*\\*?$"
+ hosts:
+ type: array
+ minItems: 1
+ items:
+ type: string
+ pattern: "^\\*?[0-9a-zA-Z-._]+$"
+ 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"]
+ name:
+ type: string
+ minLength: 1
+ required:
+ - scope
+ op:
+ type: string
+ enum:
+ - Equal
+ - NotEqual
+ - GreaterThan
+ - LessThan
+ - In
+ - NotIn
+ - RegexMatch
+ - RegexNotMatch
+ - RegexMatchCaseInsensitive
+ - RegexNotMatchCaseInsensitive
+ value:
+ type: string
+ set:
+ type: array
+ items:
+ type: string
+ oneOf:
+ - required: ["subject", "op", "value"]
+ - required: ["subject", "op", "set"]
+ websocket:
+ type: boolean
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: ["endpoint", "service"]
+ weight:
+ type: integer
+ minimum: 0
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ backends:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ 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-preserve-unknown-fields: true # we have to
enable it since plugin config
+ required:
+ - name
+ - enable
+ authentication:
+ type: object
+ properties:
+ enable:
+ type: boolean
+ type:
+ type: string
+ enum: ["basicAuth", "keyAuth"]
+ keyAuth:
+ type: object
+ properties:
+ header:
+ type: string
+ required:
+ - enable
+ tcp:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ required: ["name", "match", "backend"]
+ properties:
+ name:
+ type: string
+ minLength: 1
+ match:
+ type: object
+ properties:
+ ingressPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ required:
+ - ingressPort
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: ["endpoint", "service"]
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ 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:
+ ingressPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ required:
+ - ingressPort
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: [ "endpoint", "service" ]
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ - name: v2alpha1
+ served: true
+ storage: false
+ 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[].backend.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: ["tcp"]
+ - required: ["stream"]
+ properties:
+ http:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ oneOf:
+ - required: ["name", "match", "backend"]
+ - required: ["name", "match", "backends"]
+ 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
+ pattern:
"^/[a-zA-Z0-9\\-._~%!$&'()+,;=:@/]*\\*?$"
+ hosts:
+ type: array
+ minItems: 1
+ items:
+ type: string
+ pattern: "^\\*?[0-9a-zA-Z-._]+$"
+ 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"]
+ name:
+ type: string
+ minLength: 1
+ required:
+ - scope
+ op:
+ type: string
+ enum:
+ - Equal
+ - NotEqual
+ - GreaterThan
+ - LessThan
+ - In
+ - NotIn
+ - RegexMatch
+ - RegexNotMatch
+ - RegexMatchCaseInsensitive
+ - RegexNotMatchCaseInsensitive
+ value:
+ type: string
+ set:
+ type: array
+ items:
+ type: string
+ oneOf:
+ - required: ["subject", "op", "value"]
+ - required: ["subject", "op", "set"]
+ websocket:
+ type: boolean
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: ["endpoint", "service"]
+ weight:
+ type: integer
+ minimum: 0
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ backends:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ 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-preserve-unknown-fields: true # we have to
enable it since plugin config
+ required:
+ - name
+ - enable
+ authentication:
+ type: object
+ properties:
+ enable:
+ type: boolean
+ type:
+ type: string
+ enum: ["basicAuth", "keyAuth"]
+ keyAuth:
+ type: object
+ properties:
+ header:
+ type: string
+ required:
+ - enable
+ tcp:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ required: ["name", "match", "backend"]
+ properties:
+ name:
+ type: string
+ minLength: 1
+ match:
+ type: object
+ properties:
+ ingressPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ required:
+ - ingressPort
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: ["endpoint", "service"]
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ 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:
+ ingressPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ required:
+ - ingressPort
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: [ "endpoint", "service" ]
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ - name: v2beta1
+ 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[].backend.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: ["tcp"]
+ - required: ["stream"]
+ properties:
+ http:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ oneOf:
+ - required: ["name", "match", "backend"]
+ - required: ["name", "match", "backends"]
+ 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
+ pattern:
"^/[a-zA-Z0-9\\-._~%!$&'()+,;=:@/]*\\*?$"
+ hosts:
+ type: array
+ minItems: 1
+ items:
+ type: string
+ pattern: "^\\*?[0-9a-zA-Z-._]+$"
+ 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"]
+ name:
+ type: string
+ minLength: 1
+ required:
+ - scope
+ op:
+ type: string
+ enum:
+ - Equal
+ - NotEqual
+ - GreaterThan
+ - LessThan
+ - In
+ - NotIn
+ - RegexMatch
+ - RegexNotMatch
+ - RegexMatchCaseInsensitive
+ - RegexNotMatchCaseInsensitive
+ value:
+ type: string
+ set:
+ type: array
+ items:
+ type: string
+ oneOf:
+ - required: ["subject", "op", "value"]
+ - required: ["subject", "op", "set"]
+ websocket:
+ type: boolean
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: ["endpoint", "service"]
+ weight:
+ type: integer
+ minimum: 0
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ backends:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ 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-preserve-unknown-fields: true # we have to
enable it since plugin config
+ required:
+ - name
+ - enable
+ authentication:
+ type: object
+ properties:
+ enable:
+ type: boolean
+ type:
+ type: string
+ enum: ["basicAuth", "keyAuth"]
+ keyAuth:
+ type: object
+ properties:
+ header:
+ type: string
+ required:
+ - enable
+ tcp:
+ type: array
+ minItems: 1
+ items:
+ type: object
+ required: ["name", "match", "backend"]
+ properties:
+ name:
+ type: string
+ minLength: 1
+ match:
+ type: object
+ properties:
+ ingressPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ required:
+ - ingressPort
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: ["endpoint", "service"]
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
+ 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:
+ ingressPort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ required:
+ - ingressPort
+ backend:
+ type: object
+ properties:
+ serviceName:
+ type: string
+ minLength: 1
+ servicePort:
+ type: integer
+ minimum: 1
+ maximum: 65535
+ resolveGranualrity:
+ type: string
+ enum: [ "endpoint", "service" ]
+ subset:
+ type: string
+ required:
+ - serviceName
+ - servicePort
diff --git a/samples/deploy/crd/v1/ApisixTls.yaml
b/samples/deploy/crd/v1/ApisixTls.yaml
new file mode 100644
index 0000000..465e101
--- /dev/null
+++ b/samples/deploy/crd/v1/ApisixTls.yaml
@@ -0,0 +1,187 @@
+#
+# 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: v1
+ 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:
+ 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
+ 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/samples/deploy/crd/v1/ApisixUpstream.yaml
b/samples/deploy/crd/v1/ApisixUpstream.yaml
new file mode 100644
index 0000000..d9b0e07
--- /dev/null
+++ b/samples/deploy/crd/v1/ApisixUpstream.yaml
@@ -0,0 +1,387 @@
+#
+# 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: v1
+ served: true
+ storage: true
+ subresources:
+ status: {}
+ schema:
+ openAPIV3Schema:
+ type: object
+ properties:
+ spec:
+ type: object
+ properties:
+ subsets:
+ type: array
+ items:
+ type: object
+ properties:
+ name:
+ type: string
+ minLength: 1
+ labels:
+ type: object
+ 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
+ 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
+ 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
diff --git a/samples/deploy/crd/v1beta1/kustomization.yaml
b/samples/deploy/crd/v1/kustomization.yaml
similarity index 100%
rename from samples/deploy/crd/v1beta1/kustomization.yaml
rename to samples/deploy/crd/v1/kustomization.yaml
diff --git a/samples/deploy/crd/v1beta1/ApisixConsumer.yaml
b/samples/deploy/crd/v1beta1/ApisixConsumer.yaml
deleted file mode 100644
index 11b605b..0000000
--- a/samples/deploy/crd/v1beta1/ApisixConsumer.yaml
+++ /dev/null
@@ -1,100 +0,0 @@
-#
-# 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/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: apisixconsumers.apisix.apache.org
-spec:
- group: apisix.apache.org
- versions:
- - name: v2alpha1
- served: true
- storage: true
- scope: Namespaced
- names:
- plural: apisixconsumers
- singular: apisixconsumer
- kind: ApisixConsumer
- shortNames:
- - ac
- preserveUnknownFields: false
- subresources:
- status: {}
- validation:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- required:
- - authParameter
- properties:
- authParameter:
- type: object
- oneOf:
- - required: ["basicAuth"]
- - required: ["keyAuth"]
- 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
diff --git a/samples/deploy/crd/v1beta1/ApisixRoute.yaml
b/samples/deploy/crd/v1beta1/ApisixRoute.yaml
deleted file mode 100644
index c546fa4..0000000
--- a/samples/deploy/crd/v1beta1/ApisixRoute.yaml
+++ /dev/null
@@ -1,324 +0,0 @@
-#
-# 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/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: apisixroutes.apisix.apache.org
-spec:
- 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[].backend.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
- group: apisix.apache.org
- versions:
- - name: v1
- served: true
- storage: false
- deprecated: true
- - name: v2alpha1
- served: true
- storage: false
- - name: v2beta1
- served: true
- storage: true
- scope: Namespaced
- names:
- plural: apisixroutes
- singular: apisixroute
- kind: ApisixRoute
- shortNames:
- - ar
- preserveUnknownFields: true # we have to enable it since plugin config
- subresources:
- status: {}
- validation:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- anyOf:
- - required: ["http"]
- - required: ["tcp"]
- - required: ["stream"]
- properties:
- http:
- type: array
- minItems: 1
- items:
- type: object
- oneOf:
- - required: ["name", "match", "backend"]
- - required: ["name", "match", "backends"]
- 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
- pattern: "^/[a-zA-Z0-9\\-._~%!$&'()+,;=:@/]*\\*?$"
- hosts:
- type: array
- minItems: 1
- items:
- type: string
- pattern: "^\\*?[0-9a-zA-Z-._]+$"
- 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"]
- name:
- type: string
- minLength: 1
- required:
- - scope
- op:
- type: string
- enum:
- - Equal
- - NotEqual
- - GreaterThan
- - LessThan
- - In
- - NotIn
- - RegexMatch
- - RegexNotMatch
- - RegexMatchCaseInsensitive
- - RegexNotMatchCaseInsensitive
- value:
- type: string
- set:
- type: array
- items:
- type: string
- oneOf:
- - required: ["subject", "op", "value"]
- - required: ["subject", "op", "set"]
- websocket:
- type: boolean
- backend:
- type: object
- properties:
- serviceName:
- type: string
- minLength: 1
- servicePort:
- type: integer
- minimum: 1
- maximum: 65535
- resolveGranualrity:
- type: string
- enum: ["endpoint", "service"]
- weight:
- type: integer
- minimum: 0
- subset:
- type: string
- required:
- - serviceName
- - servicePort
- backends:
- type: array
- minItems: 1
- items:
- type: object
- properties:
- serviceName:
- type: string
- minLength: 1
- servicePort:
- type: integer
- minimum: 1
- maximum: 65535
- resolveGranualrity:
- 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
- required:
- - name
- - enable
- authentication:
- type: object
- properties:
- enable:
- type: boolean
- type:
- type: string
- enum: ["basicAuth", "keyAuth"]
- keyAuth:
- type: object
- properties:
- header:
- type: string
- required:
- - enable
- tcp:
- type: array
- minItems: 1
- items:
- type: object
- required: ["name", "match", "backend"]
- properties:
- name:
- type: string
- minLength: 1
- match:
- type: object
- properties:
- ingressPort:
- type: integer
- minimum: 1
- maximum: 65535
- required:
- - ingressPort
- backend:
- type: object
- properties:
- serviceName:
- type: string
- minLength: 1
- servicePort:
- type: integer
- minimum: 1
- maximum: 65535
- resolveGranualrity:
- type: string
- enum: ["endpoint", "service"]
- subset:
- type: string
- required:
- - serviceName
- - servicePort
- 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:
- ingressPort:
- type: integer
- minimum: 1
- maximum: 65535
- required:
- - ingressPort
- backend:
- type: object
- properties:
- serviceName:
- type: string
- minLength: 1
- servicePort:
- type: integer
- minimum: 1
- maximum: 65535
- resolveGranualrity:
- type: string
- enum: [ "endpoint", "service" ]
- subset:
- type: string
- required:
- - serviceName
- - servicePort
diff --git a/samples/deploy/crd/v1beta1/ApisixTls.yaml
b/samples/deploy/crd/v1beta1/ApisixTls.yaml
deleted file mode 100644
index c4e1858..0000000
--- a/samples/deploy/crd/v1beta1/ApisixTls.yaml
+++ /dev/null
@@ -1,187 +0,0 @@
-#
-# 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/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: apisixtlses.apisix.apache.org
-spec:
- 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
- group: apisix.apache.org
- versions:
- - name: v1
- served: true
- storage: true
- scope: Namespaced
- names:
- plural: apisixtlses
- singular: apisixtls
- kind: ApisixTls
- shortNames:
- - atls
- preserveUnknownFields: false
- subresources:
- status: {}
- validation:
- 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:
- 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
- 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/samples/deploy/crd/v1beta1/ApisixUpstream.yaml
b/samples/deploy/crd/v1beta1/ApisixUpstream.yaml
deleted file mode 100644
index 3bf9349..0000000
--- a/samples/deploy/crd/v1beta1/ApisixUpstream.yaml
+++ /dev/null
@@ -1,387 +0,0 @@
-#
-# 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/v1beta1
-kind: CustomResourceDefinition
-metadata:
- name: apisixupstreams.apisix.apache.org
-spec:
- group: apisix.apache.org
- versions:
- - name: v1
- served: true
- storage: true
- scope: Namespaced
- names:
- plural: apisixupstreams
- singular: apisixupstream
- kind: ApisixUpstream
- shortNames:
- - au
- subresources:
- status: {}
- validation:
- openAPIV3Schema:
- type: object
- properties:
- spec:
- type: object
- properties:
- subsets:
- type: array
- items:
- type: object
- properties:
- name:
- type: string
- minLength: 1
- labels:
- type: object
- 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
- 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
- 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
diff --git a/samples/deploy/kustomization.yaml
b/samples/deploy/kustomization.yaml
index 32854a0..c175a05 100644
--- a/samples/deploy/kustomization.yaml
+++ b/samples/deploy/kustomization.yaml
@@ -25,4 +25,4 @@ bases:
- ./admission
- ./deployment
- ./rbac
- - ./crd/v1beta1
+ - ./crd/v1