跳到主要内容

准入策略

Admission Policy 是 route 级准入策略插件。当前版本只实现 IP 黑白名单,用于判断请求是否允许进入某个 route;它不进一步限定 route 内部的 upstream、model 或其它候选资源。

插件运行在 Inbound 阶段,使用 Remote Addr 解析后的客户端 IP。被拒绝的请求会直接返回 403 Forbidden,不会继续进入认证、入口限流、上游选择或转发链路。

启用条件

插件只有在当前 route 的 plugin_config.admission_policy.rules 非空时才会进入请求链路。不需要静态全局开关。

路由级配置通过 RoutePluginConfig 管理接口写入,plugin_key 固定为 admission_policyconfig 为以下结构的 JSON ProtoJSON 表示:

IP 规则

rules 中的每条规则使用 oneof,只能配置一种名单:

  • ip_blacklist:请求 IP 不在列表中才满足该规则
  • ip_whitelist:请求 IP 在列表中才满足该规则

多条规则按 AND 组合,必须全部满足才允许请求继续。

名单值支持:

  • 单 IP,例如 203.0.113.8
  • CIDR,例如 203.0.113.0/242001:db8::/32

不支持 IP 段写法,例如 192.0.2.1-192.0.2.10

配置示例

只配置黑名单:

{
"admission_policy": {
"rules": [
{
"ip_blacklist": {
"values": ["10.0.0.0/8", "192.0.2.10"]
}
}
]
}
}

只配置白名单:

{
"admission_policy": {
"rules": [
{
"ip_whitelist": {
"values": ["203.0.113.0/24"]
}
}
]
}
}

同时配置黑白名单时,请求 IP 必须同时“不在黑名单内”且“在白名单内”:

{
"admission_policy": {
"rules": [
{
"ip_blacklist": {
"values": ["203.0.113.66"]
}
},
{
"ip_whitelist": {
"values": ["203.0.113.0/24"]
}
}
]
}
}

请求日志

插件会向 request_log.ext_fields.admission_policy 写入本次准入决策:

示例:

{
"admission_policy": {
"effect_action": "block",
"remote_addr": "203.0.113.66",
"matched_rule_index": 0,
"matched_rule_type": "blacklist",
"reason": "blacklist_match"
}
}

remote_addr 为空、<not_found><invalid> 或无法解析为合法 IP 时,请求会被拒绝,reasoninvalid_remote_addr