准入策略
Admission Policy 是 route 级准入策略插件。当前版本只实现 IP 黑白名单,用于判断请求是否允许进入某个 route;它不进一步限定 route 内部的 upstream、model 或其它候选资源。
插件运行在 Inbound 阶段,使用 Remote Addr 解析后的客户端 IP。被拒绝的请求会直接返回 403 Forbidden,不会继续进入认证、入口限流、上游选择或转发链路。
启用条件
插件只有在当前 route 的 plugin_config.admission_policy.rules 非空时才会进入请求链路。不需要静态全局开关。
路由级配置通过 RoutePluginConfig 管理接口写入,plugin_key 固定为 admission_policy,config 为以下结构的 JSON ProtoJSON 表示:
IP 规则
rules 中的每条规则使用 oneof,只能配置一种名单:
ip_blacklist:请求 IP 不在列表中才满足该规则ip_whitelist:请求 IP 在列表中才满足该规则
多条规则按 AND 组合,必须全部满足才允许请求继续。
名单值支持:
- 单 IP,例如
203.0.113.8 - CIDR,例如
203.0.113.0/24或2001: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 时,请求会被拒绝,reason 为 invalid_remote_addr。