Stand-alone mode

    这种方式比较适合两类用户:

    1. kubernetes(k8s):声明式 API 场景,通过全量 yaml 配置来动态更新修改路由规则。
    2. 不同配置中心:配置中心的实现有很多,比如 Consul 等,使用全量 yaml 做中间转换桥梁。

    APISIX 节点服务启动后会立刻加载 文件中的路由规则到内存,并且每间隔一定时间(默认 1 秒钟),都会尝试检测文件内容是否有更新,如果有更新则重新加载规则。

    注意:重新加载规则并更新时,均是内存热更新,不会有工作进程的替换过程,是个热更新过程。

    只有当 APISIX 的角色设置为 data plane 时,才能开启 Stand-alone 模式。通过设置 deployment.roledata_plane,设置 deployment.role_data_plane.config_provideryaml 即可启用 Stand-alone 模式。

    参考下面示例:

    所有的路由规则均存放在 conf/apisix.yaml 这一个文件中,APISIX 会以每秒(默认)频率检查文件是否有变化,如果有变化,则会检查文件末尾是否能找到 #END 结尾,找到后则重新加载文件更新到内存。

    1. routes:
    2. -
    3. uri: /hello
    4. upstream:
    5. nodes:
    6. "127.0.0.1:1980": 1
    7. type: roundrobin
    8. #END

    注意:如果 conf/apisix.yaml 末尾不能找到 #END,那么 APISIX 将不会加载这个文件规则到内存。

    配置 Router

    单个 Router:

    1. routes:
    2. -
    3. uri: /hello
    4. upstream:
    5. nodes:
    6. "127.0.0.1:1980": 1
    7. type: roundrobin
    8. #END

    多个 Router:

    1. routes:
    2. -
    3. uri: /hello
    4. upstream:
    5. nodes:
    6. type: roundrobin
    7. -
    8. uri: /hello2
    9. nodes:
    10. "127.0.0.1:1981": 1
    11. type: roundrobin
    12. #END

    配置 Router + Service

    1. routes:
    2. -
    3. uri: /hello
    4. upstream_id: 1
    5. upstreams:
    6. -
    7. id: 1
    8. nodes:
    9. "127.0.0.1:1980": 1
    10. type: roundrobin
    11. #END

    配置 Router + Service + Upstream

    1. routes:
    2. -
    3. uri: /hello
    4. service_id: 1
    5. services:
    6. -
    7. id: 1
    8. upstream_id: 2
    9. upstreams:
    10. -
    11. id: 2
    12. nodes:
    13. "127.0.0.1:1980": 1
    14. type: roundrobin
    15. #END

    配置 Plugins

    1. plugins:
    2. - name: ip-restriction
    3. - name: mqtt-proxy
    4. stream: true # stream 插件需要设置 stream 属性为 true
    5. #END

    配置 global rule

    1. global_rules:
    2. -
    3. id: 1
    4. plugins:
    5. response-rewrite:
    6. body: "hello\n"

    配置 consumer

    1. consumers:
    2. - username: jwt
    3. plugins:
    4. jwt-auth:
    5. key: user-key
    6. secret: my-secret-key
    1. upstreams:
    2. - id: 1
    3. nodes:
    4. "127.0.0.1:1980": 1
    5. type: roundrobin
    6. routes:
    7. -
    8. uri: /hello
    9. upstream_id: 1
    10. plugins:
    11. http-logger:
    12. batch_max_size: 1
    13. uri: http://127.0.0.1:1980/log
    14. plugin_metadata:
    15. - id: http-logger # 注意 id 是插件名称
    16. log_format:
    17. remote_addr: "$remote_addr"

    配置 stream route