You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by ju...@apache.org on 2021/02/25 07:23:55 UTC

[apisix-ingress-controller] branch docs-added-meta created (now 4442d5d)

This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a change to branch docs-added-meta
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git.


      at 4442d5d  docs: added meta info

This branch includes the following new commits:

     new 4442d5d  docs: added meta info

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[apisix-ingress-controller] 01/01: docs: added meta info

Posted by ju...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

juzhiyuan pushed a commit to branch docs-added-meta
in repository https://gitbox.apache.org/repos/asf/apisix-ingress-controller.git

commit 4442d5d3af01163b2b95f00c01b1293e19ec6696
Author: juzhiyuan <ju...@apache.org>
AuthorDate: Thu Feb 25 15:22:36 2021 +0800

    docs: added meta info
---
 docs/en/latest/CRD-specification.md                | 208 +++++++++++----------
 docs/en/latest/FAQ.md                              |   7 +-
 docs/en/latest/config.json                         |  49 ++++-
 docs/en/latest/contribute.md                       |  21 ++-
 docs/en/latest/deployments/ack.md                  |  17 +-
 docs/en/latest/deployments/aws.md                  |  17 +-
 docs/en/latest/deployments/azure.md                |  21 ++-
 docs/en/latest/deployments/gke.md                  |  17 +-
 docs/en/latest/deployments/k3s-rke.md              |  19 +-
 docs/en/latest/deployments/kubesphere.md           |  15 +-
 docs/en/latest/deployments/minikube.md             |  15 +-
 docs/en/latest/deployments/tke.md                  |  17 +-
 docs/en/latest/design.md                           |  16 +-
 docs/en/latest/development.md                      |  23 ++-
 docs/en/latest/samples/index.md                    |  11 +-
 .../proxy-the-httpbin-service-with-ingress.md      |  13 +-
 .../en/latest/samples/proxy-the-httpbin-service.md |  27 +--
 docs/en/latest/usage.md                            |  31 +--
 18 files changed, 339 insertions(+), 205 deletions(-)

diff --git a/docs/en/latest/CRD-specification.md b/docs/en/latest/CRD-specification.md
index c63450a..2ea3f1f 100644
--- a/docs/en/latest/CRD-specification.md
+++ b/docs/en/latest/CRD-specification.md
@@ -17,16 +17,22 @@
 #
 -->
 
