Kong的IP RESTRICTION就是IP控制插件,可以控制全局、服务、路由、消费方的IP地址,通过设置黑白名单,来限制访问的IP和IP段。IP或CIDR范围到白名单的逗号分隔列表。必须在白名单或黑名单之间至少指定一个。 1、 如果配置了白名单,则白名单之外的IP都不允许访问。 2、 如果配置了黑名单,则黑名单之外的IP都允许访问。 3、 如果同时配置了黑白名单,则只允许白名单的访问。 我们将该插件配置到test-service服务上,并设置限制黑名单的IP地址为调用服务的IP。
上图我们看一下,业务服务test-service配置插件的先后执行顺序我们如何知道呢?首先从调用上来验证一下: 1、 调用服务时,首先出现的是认证,那么证明basic-auth在IP RESTRICTION和acl之前执行 :
2、 输入用户名密码之后,出现:
证明IP RESTRICTION是第二个起作用的。 3、那么针对上面的调用,如果我们改以下IP RESTRICTION限制的IP地址,让IP认证通过,则会出现:
因为使用的BASIC-AUTH用户不在ACL的群组中,所以ACL插件在最后起了作用,控制了服务的消费。如果换成在ACL群组中的其他用户认证,则可获得结果:
那么如何知道所有插件的执行先后顺序呢,最根源的办法还是阅读源码,我们从每个插件得handle.lua中查看可以得到: ACLHandler.PRIORITY = 950 IpRestrictionHandler.PRIORITY = 990 BasicAuthHandler.PRIORITY = 1001 PRIORITY值越大越先执行,从源码中可以看到插件的先后顺序是 BasicAuth(认证)-》ipRestriction (IP控制)-> ACL(访问控制) 因此我们得到结论,由PRIORITY来决定插件运行的先后顺序的规则是无问题的。
|