首页 > 解决方案 > 如何使用 istio 入口网关进行地理 ip 黑名单?

问题描述

我在阿里云使用 Kubernetes 服务,kubernetes 服务器版本是v1.14.8-aliyun.1而 istio 版本是1.2.7

从这个 istio 官方教程(https://istio.io/docs/tasks/policy-enforcement/denial-and-list/)中,我学会了如何阻止来自 istio 入口网关的单个 ip。我在 istio-system 命名空间中应用了这些规则、实例和处理程序,并且我的公共 ip 被成功阻止。

然后我尝试使用类似的概念来进行地理 ip 阻塞。首先,我从MaxMind提供的 GeoLite2 数据库获取国家 IP 列表,然后将这些 IP 解析为多个处理程序文件(每个文件 3000 个 ip 列表,因为 kubernetes 中存在资源大小限制)。最终假设我想阻止来自美国的 IP,我将从 25MB US-IP.txt 生成大约 500 个处理程序文件。现在当我将这些资源应用到 kubernetes 中时,当我观察Istio Mixer日志时,我可以看到以下错误:

Error receiving MCP response: rpc error: code = ResourceExhausted desc = grpc: received message larger than max (4623689 vs. 4194304)

我尝试将Istio Mixer MaxMessageSize设置为 30MB,但仍然出现此错误。看起来这 4MB 是 golang grpc 库的限制。

谁能给我一个想法,如何使用 istio 入口网关进行地理 IP 阻塞?重现此问题的步骤包含在https://github.com/heylong6551/istio-issue中。

提前致谢。

标签: kubernetesistio

解决方案


推荐阅读