Kong自定义插件无法针对特定服务生效的原因咨询
针对你遇到的kongbodyinspection插件仅全局生效、服务级配置无效的问题,常见原因如下:
插件未声明支持服务级挂载
自定义Kong插件的schema.lua文件需要明确指定允许挂载的实体类型。如果你的插件schema中没有在entity_checks里添加对service的支持,Kong会拒绝将插件绑定到服务节点下。检查schema配置,确保包含类似代码:entity_checks = { { only_one_of = { "service", "route", "consumer", "global" } }, }同时确认
protocols字段包含了服务使用的协议(比如http、https)。插件代码逻辑未适配服务级上下文
插件代码中如果硬编码了仅处理全局插件实例的逻辑,会导致服务级挂载时不执行核心逻辑。比如在处理请求时错误地只检查plugin.global属性,忽略了服务级的插件实例。检查插件的handler代码,确保逻辑能正确识别服务级挂载的上下文。配置加载未生效
使用kong config db_import kong.yml导入配置后,需要重启Kong服务才能让服务级插件配置生效。如果仅导入配置未重启,Kong不会加载新的服务级插件绑定关系。另外可以通过kong service plugins list <service-name>命令,验证插件是否真的关联到了目标服务。请求未匹配到目标服务路由
确认测试时的请求路径确实匹配到了b_and_h_route2的/path2路径。如果请求路径不匹配,服务级插件不会触发,而全局插件会对所有请求生效,这会让你误以为服务级配置无效。可以通过Kong的访问日志,确认请求是否路由到了目标服务。
内容的提问来源于stack exchange,提问作者Milinda Kasun

