Kong DB-less(1)
前言
Kong 推出1.1版本,带来了声明式配置(Declarative Configuration )与无数据库(DB-less Mode)部署。下面是1.1版本日志链接:
Kong 1.1 Released with Declarative Configuration and DB-less Mode!
db-less模式不兼容oauth2,在一般的工作中,token的更改都会保存到数据库里面。
Not Compatible
oauth2 - For its regular work, the plugin needs to both generate and delete tokens, and commit those changes to the database, which is not compatible with DB-less.
db-less模式对一些kong的插件是不兼容的哈,部分插件是需要中心化数据库或者动态创建实例。
Plugin Compatibility
Not all Kong plugins are compatible with DB-less mode, since some of them by design require a central database coordination and/or dynamic creation of entities.
声明性配置是db-less模式下唯一的配置实例的方法。因此原本的CRUD操作的端点在Admin API在这个模式下只能进行读操作。像对/services或/olugins进行POST,PATCH,PUT或DELETE这些操作,都将会返回HTTP 405 Not Allowed,而GET操作就不受影响。
因为网上很多部署数据库模式的,所以这一篇我只讲使用Docker部署DB-less模式
Docker Installation
正文
启动
- 先创建一个docker network,这一步其实不是必须的步骤,这样做方便以防你未来有别的需求,比如使用插件
docker network create kong-net
- 创建专门的卷(volume)
docker volume create kong-vol
docker volume inspect kong-vol
命令执行之后会返回类似下面的结果:
[
{
"CreatedAt": "2019-07-25T12:40:09Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/kong-vol/_data",
"Name": "kong-vol",
"Options": {},
"Scope": "local"
}
]
- 配置kong.yml ,并把这个文件保存到 我们更改刚刚建立的卷_data目录下
/var/lib/docker/volumes/kong-vol/_data
_format_version: "1.1"
services:
- name: my-service
url: https://example.com
plugins:
- name: key-auth
routes:
- name: my-route
paths:
- /
consumers:
- username: my-user
keyauth_credentials:
- key: my-key
- 按db-less模式启动kong,如果之前没有在doker pull kong的话,会自动pull最新的版本。
docker run -d --name kong \
--network=kong-net \
-v "kong-vol:/usr/local/kong/declarative" \
-e "KONG_DATABASE=off" \
-e "KONG_DECLARATIVE_CONFIG=/usr/local/kong/declarative/kong.yml" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
- --network=kong-net
- -v "kong-vol:/usr/local/kong/declarative":将容器的/usr/local/kong/declarative 映射到 本地目录/var/lib/docker/volumes/kong-vol/
- -e "KONG_DATABASE=off":表示使用db-less模式启动
- -p:端口映射
- 你可以如下操作确认是否成功启动
返回的信息包含kong.yml配置的实例,这里我是直接启动,没有配置kong.yml
curl -i http://localhost:8001/
返回服务列表
curl -i http://localhost:8001/services