-# CRD specification
+---
+
+id: crd-specification
+title: CRD specification
+
+---
 
 In order to control the behavior of the proxy ([Apache APISIX](https://github.com/apache/apisix)), the following CRDs should be defined.
 
 ## CRD Types
 
+- [CRD Types](#crd-types)
 - [ApisixRoute](#apisixroute)
 - [ApisixUpstream](#apisixupstream)
   - [Configuring Load Balancer](#configuring-load-balancer)
-  - [Configuring Health Check](#configuring-load-balancer)
+  - [Configuring Health Check](#configuring-health-check)
   - [Configuring Retry and Timeout](#configuring-retry-and-timeout)
   - [Port Level Settings](#port-level-settings)
   - [Configuration References](#configuration-references)
@@ -48,37 +54,37 @@ metadata:
   namespace: cloud
 spec:
   rules:
-  - host: test.apisix.apache.org
-    http:
-      paths:
-      - backend:
-          serviceName: httpserver
-          servicePort: 8080
-        path: /hello*
-        plugins:
-          - name: limit-count
-            enable: true
-            config:
-              count: 2
-              time_window: 60
-              rejected_code: 503
-              key: remote_addr
+    - host: test.apisix.apache.org
+      http:
+        paths:
+          - backend:
+              serviceName: httpserver
+              servicePort: 8080
+            path: /hello*
+            plugins:
+              - name: limit-count
+                enable: true
+                config:
+                  count: 2
+                  time_window: 60
+                  rejected_code: 503
+                  key: remote_addr
 ```
 
-|     Field     |  Type    |                    Description                     |
-|---------------|----------|----------------------------------------------------|
-| rules         | array    | ApisixRoute's request matching rules.              |
-| host          | string   | The requested host.                                |
-| http          | object   | Route rules are applied to the scope of layer 7 traffic.     |
-| paths         | array    | Path-based `route` rule matching.                     |
-| backend       | object   | Backend service information configuration.         |
-| serviceName   | string   | The name of backend service. `namespace + serviceName + servicePort` form an unique identifier to match the back-end service.                      |
-| servicePort   | int      | The port of backend service. `namespace + serviceName + servicePort` form an unique identifier to match the back-end service.                      |
-| path          | string   | The URI matched by the route. Supports exact match and prefix match. Example,exact match: `/hello`, prefix match: `/hello*`.                     |
-| plugins       | array    | Custom plugin collection (Plugins defined in the `route` level). For more plugin information, please refer to the [Apache APISIX plugin docs](https://github.com/apache/apisix/tree/master/doc/plugins).    |
-| name          | string   | The name of the plugin. For more information about the example plugin, please check the [limit-count docs](https://github.com/apache/apisix/blob/master/doc/plugins/limit-count.md#Attributes).             |
-| enable        | boolean  | Whether to enable the plugin, `true`: means enable, `false`: means disable.      |
-| config        | object   | Configuration of plugin information. Note: The check of configuration schema is missing now, so please be careful when editing.    |
+| Field       | Type    | Description                                                                                                                                                                                              |
+| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| rules       | array   | ApisixRoute's request matching rules.                                                                                                                                                                    |
+| host        | string  | The requested host.                                                                                                                                                                                      |
+| http        | object  | Route rules are applied to the scope of layer 7 traffic.                                                                                                                                                 |
+| paths       | array   | Path-based `route` rule matching.                                                                                                                                                                        |
+| backend     | object  | Backend service information configuration.                                                                                                                                                               |
+| serviceName | string  | The name of backend service. `namespace + serviceName + servicePort` form an unique identifier to match the back-end service.                                                                            |
+| servicePort | int     | The port of backend service. `namespace + serviceName + servicePort` form an unique identifier to match the back-end service.                                                                            |
+| path        | string  | The URI matched by the route. Supports exact match and prefix match. Example,exact match: `/hello`, prefix match: `/hello*`.                                                                            |
+| plugins     | array   | Custom plugin collection (Plugins defined in the `route` level). For more plugin information, please refer to the [Apache APISIX plugin docs](https://github.com/apache/apisix/tree/master/doc/plugins). |
+| name        | string  | The name of the plugin. For more information about the example plugin, please check the [limit-count docs](https://github.com/apache/apisix/blob/master/doc/plugins/limit-count.md#Attributes).          |
+| enable      | boolean | Whether to enable the plugin, `true`: means enable, `false`: means disable.                                                                                                                              |
+| config      | object  | Configuration of plugin information. Note: The check of configuration schema is missing now, so please be careful when editing.                                                                          |
 
 **Support partial `annotation`**
 
@@ -90,7 +96,7 @@ kind: ApisixRoute
 metadata:
   annotations:
     k8s.apisix.apache.org/ingress.class: apisix_group
-    k8s.apisix.apache.org/ssl-redirect: 'false'
+    k8s.apisix.apache.org/ssl-redirect: "false"
     k8s.apisix.apache.org/whitelist-source-range:
       - 1.2.3.4/16
       - 4.3.2.1/8
@@ -99,11 +105,11 @@ metadata:
 spec:
 ```
 
-|         Field                                  |    Type    |                       Description                                  |
-|------------------------------------------------|------------|--------------------------------------------------------------------|
-| `k8s.apisix.apache.org/ssl-redirect`           | boolean    | Whether to force http redirect to https. `ture`: means to force conversion to https, `false`: means not to convert.   |
-| `k8s.apisix.apache.org/ingress.class`          | string     | Grouping of ingress.                                               |
-| `k8s.apisix.apache.org/whitelist-source-range` | array      | Whitelist of IPs allowed to be accessed.                           |
+| Field                                          | Type    | Description                                                                                                         |
+| ---------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------- |
+| `k8s.apisix.apache.org/ssl-redirect`           | boolean | Whether to force http redirect to https. `ture`: means to force conversion to https, `false`: means not to convert. |
+| `k8s.apisix.apache.org/ingress.class`          | string  | Grouping of ingress.                                                                                                |
+| `k8s.apisix.apache.org/whitelist-source-range` | array   | Whitelist of IPs allowed to be accessed.                                                                            |
 
 ## ApisixUpstream
 
@@ -134,9 +140,9 @@ spec:
   selector:
     app: httpbin
   ports:
-  - name: http
-    port: 80
-    targetPort: 8080
+    - name: http
+      port: 80
+      targetPort: 8080
 ```
 
 The above example shows that [ewma](https://linkerd.io/2016/03/16/beyond-round-robin-load-balancing-for-latency/) is used as the load balancer for Service `httpbin`.
@@ -253,10 +259,10 @@ spec:
   loadbalancer:
     type: roundrobin
   portLevelSettings:
-  - port: 7000
-    scheme: http
-  - port: 7001
-    scheme: grpc
+    - port: 7000
+      scheme: http
+    - port: 7001
+      scheme: grpc
 ---
 apiVersion: v1
 kind: Service
@@ -266,12 +272,12 @@ spec:
   selector:
     app: foo
   portLevelSettings:
-  - name: http
-    port: 7000
-    targetPort: 7000
-  - name: grpc
-    port: 7001
-    targetPort: 7001
+    - name: http
+      port: 7000
+      targetPort: 7000
+    - name: grpc
+      port: 7001
+      targetPort: 7001
 ```
 
 The `foo` service exposes two ports, one of them use HTTP protocol and the other uses grpc protocol.
@@ -282,51 +288,51 @@ In the meanwhile, the ApisixUpstream `foo` sets `http` scheme for port `7000` an
 
 ### Configuration References
 
-|     Field     |  Type    | Description    |
-|---------------|----------|----------------|
-| scheme        | string   | The protocol used to talk to the Service, can be `http`, `grpc`, default is `http`.   |
-| loadbalancer  | object   | The load balancing algorithm of this upstream service |
-| loadbalancer.type | string | The load balancing type, can be `roundrobin`, `ewma`, `least_conn`, `chash`, default is `roundrobin`. |
-| loadbalancer.hashOn | string | The hash value source scope, only take effects if the `chash` algorithm is in use. Values can `vars`, `header`, `vars_combinations`, `cookie` and `consumers`, default is `vars`. |
-| loadbalancer.key | string | The hash key, only in valid if the `chash` algorithm is used.
-| retries | int | The retry count. |
-| timeout | object | The timeout settings. |
-| timeout.connect | time duration in the form "72h3m0.5s" | The connect timeout. |
-| timeout.read | time duration in the form "72h3m0.5s" | The read timeout. |
-| timeout.send | time duration in the form "72h3m0.5s" | The send timeout. |
-| healthCheck | object | The health check parameters, see [Health Check](https://github.com/apache/apisix/blob/master/doc/health-check.md) for more details. |
-| healthCheck.active | object | active health check configuration, which is a mandatory field. |
-| healthCheck.active.type | string | health check type, can be `http`, `https` and `tcp`, default is `http`. |
-| healthCheck.active.timeout | time duration in the form "72h3m0.5s" | the timeout settings for the probe, default is `1s`. |
-| healthCheck.active.concurrency | int | how many probes can be sent simultaneously, default is `10`. |
-| healthCheck.active.host | string | host header in http probe request, only in valid if the active health check type is `http` or `https`. |
-| healthCheck.active.port | int | target port to receive probes, it's necessary to specify this field if the health check service exposes by different port, note the port value here is the container port, not the service port. |
-| healthCheck.active.httpPath | string | the HTTP URI path in http probe, only in valid if the active health check type is `http` or `https`. |
-| healthCheck.active.strictTLS | boolean | whether to use the strict mode when use TLS, only in valid if the active health check type is `https`, default is `true`. |
-| healthCheck.active.requestHeaders | array of string | Extra HTTP requests carried in the http probe, only in valid if the active health check type is `http` or `https`. |
-| healthCheck.active.healthy | object | The conditions to judge an endpoint is healthy. |
-| healthCheck.active.healthy.successes | int | The number of consecutive requests needed to set an endpoint as healthy, default is `2`. |
-| healthCheck.active.healthy.httpCodes | array of integer | Good status codes list to check whether a probe is successful, only in valid if the active health check type is `http` or `https`, default is `[200, 302]`. |
-| healthCheck.active.healthy.interval | time duration in the form "72h3m0.5s" | The probes sent interval (for healthy endpoints). |
-| healthCheck.active.unhealthy | object | The conditions to judge an endpoint is unhealthy. |
-| healthCheck.active.unhealthy.httpFailures | int | The number of consecutive http requests needed to set an endpoint as unhealthy, only in valid if the active health check type is `http` or `https`, default is `5`. |
-| healthCheck.active.unhealthy.tcpFailures | int | The number of consecutive tcp connections needed to set an endpoint as unhealthy, only in valid if the active health check type is `tcp`, default is `2`. |
-| healthCheck.active.unhealthy.httpCodes | array of integer | Bad status codes list to check whether a probe is failed, only in valid if the active health check type is `http` or `https`, default is `[429, 404, 500, 501, 502, 503, 504, 505]`. |
-| healthCheck.active.unhealthy.interval | time duration in the form "72h3m0.5s" | The probes sent interval (for unhealthy endpoints). |
-| healthCheck.passive | object | passive health check configuration, which is an optional field. |
-| healthCheck.passive.type | string | health check type, can be `http`, `https` and `tcp`, default is `http`. |
-| healthCheck.passive.healthy | object | The conditions to judge an endpoint is healthy. |
-| healthCheck.passive.healthy.successes | int | The number of consecutive requests needed to set an endpoint as healthy, default is `5`. |
-| healthCheck.passive.healthy.httpCodes | array of integer | Good status codes list to check whether a probe is successful, only in valid if the active health check type is `http` or `https`, default is `[200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 304, 305, 306, 307, 308]`. |
-| healthCheck.passive.unhealthy | object | The conditions to judge an endpoint is unhealthy. |
-| healthCheck.passive.unhealthy.httpFailures | int | The number of consecutive http requests needed to set an endpoint as unhealthy, only in valid if the active health check type is `http` or `https`, default is `5`. |
-| healthCheck.passive.unhealthy.tcpFailures | int | The number of consecutive tcp connections needed to set an endpoint as unhealthy, only in valid if the active health check type is `tcp`, default is `2`. |
-| healthCheck.passive.unhealthy.httpCodes | array of integer | Bad status codes list to check whether a probe is failed, only in valid if the active health check type is `http` or `https`, default is `[429, 404, 500, 501, 502, 503, 504, 505]`. |
-| portLevelSettings | array | Settings for each individual port. |
-| portLevelSettings.port | int | The port number defined in the Kubernetes Service, must be a valid port. |
-| portLevelSettings.scheme | string | same as `scheme` but takes higher precedence. |
-| portLevelSettings.loadbalancer | object | same as `loadbalancer` but takes higher precedence. |
-| portLevelSettings.healthCheck | object | same as `healthCheck` but takes higher precedence. |
+| Field                                      | Type                                  | Description                                                                                                                                                                                                                                      |
+| ------------------------------------------ | ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
+| scheme                                     | string                                | The protocol used to talk to the Service, can be `http`, `grpc`, default is `http`.                                                                                                                                                              |
+| loadbalancer                               | object                                | The load balancing algorithm of this upstream service                                                                                                                                                                                            |
+| loadbalancer.type                          | string                                | The load balancing type, can be `roundrobin`, `ewma`, `least_conn`, `chash`, default is `roundrobin`.                                                                                                                                            |
+| loadbalancer.hashOn                        | string                                | The hash value source scope, only take effects if the `chash` algorithm is in use. Values can `vars`, `header`, `vars_combinations`, `cookie` and `consumers`, default is `vars`.                                                                |
+| loadbalancer.key                           | string                                | The hash key, only in valid if the `chash` algorithm is used.                                                                                                                                                                                    |
+| retries                                    | int                                   | The retry count.                                                                                                                                                                                                                                 |
+| timeout                                    | object                                | The timeout settings.                                                                                                                                                                                                                            |
+| timeout.connect                            | time duration in the form "72h3m0.5s" | The connect timeout.                                                                                                                                                                                                                             |
+| timeout.read                               | time duration in the form "72h3m0.5s" | The read timeout.                                                                                                                                                                                                                                |
+| timeout.send                               | time duration in the form "72h3m0.5s" | The send timeout.                                                                                                                                                                                                                                |
+| healthCheck                                | object                                | The health check parameters, see [Health Check](https://github.com/apache/apisix/blob/master/doc/health-check.md) for more details.                                                                                                              |
+| healthCheck.active                         | object                                | active health check configuration, which is a mandatory field.                                                                                                                                                                                   |
+| healthCheck.active.type                    | string                                | health check type, can be `http`, `https` and `tcp`, default is `http`.                                                                                                                                                                          |
+| healthCheck.active.timeout                 | time duration in the form "72h3m0.5s" | the timeout settings for the probe, default is `1s`.                                                                                                                                                                                             |
+| healthCheck.active.concurrency             | int                                   | how many probes can be sent simultaneously, default is `10`.                                                                                                                                                                                     |
+| healthCheck.active.host                    | string                                | host header in http probe request, only in valid if the active health check type is `http` or `https`.                                                                                                                                           |
+| healthCheck.active.port                    | int                                   | target port to receive probes, it's necessary to specify this field if the health check service exposes by different port, note the port value here is the container port, not the service port.                                                 |
+| healthCheck.active.httpPath                | string                                | the HTTP URI path in http probe, only in valid if the active health check type is `http` or `https`.                                                                                                                                             |
+| healthCheck.active.strictTLS               | boolean                               | whether to use the strict mode when use TLS, only in valid if the active health check type is `https`, default is `true`.                                                                                                                        |
+| healthCheck.active.requestHeaders          | array of string                       | Extra HTTP requests carried in the http probe, only in valid if the active health check type is `http` or `https`.                                                                                                                               |
+| healthCheck.active.healthy                 | object                                | The conditions to judge an endpoint is healthy.                                                                                                                                                                                                  |
+| healthCheck.active.healthy.successes       | int                                   | The number of consecutive requests needed to set an endpoint as healthy, default is `2`.                                                                                                                                                         |
+| healthCheck.active.healthy.httpCodes       | array of integer                      | Good status codes list to check whether a probe is successful, only in valid if the active health check type is `http` or `https`, default is `[200, 302]`.                                                                                      |
+| healthCheck.active.healthy.interval        | time duration in the form "72h3m0.5s" | The probes sent interval (for healthy endpoints).                                                                                                                                                                                                |
+| healthCheck.active.unhealthy               | object                                | The conditions to judge an endpoint is unhealthy.                                                                                                                                                                                                |
+| healthCheck.active.unhealthy.httpFailures  | int                                   | The number of consecutive http requests needed to set an endpoint as unhealthy, only in valid if the active health check type is `http` or `https`, default is `5`.                                                                              |
+| healthCheck.active.unhealthy.tcpFailures   | int                                   | The number of consecutive tcp connections needed to set an endpoint as unhealthy, only in valid if the active health check type is `tcp`, default is `2`.                                                                                        |
+| healthCheck.active.unhealthy.httpCodes     | array of integer                      | Bad status codes list to check whether a probe is failed, only in valid if the active health check type is `http` or `https`, default is `[429, 404, 500, 501, 502, 503, 504, 505]`.                                                             |
+| healthCheck.active.unhealthy.interval      | time duration in the form "72h3m0.5s" | The probes sent interval (for unhealthy endpoints).                                                                                                                                                                                              |
+| healthCheck.passive                        | object                                | passive health check configuration, which is an optional field.                                                                                                                                                                                  |
+| healthCheck.passive.type                   | string                                | health check type, can be `http`, `https` and `tcp`, default is `http`.                                                                                                                                                                          |
+| healthCheck.passive.healthy                | object                                | The conditions to judge an endpoint is healthy.                                                                                                                                                                                                  |
+| healthCheck.passive.healthy.successes      | int                                   | The number of consecutive requests needed to set an endpoint as healthy, default is `5`.                                                                                                                                                         |
+| healthCheck.passive.healthy.httpCodes      | array of integer                      | Good status codes list to check whether a probe is successful, only in valid if the active health check type is `http` or `https`, default is `[200, 201, 202, 203, 204, 205, 206, 207, 208, 226, 300, 301, 302, 303, 304, 305, 306, 307, 308]`. |
+| healthCheck.passive.unhealthy              | object                                | The conditions to judge an endpoint is unhealthy.                                                                                                                                                                                                |
+| healthCheck.passive.unhealthy.httpFailures | int                                   | The number of consecutive http requests needed to set an endpoint as unhealthy, only in valid if the active health check type is `http` or `https`, default is `5`.                                                                              |
+| healthCheck.passive.unhealthy.tcpFailures  | int                                   | The number of consecutive tcp connections needed to set an endpoint as unhealthy, only in valid if the active health check type is `tcp`, default is `2`.                                                                                        |
+| healthCheck.passive.unhealthy.httpCodes    | array of integer                      | Bad status codes list to check whether a probe is failed, only in valid if the active health check type is `http` or `https`, default is `[429, 404, 500, 501, 502, 503, 504, 505]`.                                                             |
+| portLevelSettings                          | array                                 | Settings for each individual port.                                                                                                                                                                                                               |
+| portLevelSettings.port                     | int                                   | The port number defined in the Kubernetes Service, must be a valid port.                                                                                                                                                                         |
+| portLevelSettings.scheme                   | string                                | same as `scheme` but takes higher precedence.                                                                                                                                                                                                    |
+| portLevelSettings.loadbalancer             | object                                | same as `loadbalancer` but takes higher precedence.                                                                                                                                                                                              |
+| portLevelSettings.healthCheck              | object                                | same as `healthCheck` but takes higher precedence.                                                                                                                                                                                               |
 
 ## ApisixTls
 
@@ -349,11 +355,11 @@ spec:
     namespace: cloud
 ```
 
-|     Field     |  Type    | Description                     |
-|---------------|----------|---------------------------------|
-| hosts         | array    | The domain list to identify which hosts (matched with SNI) can use the TLS certificate stored in the Secret.  |
-| secret        | object   | The definition of the related Secret object with current ApisixTls object.                               |
-| name          | string   | The name of secret, the secret contains key and cert for `TLS`.       |
-| namespace     | string   | The namespace of secret , the secret contains key and cert for `TLS`.  |
+| Field     | Type   | Description                                                                                                  |
+| --------- | ------ | ------------------------------------------------------------------------------------------------------------ |
+| hosts     | array  | The domain list to identify which hosts (matched with SNI) can use the TLS certificate stored in the Secret. |
+| secret    | object | The definition of the related Secret object with current ApisixTls object.                                   |
+| name      | string | The name of secret, the secret contains key and cert for `TLS`.                                              |
+| namespace | string | The namespace of secret , the secret contains key and cert for `TLS`.                                        |
 
 [Back to top](#crd-types)
diff --git a/docs/en/latest/FAQ.md b/docs/en/latest/FAQ.md
index d90b272..99dc46a 100644
--- a/docs/en/latest/FAQ.md
+++ b/docs/en/latest/FAQ.md
@@ -17,7 +17,12 @@
 #
 -->
 
-# FAQ
+---
+
+id: faq
+title: FAQ
+
+---
 
 1. How to bind Service and Upstream?
 
diff --git a/docs/en/latest/config.json b/docs/en/latest/config.json
index b029746..5d20a42 100644
--- a/docs/en/latest/config.json
+++ b/docs/en/latest/config.json
@@ -1,4 +1,51 @@
 {
   "version": "0.3.0",
-  "sidebar": {}
+  "sidebar": {
+    "docs": [
+      {
+        "type": "category",
+        "label": "Getting Started",
+        "items": ["design", "crd-specification"]
+      },
+      {
+        "type": "category",
+        "label": "Samples",
+        "items": [
+          "samples",
+          "samples-proxy-the-httpbin-service-with-ingress",
+          "samples-proxy-the-httpbin-service"
+        ]
+      },
+      {
+        "type": "category",
+        "label": "Deployment",
+        "items": [
+          "deployment-on-ack",
+          "deployment-on-aws",
+          "deployment-on-azure-aks",
+          "deployment-on-gke",
+          "deployment-on-k3s-rke",
+          "deployment-on-kubeSphere",
+          "deployment-on-minikube",
+          "deployment-on-tke"
+        ]
+      },
+      {
+        "type": "doc",
+        "id": "usage"
+      },
+      {
+        "type": "doc",
+        "id": "development"
+      },
+      {
+        "type": "doc",
+        "id": "contributing"
+      },
+      {
+        "type": "doc",
+        "id": "faq"
+      }
+    ]
+  }
 }
diff --git a/docs/en/latest/contribute.md b/docs/en/latest/contribute.md
index 943fb5e..f1fdeff 100644
--- a/docs/en/latest/contribute.md
+++ b/docs/en/latest/contribute.md
@@ -17,7 +17,12 @@
 #
 -->
 
-# Contributing to apisix-ingress-controller
+---
+
+id: contributing
+title: Contributing to apisix-ingress-controller
+
+---
 
 Firstly, thanks for your interest in contributing! I hope that this will be a
 pleasant first experience for you, and that you will return to continue
@@ -29,13 +34,13 @@ Most of the contributions that we receive are code contributions, but you can
 also contribute to the documentation or simply report solid bugs
 for us to fix.
 
- For new contributors, please take a look at issues with a tag called [Good first issue](https://github.com/apache/apisix-ingress-controller/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or [Help wanted](https://github.com/apache/apisix-ingress-controller/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22).
+For new contributors, please take a look at issues with a tag called [Good first issue](https://github.com/apache/apisix-ingress-controller/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) or [Help wanted](https://github.com/apache/apisix-ingress-controller/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22).
 
 ## How to report a bug
 
-* **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/apache/apisix-ingress-controller/issues).
+- **Ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/apache/apisix-ingress-controller/issues).
 
-* If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/apache/apisix-ingress-controller/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring.
+- If you're unable to find an open issue addressing the problem, [open a new one](https://github.com/apache/apisix-ingress-controller/issues/new). Be sure to include a **title and clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring.
 
 ## How to add a new feature or change an existing one
 
@@ -43,7 +48,7 @@ Before making any significant changes, please [open an issue](https://github.com
 
 Once we've discussed your changes and you've got your code ready, make sure that tests are passing and open your pull request. Your PR is most likely to be accepted if it:
 
-* Update the README.md with details of changes to the interface.
-* Includes tests for new functionality.
-* References the original issue in the description, e.g. "Resolves #123".
-* Has a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
+- Update the README.md with details of changes to the interface.
+- Includes tests for new functionality.
+- References the original issue in the description, e.g. "Resolves #123".
+- Has a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html).
diff --git a/docs/en/latest/deployments/ack.md b/docs/en/latest/deployments/ack.md
index f46238c..b452c3f 100644
--- a/docs/en/latest/deployments/ack.md
+++ b/docs/en/latest/deployments/ack.md
@@ -17,17 +17,22 @@
 #
 -->
 
-# Install Ingress APISIX on ACK
+---
+
+id: deployment-on-ack
+title: Install Ingress APISIX on ACK
+
+---
 
 This document explains how to install Ingress APISIX on [ali-cloud ACK](https://www.aliyun.com/product/kubernetes).
 
 ## Prerequisites
 
-* Create an ACK Service on ali-cloud.
-* Download the kube config for your ACK, follow the [introduction](https://www.alibabacloud.com/help/zh/doc-detail/86378.html).
-* Install [Helm](https://helm.sh/).
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, `kubectl` operations thorough this document will be executed in namespace `ingress-apisix`.
+- Create an ACK Service on ali-cloud.
+- Download the kube config for your ACK, follow the [introduction](https://www.alibabacloud.com/help/zh/doc-detail/86378.html).
+- Install [Helm](https://helm.sh/).
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, `kubectl` operations thorough this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
diff --git a/docs/en/latest/deployments/aws.md b/docs/en/latest/deployments/aws.md
index 34ba842..5b8c640 100644
--- a/docs/en/latest/deployments/aws.md
+++ b/docs/en/latest/deployments/aws.md
@@ -17,17 +17,22 @@
 #
 -->
 
-# Install Ingress APISIX on Amazon EKS
+---
+
+id: deployment-aws
+title: Install Ingress APISIX on Amazon EKS
+
+---
 
 This document explains how to install Ingress APISIX on [Amazon EKS](https://amazonaws-china.com/eks/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc&eks-blogs.sort-by=item.additionalFields.createdDate&eks-blogs.sort-order=desc).
 
 ## Prerequisites
 
-* Create an EKS Service on AWS.
-* Install [Helm](https://helm.sh/).
-* Download the kube config for your EKS from [aws cli interface](https://amazonaws-china.com/cli/).
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
+- Create an EKS Service on AWS.
+- Install [Helm](https://helm.sh/).
+- Download the kube config for your EKS from [aws cli interface](https://amazonaws-china.com/cli/).
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
diff --git a/docs/en/latest/deployments/azure.md b/docs/en/latest/deployments/azure.md
index 4dc6dba..0c67aff 100644
--- a/docs/en/latest/deployments/azure.md
+++ b/docs/en/latest/deployments/azure.md
@@ -17,17 +17,24 @@
 #
 -->
 
-# Install Ingress APISIX on Azure AKS
+---
 
-This document explains how to install Ingress APISIX on [Auzre AKS](https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes#:~:text=Azure%20Kubernetes%20Service%20(AKS)%20makes,managed%20Kubernetes%20cluster%20in%20Azure.&text=The%20Kubernetes%20masters%20are%20managed,clusters%2C%20not%20for%20the%20masters.).
+id: deployment-azure-aks
+title: Install Ingress APISIX on Azure AKS
+
+---
+
+#
+
+This document explains how to install Ingress APISIX on [Auzre AKS](<https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes#:~:text=Azure%20Kubernetes%20Service%20(AKS)%20makes,managed%20Kubernetes%20cluster%20in%20Azure.&text=The%20Kubernetes%20masters%20are%20managed,clusters%2C%20not%20for%20the%20masters.>).
 
 ## Prerequisites
 
-* Create an Kubernetes Service on Azure.
-* Install [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/#:~:text=The%20Azure%20command%2Dline%20interface,with%20an%20emphasis%20on%20automation.) and download the credentials by running `az aks get-credentials`.
-* Install [Helm](https://helm.sh/).
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
+- Create an Kubernetes Service on Azure.
+- Install [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/#:~:text=The%20Azure%20command%2Dline%20interface,with%20an%20emphasis%20on%20automation.) and download the credentials by running `az aks get-credentials`.
+- Install [Helm](https://helm.sh/).
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
diff --git a/docs/en/latest/deployments/gke.md b/docs/en/latest/deployments/gke.md
index cd03a1c..6bde9b8 100644
--- a/docs/en/latest/deployments/gke.md
+++ b/docs/en/latest/deployments/gke.md
@@ -17,17 +17,22 @@
 #
 -->
 
-# Install Ingress APISIX on Google Cloud GKE
+---
+
+id: deployment-on-gke
+title: Install Ingress APISIX on Google Cloud GKE
+
+---
 
 This document explains how to install Ingress APISIX on [Google Cloud GKE](https://cloud.google.com/kubernetes-engine).
 
 ## Prerequisites
 
-* Create an Kubernetes Service on GKE.
-* Install [Google Cloud SDK](https://cloud.google.com/sdk) and get the credentials or you can just use the [Cloud Shell](https://cloud.google.com/shell).
-* Install [Helm](https://helm.sh/).
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
+- Create an Kubernetes Service on GKE.
+- Install [Google Cloud SDK](https://cloud.google.com/sdk) and get the credentials or you can just use the [Cloud Shell](https://cloud.google.com/shell).
+- Install [Helm](https://helm.sh/).
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
diff --git a/docs/en/latest/deployments/k3s-rke.md b/docs/en/latest/deployments/k3s-rke.md
index b45c907..28fea4e 100644
--- a/docs/en/latest/deployments/k3s-rke.md
+++ b/docs/en/latest/deployments/k3s-rke.md
@@ -17,7 +17,12 @@
 #
 -->
 
-# Install Ingress APISIX on K3S and Rancher RKE
+---
+
+id: deployment-on-k3s-rke
+title: Install Ingress APISIX on K3S and Rancher RKE
+
+---
 
 This document explains how to install Ingress APISIX on [k3S](https://k3s.io/) and [Rancher RKE](https://rancher.com/products/rke/).
 
@@ -26,10 +31,10 @@ It's a good choice to use Ingress APISIX as the north-south API gateway in K3S.
 
 ## Prerequisites
 
-* Install [K3S](https://rancher.com/docs/k3s/latest/en/installation/) or [Rancher RKE](https://rancher.com/docs/rke/latest/en/installation/).
-* Install [Helm](https://helm.sh/).
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
+- Install [K3S](https://rancher.com/docs/k3s/latest/en/installation/) or [Rancher RKE](https://rancher.com/docs/rke/latest/en/installation/).
+- Install [Helm](https://helm.sh/).
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
@@ -47,7 +52,7 @@ helm install apisix ./charts/apisix \
 kubectl get service --namespace ingress-apisix
 ```
 
-*If you are using K3S, the default kubeconfig file is in /etc/rancher/k3s and root permission may required.*
+_If you are using K3S, the default kubeconfig file is in /etc/rancher/k3s and root permission may required._
 
 Two Service resources were created, one is `apisix-gateway`, which processes the real traffic; another is `apisix-admin`, which acts as the control plane to process all the configuration changes.
 
@@ -71,7 +76,7 @@ helm install apisix-ingress-controller ./charts/apisix-ingress-controller \
   --kubeconfig /etc/rancher/k3s/k3s.yaml
 ```
 
-*If you are using K3S, the default kubeconfig file is in /etc/rancher/k3s and root permission may required.*
+_If you are using K3S, the default kubeconfig file is in /etc/rancher/k3s and root permission may required._
 
 The admin key used in abovementioned commands is the default one, if you change the admin key configuration when you deployed APISIX, please remember to change it here.
 
diff --git a/docs/en/latest/deployments/kubesphere.md b/docs/en/latest/deployments/kubesphere.md
index 3d15bae..990b754 100644
--- a/docs/en/latest/deployments/kubesphere.md
+++ b/docs/en/latest/deployments/kubesphere.md
@@ -17,7 +17,12 @@
 #
 -->
 
-# Install Ingress APISIX on KubeSphere
+---
+
+id: deployment-on-kubeSphere
+title: Install Ingress APISIX on KubeSphere
+
+---
 
 This document explains how to install Ingress APISIX on [KubeSphere](https://kubesphere.io/).
 
@@ -25,10 +30,10 @@ KubeSphere is a distributed operating system managing cloud native applications
 
 ## Prerequisites
 
-* Install [KubeSphere](https://kubesphere.io/docs/quick-start/), you can choose [All-in-one Installation on Linux](https://kubesphere.io/docs/quick-start/all-in-one-on-linux/) or [Minimal KubeSphere on Kubernetes](https://kubesphere.io/docs/quick-start/minimal-kubesphere-on-k8s/).
-* Install [Helm](https://helm.sh/).
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, kubectl operations of this document will be executed in namespace `ingress-apisix`.
+- Install [KubeSphere](https://kubesphere.io/docs/quick-start/), you can choose [All-in-one Installation on Linux](https://kubesphere.io/docs/quick-start/all-in-one-on-linux/) or [Minimal KubeSphere on Kubernetes](https://kubesphere.io/docs/quick-start/minimal-kubesphere-on-k8s/).
+- Install [Helm](https://helm.sh/).
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, kubectl operations of this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
diff --git a/docs/en/latest/deployments/minikube.md b/docs/en/latest/deployments/minikube.md
index 3454102..9b83a7f 100644
--- a/docs/en/latest/deployments/minikube.md
+++ b/docs/en/latest/deployments/minikube.md
@@ -17,16 +17,21 @@
 #
 -->
 
-# Install Ingress APISIX on Minikube
+---
+
+id: deployment-on-minikube
+title: Install Ingress APISIX on Minikube
+
+---
 
 This document explains how to install Ingress APISIX on [Minikube](https://minikube.sigs.k8s.io/).
 
 ## Prerequisites
 
-* Install [Minikube](https://minikube.sigs.k8s.io/docs/start/).
-* Install [Helm](https://helm.sh/).
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
+- Install [Minikube](https://minikube.sigs.k8s.io/docs/start/).
+- Install [Helm](https://helm.sh/).
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
diff --git a/docs/en/latest/deployments/tke.md b/docs/en/latest/deployments/tke.md
index 97fa0e5..39aa32b 100644
--- a/docs/en/latest/deployments/tke.md
+++ b/docs/en/latest/deployments/tke.md
@@ -17,17 +17,22 @@
 #
 -->
 
-# Install Ingress APISIX on Tencent TKE
+---
+
+id: deployment-on-tke
+title: Install Ingress APISIX on Tencent TKE
+
+---
 
 This document explains how to install Ingress APISIX on [Tencent TKE](https://cloud.tencent.com/product/tke).
 
 ## Prerequisites
 
-* Create a TKE Service on Tencent Cloud and make sure the API Server is accessible from your workspace.
-* Install [Helm](https://helm.sh/).
-* Download the kube config for your TKE Console.
-* Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
-* Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
+- Create a TKE Service on Tencent Cloud and make sure the API Server is accessible from your workspace.
+- Install [Helm](https://helm.sh/).
+- Download the kube config for your TKE Console.
+- Clone [Apache APISIX Charts](https://github.com/apache/apisix-helm-chart).
+- Make sure your target namespace exists, kubectl operations thorough this document will be executed in namespace `ingress-apisix`.
 
 ## Install APISIX
 
diff --git a/docs/en/latest/design.md b/docs/en/latest/design.md
index a615464..c5f5eeb 100644
--- a/docs/en/latest/design.md
+++ b/docs/en/latest/design.md
@@ -17,7 +17,12 @@
 #
 -->
 
-# ingress-controller
+---
+
+id: ingress-controller-design
+title: Ingress Controller Design
+
+---
 
 Apache APISIX ingress for Kubernetes.
 
@@ -62,8 +67,8 @@ Currently `apisix-ingress-controller` CRDs consist of 3 parts: ApisixRoute/Apisi
 1. The most important part of the gateway is the route part, which is used to define the distribution rules of the gateway traffics.
 2. In order to facilitate understanding and configuration, the design structure of `ApisixRoute` is basically similar to Kubernetes Ingress.
 3. In the design of annotation, the structure of Kubernetes Ingress is used for reference, but the internal implementation is based on the plug-in of Apache APISIX.
-5. In the simplest case, you only need to define `ApisixRoute`, and the Ingress controller will automatically add `ApisixUpstream`.
-7. `ApisixUpstream` can define some details on Apache APISIX upstream, such as load balancing/health check, etc.
+4. In the simplest case, you only need to define `ApisixRoute`, and the Ingress controller will automatically add `ApisixUpstream`.
+5. `ApisixUpstream` can define some details on Apache APISIX upstream, such as load balancing/health check, etc.
 
 ## Monitoring CRDs
 
@@ -73,7 +78,7 @@ Currently `apisix-ingress-controller` CRDs consist of 3 parts: ApisixRoute/Apisi
 
 ![flow](../../assets/images/flow.png)
 
-* Here is a flowchart that introduces the main logic of `ApisixRoute` and other CRDs during synchronization.
+- Here is a flowchart that introduces the main logic of `ApisixRoute` and other CRDs during synchronization.
 
 ![logic](../../assets/images/sync-logic-controller.png)
 
@@ -126,8 +131,7 @@ metadata:
   annotations:
     k8s.apisix.apache.org/whitelist-source-range: 1.2.3.4,2.2.0.0/16
   name: httpserver-route
-spec:
-    ...
+spec: ...
 ```
 
 The black and white list here is implemented by the [ip-restriction](https://github.com/apache/apisix/blob/master/doc/plugins/ip-restriction.md) plugin.
diff --git a/docs/en/latest/development.md b/docs/en/latest/development.md
index 8d883d2..2c317b3 100644
--- a/docs/en/latest/development.md
+++ b/docs/en/latest/development.md
@@ -17,21 +17,26 @@
 #
 -->
 
-# Developing for Apache APISIX Ingress Controller
+---
+
+id: development
+title: Developing for Apache APISIX Ingress Controller
+
+---
 
 This document explains how to get started with developing for Apache APISIX Ingress controller.
 
 ## Prerequisites
 
-* Install [Go 1.13](https://golang.org/dl/) or later, and we use go module to manage the go package dependencies.
-* Prepare an available Kubernetes cluster in your workstation, we recommend you to use [Minikube](https://github.com/kubernetes/minikube).
-* [Install Apache APISIX in Kubernetes by Helm Chart](https://github.com/apache/apisix-helm-chart).
+- Install [Go 1.13](https://golang.org/dl/) or later, and we use go module to manage the go package dependencies.
+- Prepare an available Kubernetes cluster in your workstation, we recommend you to use [Minikube](https://github.com/kubernetes/minikube).
+- [Install Apache APISIX in Kubernetes by Helm Chart](https://github.com/apache/apisix-helm-chart).
 
 ## Fork and Clone
 
-* Fork the repository from [apache/apisix-ingress-controller](https://github.com/apache/apisix-ingress-controller) to your own GitHub account.
-* Clone the forked repository to your workstation.
-* Run `go mod download` to download modules to local cache. By the way, if you are a developer in China, we suggest you setting `GOPROXY` to `https://goproxy.cn` to speed up the downloading.
+- Fork the repository from [apache/apisix-ingress-controller](https://github.com/apache/apisix-ingress-controller) to your own GitHub account.
+- Clone the forked repository to your workstation.
+- Run `go mod download` to download modules to local cache. By the way, if you are a developer in China, we suggest you setting `GOPROXY` to `https://goproxy.cn` to speed up the downloading.
 
 ## Build
 
@@ -86,5 +91,5 @@ cd /path/to/apisix-ingress-controller
 
 Something you need to pay attention to:
 
-* configuring of `--kubeconfig`, if you are using Minikube, the file path should be `~/.kube/config`.
-* configuring of `--apisix-admin-key`, if you have changed the admin key in Apache APISIX, also changing it here, if you disable the authentication if Apache APISIX, just removing this option.
+- configuring of `--kubeconfig`, if you are using Minikube, the file path should be `~/.kube/config`.
+- configuring of `--apisix-admin-key`, if you have changed the admin key in Apache APISIX, also changing it here, if you disable the authentication if Apache APISIX, just removing this option.
diff --git a/docs/en/latest/samples/index.md b/docs/en/latest/samples/index.md
index dd80f68..c984c1f 100644
--- a/docs/en/latest/samples/index.md
+++ b/docs/en/latest/samples/index.md
@@ -17,9 +17,14 @@
 #
 -->
 
-# Ingress APISIX Use Examples
+---
+
+id: samples
+title: Ingress APISIX Use Examples
+
+---
 
 This is an index page about use examples of Ingress APISIX. Read them if you're trying to learn Ingress APISIX.
 
-* [Proxy the httpbin service](./proxy-the-httpbin-service.md).
-* [Proxy the httpbin service with the native Ingress](./proxy-the-httpbin-service-with-ingress.md).
+- [Proxy the httpbin service](./proxy-the-httpbin-service.md).
+- [Proxy the httpbin service with the native Ingress](./proxy-the-httpbin-service-with-ingress.md).
diff --git a/docs/en/latest/samples/proxy-the-httpbin-service-with-ingress.md b/docs/en/latest/samples/proxy-the-httpbin-service-with-ingress.md
index 0012b78..78d9db2 100644
--- a/docs/en/latest/samples/proxy-the-httpbin-service-with-ingress.md
+++ b/docs/en/latest/samples/proxy-the-httpbin-service-with-ingress.md
@@ -17,15 +17,20 @@
 #
 -->
 
-# Proxy the httpbin service
+---
+
+id: samples-proxy-the-httpbin-service-with-ingress
+title: Proxy the httpbin service with Ingress
+
+---
 
 This document explains how apisix-ingress-controller guides Apache APISIX routes traffic to httpbin service correctly by the [Kubernetes Ingress](https://kubernetes.io/docs/concepts/services-networking/ingress/).
 
 ## Prerequisites
 
-* Prepare an available Kubernetes cluster in your workstation, we recommend you to use [Minikube](https://github.com/kubernetes/minikube).
-* [Install Apache APISIX in Kubernetes by Helm Chart](https://github.com/apache/apisix-helm-chart).
-* Install [apisix-ingress-controller](https://github.com/apache/apisix-ingress-controller/blob/master/docs/install.md).
+- Prepare an available Kubernetes cluster in your workstation, we recommend you to use [Minikube](https://github.com/kubernetes/minikube).
+- [Install Apache APISIX in Kubernetes by Helm Chart](https://github.com/apache/apisix-helm-chart).
+- Install [apisix-ingress-controller](https://github.com/apache/apisix-ingress-controller/blob/master/docs/install.md).
 
 ## Deploy httpbin service
 
diff --git a/docs/en/latest/samples/proxy-the-httpbin-service.md b/docs/en/latest/samples/proxy-the-httpbin-service.md
index a9e143b..572e00f 100644
--- a/docs/en/latest/samples/proxy-the-httpbin-service.md
+++ b/docs/en/latest/samples/proxy-the-httpbin-service.md
@@ -17,15 +17,20 @@
 #
 -->
 
-# Proxy the httpbin service
+---
+
+id: samples-proxy-the-httpbin-service
+title: Proxy the httpbin service
+
+---
 
 This document explains how apisix-ingress-controller guides Apache APISIX routes traffic to httpbin service correctly.
 
 ## Prerequisites
 
-* Prepare an available Kubernetes cluster in your workstation, we recommend you to use [Minikube](https://github.com/kubernetes/minikube).
-* [Install Apache APISIX in Kubernetes by Helm Chart](https://github.com/apache/apisix-helm-chart).
-* Install [apisix-ingress-controller](https://github.com/apache/apisix-ingress-controller/blob/master/docs/install.md).
+- Prepare an available Kubernetes cluster in your workstation, we recommend you to use [Minikube](https://github.com/kubernetes/minikube).
+- [Install Apache APISIX in Kubernetes by Helm Chart](https://github.com/apache/apisix-helm-chart).
+- Install [apisix-ingress-controller](https://github.com/apache/apisix-ingress-controller/blob/master/docs/install.md).
 
 ## Deploy httpbin service
 
@@ -50,13 +55,13 @@ metadata:
   name: httpserver-route
 spec:
   rules:
-  - host: local.httpbin.org
-    http:
-      paths:
-      - backend:
-          serviceName: httpbin
-          servicePort: 80
-        path: /*
+    - host: local.httpbin.org
+      http:
+        paths:
+          - backend:
+              serviceName: httpbin
+              servicePort: 80
+            path: /*
 ```
 
 The YAML snippet shows a simple `ApisixRoute` configuration, which tells Apache APISIX to route all requests with Host `local.httpbin.org` to the `httpbin` service.
diff --git a/docs/en/latest/usage.md b/docs/en/latest/usage.md
index 79a887f..8d63d34 100644
--- a/docs/en/latest/usage.md
+++ b/docs/en/latest/usage.md
@@ -17,7 +17,12 @@
 #
 -->
 
-# Usage of Ingress controller
+---
+
+id: usage
+title: Usage of Ingress controller
+
+---
 
 In this article, we will use ingress controller CRDs (CustomResourceDefinition) to define routing rules against the admin api of Apache APISIX.
 
@@ -48,11 +53,11 @@ metadata:
   name: foo
 spec:
   ports:
-  - port: 8080
-    loadbalancer:
-      type: chash
-      hashOn: header
-      key: hello
+    - port: 8080
+      loadbalancer:
+        type: chash
+        hashOn: header
+        key: hello
 ```
 
 2. Define Route with `ApisixRoute`
@@ -64,13 +69,13 @@ metadata:
   name: foo-route
 spec:
   rules:
-  - host: test.apisix.apache.org
-    http:
-      paths:
-      - backend:
-          serviceName: foo
-          servicePort: 8080
-        path: /hello*
+    - host: test.apisix.apache.org
+      http:
+        paths:
+          - backend:
+              serviceName: foo
+              servicePort: 8080
+            path: /hello*
 ```
 
 Tips: When defining `ApisixUpstream`, there is no need to define a specific pod ip list, the ingress controller will do service discovery based on namespace/name/port composite index.