Kong DBless模式执行deck sync报错无法创建services实体问题
故障原因
- DBless模式下的Kong不支持通过Admin API动态逐实体增删改服务、路由这类配置对象:该模式下所有配置默认在Kong启动时从指定的声明式配置文件全量加载,运行阶段Admin API仅开放配置查询、全量替换整份声明式配置的接口,禁止单条创建/更新/删除实体的操作。你直接执行无参数的
deck sync时,deck默认以数据库模式的逻辑逐次调用单实体创建接口,就会触发405报错。 - 你编写的声明式配置文件存在YAML缩进错误,services数组下的host、name等字段、routes数组下的字段缩进层级不对,即便解决了同步逻辑问题,配置也会因YAML解析失败无法加载。
解决方法
- 先修正声明式配置文件的缩进问题,修正后的合法配置如下:
_format_version: "1.1" services: - host: mockbin.org name: example_service port: 80 protocol: http routes: - name: mocking paths: - /mock strip_path: true
- 选择以下任意一种方式让配置生效:
- 方式一(适配你当前的kong.conf配置):保存修正后的配置文件,直接重启Kong服务。Kong启动时会自动加载你在kong.conf中指定路径的声明式配置,启动完成后服务和路由即可正常生效,无需额外执行deck同步命令。
- 方式二(不重启服务通过deck同步):执行deck同步命令时追加
--db-mode off参数,显式告知deck当前运行的是DBless模式的Kong,deck会自动切换为全量配置推送逻辑,而非逐实体调用创建接口,执行命令如下:
注意:该方式推送的配置会全量覆盖Kong当前运行时的所有配置,不会做增量合并。deck sync --db-mode off -s /temp/kong/kong.yml
内容的提问来源于stack exchange,提问作者Jahanzaib
相关产品推荐
相关产品推荐

