You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by zh...@apache.org on 2022/11/16 14:59:09 UTC

[apisix-ingress-controller] branch master updated: docs: update ApisixRoute/v2 reference (#1423)

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 47906a53 docs: update ApisixRoute/v2 reference (#1423)
47906a53 is described below

commit 47906a533369dc76c3d2f7fcba10ce8030bd4ce6
Author: Navendu Pottekkat <na...@apache.org>
AuthorDate: Wed Nov 16 20:29:04 2022 +0530

    docs: update ApisixRoute/v2 reference (#1423)
---
 docs/en/latest/references/apisix_route_v2.md      | 153 +++++++++++-----------
 docs/en/latest/references/apisix_route_v2beta3.md | 130 +++++++++---------
 2 files changed, 150 insertions(+), 133 deletions(-)

diff --git a/docs/en/latest/references/apisix_route_v2.md b/docs/en/latest/references/apisix_route_v2.md
index 89cae10b..5ea3cd50 100644
--- a/docs/en/latest/references/apisix_route_v2.md
+++ b/docs/en/latest/references/apisix_route_v2.md
@@ -1,5 +1,10 @@
 ---
-title: ApisixRoute/v2 Reference
+title: ApisixRoute/v2
+keywords:
+  - APISIX ingress
+  - Apache APISIX
+  - ApisixRoute
+description: Reference for ApisixRoute/v2 custom Kubernetes resource.
 ---
 
 <!--
@@ -21,83 +26,85 @@ title: ApisixRoute/v2 Reference
 #
 -->
 
+See [concepts](https://apisix.apache.org/docs/ingress-controller/concepts/apisix_route) to learn more about how to use the ApisixRoute resource.
+
 ## Spec
 
-Meaning of each field in the spec of ApisixRoute are followed, the top level fields (`apiVersion`, `kind` and `metadata`) are same as other Kubernetes Resources.
+See the [definition](https://github.com/apache/apisix-ingress-controller/blob/master/samples/deploy/crd/v1/ApisixRoute.yaml) on GitHub.
+
+The table below describes each of the attributes in the spec. The fields `apiVersion`, `kind`, and `metadata` are similar to other Kubernetes resources and are excluded below.
+
+| Attribute                            | Type               | Description                                                                                                                                                                               |
+| ------------------------------------ | ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| http                                 | array              | HTTP Route rules.                                                                                                                                                                         |
+| http[].name                          | string (required)  | Route rule name.                                                                                                                                                                          |
+| http[].priority                      | integer            | Route priority. Used to determined which Route to use when multiple routes contain the same URI. Large number means higher priority.                                                      |
+| http[].timeout                       | object             | Timeouts for connecting, sending, and receiving messages between Ingress and the service. This will overwrite the value configured in `ApisixUpstream` resource.                          |
+| http[].timeout.connect               | string             | Connect timeout in the form "72h3m0.5s".                                                                                                                                                  |
+| http[].timeout.send                  | string             | Send timeout in the form "72h3m0.5s".                                                                                                                                                     |
+| http[].timeout.read                  | string             | Read timeout in the form "72h3m0.5s".                                                                                                                                                     |
+| http[].match                         | object             | Conditions to match a request with the Route.                                                                                                                                             |
+| http[].match.paths                   | array              | List of URIs to match the Route with. The Route will be used if any one of the URIs is matched.                                                                                           |
+| http[].match.hosts                   | array              | List of hosts to match the Route with. The Route will be used if any one of the hosts is matched.                                                                                         |
+| http[].match.methods                 | array              | List of HTTP methods (`GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`, `OPTIONS`, `CONNECT`, `TRACE`) to match the Route with. The Route will be used if any one of the methods is matched. |
+| http[].match.remoteAddrs             | array              | List of IP addresses (CIDR format) to match the Route with. The Route will be used if any one of the IP address is matched.                                                               |
+| http[].match.exprs                   | array              | List of expressions to match the Route with. The Route will be used if any one of the expression is matched.                                                                              |
+| http[].match.exprs[].subject         | object             | Subject for the expression.                                                                                                                                                               |
+| http[].match.exprs[].subject.scope   | string             | Scope of the subject. Can be one of `Header`, `Query`, `Cookie`, or `Path`.                                                                                                               |
+| http[].match.exprs[].subject.name    | string             | Subject name. Can be empty when the scope is `Path`.                                                                                                                                      |
+| http[].match.exprs[].op              | string             | Operator for the expression. See [Expression operators](#expression-operators) for more details.                                                                                          |
+| http[].match.exprs[].value           | string             | Value to compare the subject with. Can use either this or `http[].match.exprs[].set`.                                                                                                     |
+| http[].match.exprs[].set             | array              | Set to compare the subject with. Only used when the operator is `In` or `NotIn`. Can use either this or `http[].match.exprs[].value`.                                                     |
+| http[].websocket                     | boolean            | When set to `true` enables websocket proxy.                                                                                                                                               |
+| http[].plugin_config_name            | string             | Existing Plugin Config name to use in the Route.                                                                                                                                          |
+| http[].backends                      | object             | List of backend services. If there are more than one, a weight based traffic split policy would be applied.                                                                               |
+| http[].backends[].serviceName        | string             | Name of the backend service. The service and the `ApisixRoute` resource should be created in the same namespace.                                                                          |
+| http[].backends[].servicePort        | integer or string  | Port number or the name defined in the service object of the backend.                                                                                                                     |
+| http[].backends[].resolveGranularity | string             | See [Service resolution granularity](#service-resolution-granularity) for details.                                                                                                        |
+| http[].backends[].weight             | int                | Weight with which to split traffic to the backend. Defaults to `100` and is ignored when there is only one backend.                                                                       |
+| http[].backends[].subset             | string             | Subset for the target service. Should be pre-defined in the `ApisixUpstream` resource.                                                                                                    |
+| http[].plugins                       | array              | [APISIX Plugins](https://apisix.apache.org/docs/apisix/plugins/batch-requests/) to be executed if the Route is matched.                                                                   |
+| http[].plugins[].name                | string             | Name of the Plugin. See [Plugin hub](https://apisix.apache.org/plugins/) for a list of available Plugins.                                                                                 |
+| http[].plugins[].enable              | boolean            | When set to `true`, the Plugin is enabled on the Route.                                                                                                                                   |
+| http[].plugins[].config              | object             | Configuration of the Plugin. Should have the same fields as in [APISIX docs](https://apisix.apache.org/docs/apisix/plugins/batch-requests/).                                              |
+| http[].authentication                | object             | List of APISIX authentication Plugins.                                                                                                                                                    |
+| http[].authentication.enable         | boolean            | When set to `true`, the authentication Plugin is enabled on the Route.                                                                                                                    |
+| http[].authentication.type           | string             | Type of authentication. Set to one of `basicAuth` or `keyAuth`.                                                                                                                           |
+| http[].authentication.keyAuth        | object             | Unique key for a [Consumer](https://apisix.apache.org/docs/apisix/terminology/consumer/).                                                                                                 |
+| http[].authentication.keyAuth.header | string             | Header to get the key from.                                                                                                                                                               |
+| stream                               | array              | Stream route rules. Contains TCP or UDP rules.                                                                                                                                            |
+| stream[].protocol                    | string (required)  | The protocol of rule. Support `TCP` or `UDP`                                                                                                                                              |
+| stream[].name                        | string (required)  | Name of the rule.                                                                                                                                                                         |
+| stream[].match                       | object (required)  | Conditions to match the request with the Route.                                                                                                                                           |
+| stream[].match.ingressPort           | integer (required) | Listening port in the Ingress proxy server. This port should be defined in the [APISIX configuration](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L101).        |
+| stream[].backend                     | object             | Backend service (deprecated). Use `http[].backends` instead.                                                                                                                              |
+| stream[].backend.serviceName         | string             | Name of the backend service (depricated). The service and the `ApisixRoute` resource should be created in the same namespace.                                                             |
+| stream[].backend.servicePort         | integer or string  | Port number or the name defined in the service object of the backend (deprecated).                                                                                                        |
+| stream[].backend.resolveGranularity  | string             | See [Service resolution granularity](#service-resolution-granularity) for details (depricated).                                                                                           |
+| stream[].backend.subset              | string             | Subset for the target service (depricated). Should be pre-defined in the `ApisixUpstream` resource.                                                                                       |
 
-| Field                                | Type               | Description                                                                                                                                                                                                                       |
-|--------------------------------------|--------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| http                                 | array              | ApisixRoute's HTTP route rules.                                                                                                                                                                                                   |
-| http[].name                          | string (required)  | The route rule name.                                                                                                                                                                                                              |
-| http[].priority                      | integer            | The route priority, it's used to determine which route will be hitted when multile routes contains the same URI. Large number means higher priority.                                                                              |
-| http[].timeout                       | object             | Sets the timeout for connecting to, and sending and receiving messages between the Ingress and Service. This will overwrite the timeout value configured in your ApisixUpstream.                                                  |
-| http[].timeout.connect               | string             | Time duration in the form "72h3m0.5s"                                                                                                                                                                                             |
-| http[].timeout.send                  | string             | Time duration in the form "72h3m0.5s"                                                                                                                                                                                             |
-| http[].timeout.read                  | string             | Time duration in the form "72h3m0.5s"                                                                                                                                                                                             |
-| http[].match                         | object             | Route match conditions.                                                                                                                                                                                                           |
-| http[].match.paths                   | array              | A series of URI that should be matched (oneof) to use this route rule.                                                                                                                                                            |
-| http[].match.hosts                   | array              | A series of hosts that should be matched (oneof) to use this route rule.                                                                                                                                                          |
-| http[].match.methods                 | array              | A series of HTTP methods(`GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`, `OPTIONS`, `CONNECT`, `TRACE`) that should be matched (oneof) to use this route rule.                                                                   |
-| http[].match.remoteAddrs             | array              | A series of IP address (CIDR format) that should be matched (oneof) to use this route rule.                                                                                                                                       |
-| http[].match.exprs                   | array              | A series expressions that the results should be matched (oneof) to use this route rule.                                                                                                                                           |
-| http[].match.exprs[].subject         | object             | Expression subject.                                                                                                                                                                                                               |
-| http[].match.exprs[].subject.scope   | string             | Specify where to find the subject, values can be `Header`, `Query`, `Cookie` and `Path`.                                                                                                                                          |
-| http[].match.exprs[].subject.name    | string             | Specify subject name, when scope is `Path`, this field can be absent.                                                                                                                                                             |
-| http[].match.exprs[].op              | string             | Expression operator, see [Expression Operators](#expression-operators) for the detail of enumerations.                                                                                                                            |
-| http[].match.exprs[].value           | string             | Expected expression result, it's exclusive with `http[].match.exprs[].set`.                                                                                                                                                       |
-| http[].match.exprs[].set             | array              | Expected expression result set, only used when the operator is `In` or `NotIn`, it's exclusive with `http[].match.exprs[].value`.                                                                                                 |
-| http[].websocket                     | boolean            | Whether enable websocket proxy.                                                                                                                                                                                                   |
-| http[].plugin_config_name            | string             | Using exist `PluginConfig` for `ApisixRoute`.                                                                                                                                                                                     |
-| http[].backends                      | object             | The backend services. When the number of backends more than one, weight based traffic split policy will be applied to shifting traffic between these backends.                                                                    |
-| http[].backends[].serviceName        | string             | The backend service name, note the service and ApisixRoute should be created in the same namespace. Cross namespace referencing is not allowed.                                                                                   |
-| http[].backends[].servicePort        | integer or string  | The backend service port, can be the port number or the name defined in the service object.                                                                                                                                       |
-| http[].backends[].resolveGranularity | string             | See [Service Resolve Granularity](#service-resolve-granularity) for the details.                                                                                                                                                  |
-| http[].backends[].weight             | int                | The backend weight, which is critical when shifting traffic between multiple backends, default is `100`. Weight is ignored when there is only one backend.                                                                        |
-| http[].backends[].subset             | string             | Subset specifies a subset for the target Service. The subset should be pre-definedin ApisixUpstream about this service.                                                                                                           |
-| http[].plugins                       | array              | A series of APISIX plugins that will be executed once this route rule is matched                                                                                                                                                  |
-| http[].plugins[].name                | string             | The plugin name, see [docs](http://apisix.apache.org/docs/apisix/getting-started) for learning the available plugins.                                                                                                             |
-| http[].plugins[].enable              | boolean            | Whether the plugin would be used                                                                                                                                                                                                  |
-| http[].plugins[].config              | object             | The configuration of the plugin that must have the same fields as in APISIX.                                                                                                                                                      |
-| http[].authentication                | object             | A series of APISIX authentication plugins.                                                                                                                                                                                        |
-| http[].authentication.enable         | boolean            | Whether the plugin would be used.                                                                                                                                                                                                 |
-| http[].authentication.type           | string             | Plugin type, one of "basicAuth" "keyAuth"                                                                                                                                                                                         |
-| http[].authentication.keyAuth        | object             | Unique key for a Consumer.                                                                                                                                                                                                        |
-| http[].authentication.keyAuth.header | string             | The header to get the key from.                                                                                                                                                                                                   |
-| stream                               | array              | ApisixRoutes' stream route rules, which contains TCP or UDP rules.                                                                                                                                                                |
-| stream[].protocol                    | string (required)  | The protocol of rule. Support `TCP` or `UDP`                                                                                                                                                                                      |
-| stream[].name                        | string (required)  | The Route rule name.                                                                                                                                                                                                              |
-| stream[].match                       | object (required)  | The Route match conditions.                                                                                                                                                                                                       |
-| stream[].match.ingressPort           | integer (required) | the Ingress proxy server listening port, note since APISIX doesn't support dynamic listening, this port should be defined in [apisix configuration](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L101).  |
-| stream[].backend                     | object             | The backend service. Deprecated: use http[].backends instead.                                                                                                                                                                     |
-| stream[].backend.serviceName         | string             | The backend service name, note the service and ApisixRoute should be created in the same namespace. Cross namespace referencing is not allowed.                                                                                   |
-| stream[].backend.servicePort         | integer or string  | The backend service port, can be the port number or the name defined in the service object.                                                                                                                                       |
-| stream[].backend.resolveGranularity  | string             | See [Service Resolve Granularity](#service-resolve-granularity) for the details.                                                                                                                                                  |
-| stream[].backend.subset              | string             | Subset specifies a subset for the target Service. The subset should be pre-definedin ApisixUpstream about this service.                                                                                                           |
-| stream[].plugins                     | array              | A series of APISIX plugins that will be executed once this route rule is matched                                                                                                                                                  |
-| stream[].plugins[].name              | string             | The plugin name, see [docs](http://apisix.apache.org/docs/apisix/getting-started) for learning the available plugins.                                                                                                             |
-| stream[].plugins[].enable            | boolean            | Whether the plugin would be used                                                                                                                                                                                                  |
-| stream[].plugins[].config            | object             | The configuration of the plugin that must have the same fields as in APISIX.                                                                                                                                                      |
+## Expression operators
 
-## Expression Operators
+The following operators can be used in match expressions:
 
-| Operator                     | Meaning                                                                                |
-|------------------------------|----------------------------------------------------------------------------------------|
-| Equal                        | The result of `subject` should be equal to the `value`                                 |
-| NotEqual                     | The result of `subject` should not be equal to `value`                                 |
-| GreaterThan                  | The result of `subject` should be a number and it must larger then `value`.            |
-| LessThan                     | The result of `subject` should be a number and it must less than `value`.              |
-| In                           | The result of `subject` should be inside the `set`.                                    |
-| NotIn                        | The result of `subject` should not be inside the `set`.                                |
-| RegexMatch                   | The result of `subject` should be matched by the `value` (a PCRE regex pattern).       |
-| RegexNotMatch                | The result of `subject` should not be matched by the `value` (a PCRE regex pattern).   |
-| RegexMatchCaseInsensitive    | Similar with `RegexMatch` but the match process is case insensitive                    |
-| RegexNotMatchCaseInsensitive | Similar with `RegexNotMatchCaseInsensitive` but the match process is case insensitive. |
+| Operator                     | Description                                                                     |
+| ---------------------------- | ------------------------------------------------------------------------------- |
+| Equal                        | Result of the `subject` should be equal to the `value`.                         |
+| NotEqual                     | Result of the `subject` should not be equal to the `value`.                     |
+| GreaterThan                  | Result of the `subject` should be a number and must be larger than the `value`. |
+| LessThan                     | Result of the `subject` should be a number and must be less than the `value`.   |
+| In                           | Result of the `subject` should be a part of the `set`.                          |
+| NotIn                        | Result of the `subject` should be a part of the `set`.                          |
+| RegexMatch                   | Result of the `subject` should match the PCRE regex pattern of the `value`.     |
+| RegexNotMatch                | Result of the `subject` should not match the PCRE regex pattern of the `value`. |
+| RegexMatchCaseInsensitive    | Similar to `RegexMatch` but case insensitive.                                   |
+| RegexNotMatchCaseInsensitive | Similar to `RegexNotMatch` but case insensitive.                                |
 
-## Service Resolve Granularity
+## Service resolution granularity
 
-The service resolve granularity determines whether the [Serivce ClusterIP](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) or its endpoints should be filled in the target upstream of APISIX.
+By default, the service referenced will be watched to update its endpoint list in APISIX. To just use the `ClusterIP` of the service, you can set the `resolveGranularity` attribute to `service` (defaults to `endpoint`):
 
-| Granularity | Meaning                                                                                                                                                                        |
-|-------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| endpoint    | Filled upstream nodes by Pods' IP. ApisixUpstream healthCheck is only effective on this case.                                                                                  |
-| service     | Filled upstream nodes by Service ClusterIP, in such a case, loadbalacing are implemented by [kube-proxy](https://kubernetes.io/docs/concepts/overview/components/#kube-proxy). |
+| Granularity | Description                                                                                                                                                |
+| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| endpoint    | Upstream nodes are pods' IP adresses.                                                                                                                      |
+| service     | Upstream nodes are service cluster IP. Load balancing is implemented by [kube-proxy](https://kubernetes.io/docs/concepts/overview/components/#kube-proxy). |
diff --git a/docs/en/latest/references/apisix_route_v2beta3.md b/docs/en/latest/references/apisix_route_v2beta3.md
index 9859f65c..36a9196a 100644
--- a/docs/en/latest/references/apisix_route_v2beta3.md
+++ b/docs/en/latest/references/apisix_route_v2beta3.md
@@ -1,7 +1,11 @@
 ---
-title: ApisixRoute/v2beta3 Reference
+title: ApisixRoute/v2beta3
+keywords:
+  - APISIX ingress
+  - Apache APISIX
+  - ApisixRoute
+description: Reference for ApisixRoute/v2beta3 custom Kubernetes resource.
 ---
-
 <!--
 #
 # Licensed to the Apache Software Foundation (ASF) under one or more
@@ -21,69 +25,75 @@ title: ApisixRoute/v2beta3 Reference
 #
 -->
 
+See [concepts](https://apisix.apache.org/docs/ingress-controller/concepts/apisix_route) to learn more about how to use the ApisixRoute resource.
+
 ## Spec
 
-Meaning of each field in the spec of ApisixRoute are followed, the top level fields (`apiVersion`, `kind` and `metadata`) are same as other Kubernetes Resources.
+See the [definition](https://github.com/apache/apisix-ingress-controller/blob/master/samples/deploy/crd/v1/ApisixRoute.yaml) on GitHub.
+
+The table below describes each of the attributes in the spec. The fields `apiVersion`, `kind`, and `metadata` are similar to other Kubernetes resources and are excluded below.
+
+| Attribute                            | Type               | Description                                                                                                                                                                                 |
+|--------------------------------------|--------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
+| http                                 | array              | HTTP Route rules.                                                                                                                                                                           |
+| http[].name                          | string (required)  | Route rule name.                                                                                                                                                                            |
+| http[].priority                      | integer            | Route priority. Used to determined which Route to use when multiple routes contain the same URI. Large number means higher priority.                                                        |
+| http[].match                         | object             | Conditions to match a request with the Route.                                                                                                                                               |
+| http[].match.paths                   | array              | List of URIs to match the Route with. The Route will be used if any one of the URIs is matched.                                                                                             |
+| http[].match.hosts                   | array              | List of hosts to match the Route with. The Route will be used if any one of the hosts is matched.                                                                                           |
+| http[].match.methods                 | array              | List of HTTP methods (`GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`, `OPTIONS`, `CONNECT`, `TRACE`) to match the Route with. The Route will be used if any one of the methods is matched. |
+| http[].match.remoteAddrs             | array              | List of IP addresses (CIDR format) to match the Route with. The Route will be used if any one of the IP address is matched.                                                                 |
+| http[].match.exprs                   | array              | List of expressions to match the Route with. The Route will be used if any one of the expression is matched.                                                                                |
+| http[].match.exprs[].subject         | object             | Subject for the expression.                                                                                                                                                                 |
+| http[].match.exprs[].subject.scope   | string             | Scope of the subject. Can be one of `Header`, `Query`, `Cookie`, or `Path`.                                                                                                                 |
+| http[].match.exprs[].subject.name    | string             | Subject name. Can be empty when the scope is `Path`.                                                                                                                                        |
+| http[].match.exprs[].op              | string             | Operator for the expression. See [Expression operators](#expression-operators) for more details.                                                                                            |
+| http[].match.exprs[].value           | string             | Value to compare the subject with. Can use either this or `http[].match.exprs[].set`.                                                                                                       |
+| http[].match.exprs[].set             | array              | Set to compare the subject with. Only used when the operator is `In` or `NotIn`. Can use either this or `http[].match.exprs[].value`.                                                       |
+| http[].backends                      | object             | List of backend services. If there are more than one, a weight based traffic split policy would be applied.                                                                                 |
+| http[].backends[].serviceName        | string             | Name of the backend service. The service and the `ApisixRoute` resource should be created in the same namespace.                                                                            |
+| http[].backends[].servicePort        | integer or string  | Port number or the name defined in the service object of the backend.                                                                                                                       |
+| http[].backends[].resolveGranularity | string             | See [Service resolution granularity](#service-resolution-granularity) for details.                                                                                                          |
+| http[].backends[].weight             | int                | Weight with which to split traffic to the backend. Defaults to `100` and is ignored when there is only one backend.                                                                         |
+| http[].backends[].subset             | string             | Subset for the target service. Should be pre-defined in the `ApisixUpstream` resource.                                                                                                      |
+| http[].plugins                       | array              | [APISIX Plugins](https://apisix.apache.org/docs/apisix/plugins/batch-requests/) to be executed if the Route is matched.                                                                     |
+| http[].plugins[].name                | string             | Name of the Plugin. See [Plugin hub](https://apisix.apache.org/plugins/) for a list of available Plugins.                                                                                   |
+| http[].plugins[].enable              | boolean            | When set to `true`, the Plugin is enabled on the Route.                                                                                                                                     |
+| http[].plugins[].config              | object             | Configuration of the Plugin. Should have the same fields as in [APISIX docs](https://apisix.apache.org/docs/apisix/plugins/batch-requests/).                                                |
+| http[].websocket                     | boolean            | When set to `true` enables websocket proxy.                                                                                                                                                 |
+| stream                               | array              | Stream route rules. Contains TCP or UDP rules.                                                                                                                                              |
+| stream[].protocol                    | string (required)  | The protocol of rule. Support `TCP` or `UDP`                                                                                                                                                |
+| stream[].name                        | string (required)  | Name of the rule.                                                                                                                                                                           |
+| stream[].match                       | object (required)  | Conditions to match the request with the Route.                                                                                                                                             |
+| stream[].match.ingressPort           | integer (required) | Listening port in the Ingress proxy server. This port should be defined in the [APISIX configuration](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L101).          |
+| stream[].backend                     | object             | Backend service (deprecated). Use `http[].backends` instead.                                                                                                                                |
+| stream[].backend.serviceName         | string             | Name of the backend service (depricated). The service and the `ApisixRoute` resource should be created in the same namespace.                                                               |
+| stream[].backend.servicePort         | integer or string  | Port number or the name defined in the service object of the backend (deprecated).                                                                                                          |
+| stream[].backend.resolveGranularity  | string             | See [Service resolution granularity](#service-resolution-granularity) for details (depricated).                                                                                             |
+| stream[].backend.subset              | string             | Subset for the target service (depricated). Should be pre-defined in the `ApisixUpstream` resource.                                                                                         |
 
-| Field                                | Type               | Description                                                                                                                                                                                                                      |
-|--------------------------------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| http                                 | array              | ApisixRoute's HTTP route rules.                                                                                                                                                                                                  |
-| http[].name                          | string (required)  | The route rule name.                                                                                                                                                                                                             |
-| http[].priority                      | integer            | The route priority, it's used to determine which route will be hitted when multile routes contains the same URI. Large number means higher priority.                                                                             |
-| http[].match                         | object             | Route match conditions.                                                                                                                                                                                                          |
-| http[].match.paths                   | array              | A series of URI that should be matched (oneof) to use this route rule.                                                                                                                                                           |
-| http[].match.hosts                   | array              | A series of hosts that should be matched (oneof) to use this route rule.                                                                                                                                                         |
-| http[].match.methods                 | array              | A series of HTTP methods(`GET`, `POST`, `PUT`, `DELETE`, `PATCH`, `HEAD`, `OPTIONS`, `CONNECT`, `TRACE`) that should be matched (oneof) to use this route rule.                                                                  |
-| http[].match.remoteAddrs             | array              | A series of IP address (CIDR format) that should be matched (oneof) to use this route rule.                                                                                                                                      |
-| http[].match.exprs                   | array              | A series expressions that the results should be matched (oneof) to use this route rule.                                                                                                                                          |
-| http[].match.exprs[].subject         | object             | Expression subject.                                                                                                                                                                                                              |
-| http[].match.exprs[].subject.scope   | string             | Specify where to find the subject, values can be `Header`, `Query`, `Cookie` and `Path`.                                                                                                                                         |
-| http[].match.exprs[].subject.name    | string             | Specify subject name, when scope is `Path`, this field can be absent.                                                                                                                                                            |
-| http[].match.exprs[].op              | string             | Expression operator, see [Expression Operators](#expression-operators) for the detail of enumerations.                                                                                                                           |
-| http[].match.exprs[].value           | string             | Expected expression result, it's exclusive with `http[].match.exprs[].set`.                                                                                                                                                      |
-| http[].match.exprs[].set             | array              | Expected expression result set, only used when the operator is `In` or `NotIn`, it's exclusive with `http[].match.exprs[].value`.                                                                                                |
-| http[].backends                      | object             | The backend services. When the number of backends more than one, weight based traffic split policy will be applied to shifting traffic between these backends.                                                                   |
-| http[].backends[].serviceName        | string             | The backend service name, note the service and ApisixRoute should be created in the same namespace. Cross namespace referencing is not allowed.                                                                                  |
-| http[].backends[].servicePort        | integer or string  | The backend service port, can be the port number or the name defined in the service object.                                                                                                                                      |
-| http[].backends[].resolveGranularity | string             | See [Service Resolve Granularity](#service-resolve-granularity) for the details.                                                                                                                                                 |
-| http[].backends[].weight             | int                | The backend weight, which is critical when shifting traffic between multiple backends, default is `100`. Weight is ignored when there is only one backend.                                                                       |
-| http[].backends[].subset             | string             | Subset specifies a subset for the target Service. The subset should be pre-definedin ApisixUpstream about this service.                                                                                                          |
-| http[].plugins                       | array              | A series of APISIX plugins that will be executed once this route rule is matched                                                                                                                                                 |
-| http[].plugins[].name                | string             | The plugin name, see [docs](http://apisix.apache.org/docs/apisix/getting-started) for learning the available plugins.                                                                                                            |
-| http[].plugins[].enable              | boolean            | Whether the plugin would be used                                                                                                                                                                                                 |
-| http[].plugins[].config              | object             | The configuration of the plugin that must have the same fields as in APISIX.                                                                                                                                                     |
-| http[].websocket                     | boolean            | Whether enable websocket proxy.                                                                                                                                                                                                  |
-| stream                               | array              | ApisixRoutes' stream route rules, which contains TCP or UDP rules.                                                                                                                                                               |
-| stream[].protocol                    | string (required)  | The protocol of rule. Support `TCP` or `UDP`                                                                                                                                                                                     |
-| stream[].name                        | string (required)  | The Route rule name.                                                                                                                                                                                                             |
-| stream[].match                       | object (required)  | The Route match conditions.                                                                                                                                                                                                      |
-| stream[].match.ingressPort           | integer (required) | the Ingress proxy server listening port, note since APISIX doesn't support dynamic listening, this port should be defined in [apisix configuration](https://github.com/apache/apisix/blob/master/conf/config-default.yaml#L101). |
-| stream[].backend                     | object             | The backend service. Deprecated: use http[].backends instead.                                                                                                                                                                    |
-| stream[].backend.serviceName         | string             | The backend service name, note the service and ApisixRoute should be created in the same namespace. Cross namespace referencing is not allowed.                                                                                  |
-| stream[].backend.servicePort         | integer or string  | The backend service port, can be the port number or the name defined in the service object.                                                                                                                                      |
-| stream[].backend.resolveGranularity  | string             | See [Service Resolve Granularity](#service-resolve-granularity) for the details.                                                                                                                                                 |
-| stream[].backend.subset              | string             | Subset specifies a subset for the target Service. The subset should be pre-definedin ApisixUpstream about this service.                                                                                                          |
+## Expression operators
 
-## Expression Operators
+The following operators can be used in match expressions:
 
-| Operator                     | Meaning                                                                                |
-|------------------------------|----------------------------------------------------------------------------------------|
-| Equal                        | The result of `subject` should be equal to the `value`                                 |
-| NotEqual                     | The result of `subject` should not be equal to `value`                                 |
-| GreaterThan                  | The result of `subject` should be a number and it must larger then `value`.            |
-| LessThan                     | The result of `subject` should be a number and it must less than `value`.              |
-| In                           | The result of `subject` should be inside the `set`.                                    |
-| NotIn                        | The result of `subject` should not be inside the `set`.                                |
-| RegexMatch                   | The result of `subject` should be matched by the `value` (a PCRE regex pattern).       |
-| RegexNotMatch                | The result of `subject` should not be matched by the `value` (a PCRE regex pattern).   |
-| RegexMatchCaseInsensitive    | Similar with `RegexMatch` but the match process is case insensitive                    |
-| RegexNotMatchCaseInsensitive | Similar with `RegexNotMatchCaseInsensitive` but the match process is case insensitive. |
+| Operator                     | Description                                                                     |
+| ---------------------------- | ------------------------------------------------------------------------------- |
+| Equal                        | Result of the `subject` should be equal to the `value`.                         |
+| NotEqual                     | Result of the `subject` should not be equal to the `value`.                     |
+| GreaterThan                  | Result of the `subject` should be a number and must be larger than the `value`. |
+| LessThan                     | Result of the `subject` should be a number and must be less than the `value`.   |
+| In                           | Result of the `subject` should be a part of the `set`.                          |
+| NotIn                        | Result of the `subject` should be a part of the `set`.                          |
+| RegexMatch                   | Result of the `subject` should match the PCRE regex pattern of the `value`.     |
+| RegexNotMatch                | Result of the `subject` should not match the PCRE regex pattern of the `value`. |
+| RegexMatchCaseInsensitive    | Similar to `RegexMatch` but case insensitive.                                   |
+| RegexNotMatchCaseInsensitive | Similar to `RegexNotMatch` but case insensitive.                                |
 
-## Service Resolve Granularity
+## Service resolution granularity
 
-The service resolve granularity determines whether the [Serivce ClusterIP](https://kubernetes.io/docs/concepts/services-networking/service/#publishing-services-service-types) or its endpoints should be filled in the target upstream of APISIX.
+By default, the service referenced will be watched to update its endpoint list in APISIX. To just use the `ClusterIP` of the service, you can set the `resolveGranularity` attribute to `service` (defaults to `endpoint`):
 
-| Granularity  | Meaning                                                                                                                                                                        |
-|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
-| endpoint     | Filled upstream nodes by Pods' IP. ApisixUpstream healthCheck is only effective on this case.                                                                                  |
-| service      | Filled upstream nodes by Service ClusterIP, in such a case, loadbalacing are implemented by [kube-proxy](https://kubernetes.io/docs/concepts/overview/components/#kube-proxy). |
+| Granularity | Description                                                                                                                                                |
+| ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| endpoint    | Upstream nodes are pods' IP adresses.                                                                                                                      |
+| service     | Upstream nodes are service cluster IP. Load balancing is implemented by [kube-proxy](https://kubernetes.io/docs/concepts/overview/components/#kube-proxy). |