Kong配置下如何将指定服务从全局认证插件中排除
Kong全局认证插件排除指定服务的可行方法
以下是几种在Kong中实现全局认证插件排除部分服务的方案,根据你的场景选择即可:
方法1:使用条件插件(Conditional Plugins)过滤服务
Kong支持通过条件表达式控制全局插件的执行范围,你可以给已有的全局认证插件添加排除规则,让插件仅对非目标服务生效。
以key-auth插件为例,编辑全局插件的配置,添加condition字段指定排除的服务ID:
{ "name": "key-auth", "scope": "global", "condition": { "not": { "service": { "id": ["service-uuid-1", "service-uuid-2"] // 替换为你要排除的服务ID列表 } } }, "config": { "key_names": ["apikey"], // 原认证配置保留 "hide_credentials": true } }
这种方式无需修改现有服务/路由结构,仅需维护排除的服务ID列表,适合需要排除多个服务的场景。
方法2:移除全局插件,批量给需要认证的服务添加插件
如果需要排除的服务数量较少(比如40个里仅排除几个),可以先删除全局认证插件,再批量给需要认证的服务单独添加插件:
# 假设Kong Admin API地址为http://kong-admin:8001 KONG_ADMIN="http://kong-admin:8001" # 定义需要排除的服务ID EXCLUDED_SERVICES=("service-id-1" "service-id-2") # 获取所有服务ID并批量添加插件 for SERVICE_ID in $(curl -s $KONG_ADMIN/services | jq -r '.data[].id'); do if [[ ! " ${EXCLUDED_SERVICES[@]} " =~ " ${SERVICE_ID} " ]]; then curl -X POST $KONG_ADMIN/services/$SERVICE_ID/plugins \ -d name=key-auth \ -d config.key_names=apikey \ -d config.hide_credentials=true fi done
这种方式逻辑更直观,每个服务的认证状态清晰可控。
方法3:路由级别禁用认证插件
Kong的插件优先级遵循:路由级 > 服务级 > 全局级。你可以给需要排除的服务对应的路由添加一个禁用状态的同类型认证插件,覆盖全局插件的执行:
# 给目标路由添加禁用的key-auth插件 curl -X POST $KONG_ADMIN/routes/<target-route-id>/plugins \ -d name=key-auth \ -d enabled=false
注意:如果一个服务对应多个路由,需要给每个路由都执行此操作,适合服务路由数量较少的场景。
内容的提问来源于stack exchange,提问作者GAURAV
相关产品推荐
相关产品推荐

