Stand-alone mode
这种方式比较适合两类用户:
- kubernetes(k8s):声明式 API 场景,通过全量 yaml 配置来动态更新修改路由规则。
- 不同配置中心:配置中心的实现有很多,比如 Consul 等,使用全量 yaml 做中间转换桥梁。
APISIX 节点服务启动后会立刻加载 文件中的路由规则到内存,并且每间隔一定时间(默认 1 秒钟),都会尝试检测文件内容是否有更新,如果有更新则重新加载规则。
注意:重新加载规则并更新时,均是内存热更新,不会有工作进程的替换过程,是个热更新过程。
只有当 APISIX 的角色设置为 data plane 时,才能开启 Stand-alone 模式。通过设置 deployment.role
为 data_plane
,设置 deployment.role_data_plane.config_provider
为 yaml
即可启用 Stand-alone 模式。
参考下面示例:
所有的路由规则均存放在 conf/apisix.yaml
这一个文件中,APISIX 会以每秒(默认)频率检查文件是否有变化,如果有变化,则会检查文件末尾是否能找到 #END
结尾,找到后则重新加载文件更新到内存。
routes:
-
uri: /hello
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
注意:如果 conf/apisix.yaml
末尾不能找到 #END
,那么 APISIX 将不会加载这个文件规则到内存。
配置 Router
单个 Router:
routes:
-
uri: /hello
upstream:
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
多个 Router:
routes:
-
uri: /hello
upstream:
nodes:
type: roundrobin
-
uri: /hello2
nodes:
"127.0.0.1:1981": 1
type: roundrobin
#END
配置 Router + Service
routes:
-
uri: /hello
upstream_id: 1
upstreams:
-
id: 1
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
配置 Router + Service + Upstream
routes:
-
uri: /hello
service_id: 1
services:
-
id: 1
upstream_id: 2
upstreams:
-
id: 2
nodes:
"127.0.0.1:1980": 1
type: roundrobin
#END
配置 Plugins
plugins:
- name: ip-restriction
- name: mqtt-proxy
stream: true # stream 插件需要设置 stream 属性为 true
#END
配置 global rule
global_rules:
-
id: 1
plugins:
response-rewrite:
body: "hello\n"
配置 consumer
consumers:
- username: jwt
plugins:
jwt-auth:
key: user-key
secret: my-secret-key
upstreams:
- id: 1
nodes:
"127.0.0.1:1980": 1
type: roundrobin
routes:
-
uri: /hello
upstream_id: 1
plugins:
http-logger:
batch_max_size: 1
uri: http://127.0.0.1:1980/log
plugin_metadata:
- id: http-logger # 注意 id 是插件名称
log_format:
remote_addr: "$remote_addr"