gxthrj opened a new issue #3:
URL: https://github.com/apache/apisix-control-plane/issues/3


   ## Currently, 4 types are defined, namely
   1.Gateway
   2.Traffic distribution rules
   3.Define the target service
   4.Plug-in extension
   
   ### Gateway
   For edge traffic, extract the host separately and define a Gateway type
   
   ```yaml
   kind:Gateway
   name: baidu-gw
   servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
      - "a.domain.com"
      - "b.domain.com"
   ```
   |  object/field   | describition |
   |  ----  | ----  |
   | Gateway  | the type for Edge traffic  |
   | Gateway.servers  | Define edge traffic service list  |
   | Gateway.servers.port  | the port for service  |
   | Gateway.servers.port.protocol  | Specify protocol  |
   | Gateway.servers.hosts  | List of domain names that a certain service can 
accept  |
   
   ### Define traffic distribution rules
   
   ```yaml
   kind: Rule
   name: xxx-rules
   hosts:
   - "domain.com"
   gateways:
   - baidu-gw
   http:
   - route:
    - destination:
        port: 28002
        host: baidu-server
        subset: baidu-v1
        weight: 10
    label:
       app: baidu
       version: v1
     match: 
     - headers:
        product_id:
          exact: v1
   - route:
     - destination:
          port: 28002
          host: baidu-server
          subset: v2
     label:
       app: baidu
       version: v2
   
   ```
   |  object/field   | describition |
   |  ----  | ----  |
   |  Rule  | the rule type for traffic |
   |  Rule.hosts  | Specify the list of accepted hosts |
   |  Rule.gateways  | Specify which gateway it belongs to, receive traffic 
from the edge gateway |
   |  Rule.http  | Specify the HTTP protocol (similar to other protocols) |
   |  Rule.http.route  | define route|
   |  Rule.http.match  | Conditions for hitting the route|
   |  Rule.http.route.destination  | Target service definition|
   
   ### Define the target service
   
   ```yaml
   kind: destinations
   name: baidu-dest
   host: baidu-server
   subsets: 
   - name: baidu-v1 
     ips:
     - 127.0.0.1
     - 127.0.0.2
   - name: v2
     selector:
       labels:
         tag: v2
   
   ```
   |  object/field   | describition |
   |  ----  | ----  |
   |  destinations  | Target service |
   | destinations.host | Target service internal host |
   | destinations.subsets | Target service collection | 
   
   ### Plug-in extension
   The logic of the plugin itself is not defined here, only known plugins will 
be referenced here
   
   ```yaml
   kind:Plugin 
   selector:     
     labels:
        app: baidu
   sort:
   - name: limit-count
     conf:
         max:100
   - name: prometheus
     conf:
        ...schema..
   
   ```
   
   ### A complete demo
   1. Use APISIX Admin API
   ```shell
   curl -XPUT http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: 
edd1c9f034335f136f87ad84b625c8f1' -d '
   {
       "desc": "test_route",
       "uris": [
           "/*"
       ],
       vars:[
           ["arg_name", "==", "json"],
           ["arg_age", ">", "18"]
       ],
       "hosts": [
           "baidu.com"
       ],
       "upstream": {
           "type": "roundrobin",
           "nodes": {
               "127.0.0.1:8080": 10
           },
           "timeout": {
               "connect": 6000,
               "send": 6000,
               "read": 6000
           },
           "enable_websocket": false
       },
       "plugins":{
        "prometheus":{},
        "proxy-rewrite":{
                "uri": "/test/home.html",
               "scheme": "http",
               "host": "baidu.com",
               "headers": {
                   "X-Api-Version": "v1",
                   "X-Api-Engine": "apisix",
                   "X-Api-useless": ""
               }
        }
       }
   }'
   
   ```
   2. Use YAML
   ```yaml
   kind:Gateway
   name: baidu-gw
   servers:
    - port:
        number: 80
        name: http
        protocol: HTTP
      hosts:
      - "baidu.com"
   
   -----------------
   
   kind: Rule
   name: baidu-rules
   hosts:
   - "baidu.com"
   gateways:
   - baidu-gw
   http:
   - route:
     - destination:
          port: 8080
          host: baidu-server
          subset: baidu-v1
       label:
         app: baidu
         version: v1
     match: 
     - args:
        name:
          exact: "json"
        age:
          Greater: 18
     - uri:
         prefix: "/"
   -------------------
   
   kind: destinations
   name: baidu-dest
   host: baidu-server
   subsets: 
   - name: baidu-v1 
     ips:
     - 127.0.0.1
   
   -------------------
   
   kind:Plugin 
   selector:     
     labels:
        app: baidu
   sort:
   - name: proxy-rewrite
     conf:
       uri: "/test/home.html"
       scheme: "http"
       host: "baidu.com"
       headers: 
         X-Api-Version: "v1"
         X-Api-Engine: "apisix"
         X-Api-useless: ""
   - name: prometheus
   
   ```


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to