express - 如何检查 pod1 中的 http 请求是否来自 kubernetes 集群内的 pod2?
问题描述
我想在基于客户端 IP 的快速服务器中使用速率限制器。假设它Pod1
在 Kubernetes 集群中运行。在我的快速服务器中,当请求来自 kubernetes 集群外部时,我检查x-forwarded-for
显示正确公共客户端的标头。IP
我还有一个运行在Pod2
. 当请求来自 Php symfony 服务器时,x-forwarded-for
标头包含.IP
Pod2
我的问题是,如果 http 请求来自 Php symfony 服务器(Pod2),我如何在快速服务器(Pod1)中验证。
编辑:在我的快递服务器中,我使用 npmjs.com/package/express-rate-limit 包和 redis-store 来限制请求。
解决方案
据我了解,您希望对在 POD-1 内运行的服务的流量进行速率限制。
有多种方法可以实现速率限制,但在您的场景中,如果我们看到 POD 2 会将请求发送到内部网络上的 POD-1。您不能使用内部 IP 或集群 IP来限制速率。
要在内部网络上实现速率限制,您可以使用 envoy 代理或服务网格(如果您正在使用它)。
在 istio 中有两种使用 envoy 代理全局和本地的速率限制。
我建议如果您实施实例级速率限制,您可以使用 envoy local 来使用它。
https://istio.io/latest/docs/tasks/policy-enforcement/rate-limit/#local-rate-limit
但是,总有其他方法可以编写代码,使用 Kubernetes API 并基于过滤计数来检查服务或 POD-2 IP 的速率限制。如果您重新部署服务或部署 sprint 版本,您的 POD IP 可能会发生变化。
上面的解决方案不是那么好,因为它不是不可知论者你不能将你的工作负载移出 Kubernetes,而不必重新设计你的应用程序或完全重新考虑你的基础设施。
如果它适合您的场景,您可以通过将每个请求中的自定义标头从 POD2 发送到 POD1 来使用istio速率限制。您可以在自定义标头中添加任何值,并在此基础上进行速率限制。
不要编写添加自定义标头的代码,您也可以使用 istio 来完成。示例:使用 Istio 的 (1.6.0) envoy lua 过滤器添加自定义响应头
基于键值标头的速率限制示例:https ://domgalski-j.medium.com/istio-rate-limits-for-egress-traffic-8697df490f68
推荐阅读
- python - 从 mdf (python, asammdf) 读取时时间戳未对齐
- collision - 在旋转过程中,身体并排撞到另外两个(错误)
- c# - 为什么我的更新查询在带有 sql server 的 c# 中不起作用?
- openshift - 是否有任何可用于 Grafana 的自定义视图或视图的任何编辑器?
- python - Python按时间间隔执行逻辑
- docker - 如何连接到 Kubernetes Pod 网络?
- python-3.x - 使用 xarray 插入 dataArray 缺失数据
- c++ - 如何在 C++ 中整理树数据结构的前向引用
- reactjs - 如何在 React 中映射这些数据?
- angular - 注入的服务未定义