【问题标题】:How to check if http request in pod1 came from pod2 inside kubernetes cluster?如何检查 pod1 中的 http 请求是否来自 kubernetes 集群内的 pod2?
【发布时间】:2021-05-29 09:14:35
【问题描述】:

我想根据客户端 IP 在我的快速服务器中使用速率限制器。假设它在 kubernetes 集群中的 Pod1 中运行。在我的快速服务器中,我检查 x-forwarded-for 标头,当请求来自 kubernetes 集群外部时,该标头显示客户端的正确公共 IP

我还有一个运行在Pod2 中的Php symfony 服务器。当请求来自 Php symfony 服务器时,x-forwarded-for 标头包含 IPIP

我的问题是,如果 http 请求来自 Php symfony 服务器(Pod2),我如何在 express 服务器(Pod1)中验证。

编辑: 在我的 express 服务器中,我使用 npmjs.com/package/express-rate-limit 包和 redis-store 来限制请求。

【问题讨论】:

    标签: express kubernetes google-kubernetes-engine kubernetes-pod


    【解决方案1】:

    据我了解,您希望对在 POD-1 内运行的服务的流量进行速率限制。

    有多种方法可以实现速率限制,但在您的场景中,如果我们看到 POD 2 会将请求发送到内部网络上的 POD-1。您不能使用内部 IP 或集群 IP 来限制速率。

    要在内部网络上实现速率限制,您可以使用 envoy 代理或服务网格(如果您正在使用它)。

    在 istio 中有两种使用 envoy 代理全局和本地的速率限制。

    https://istio.io/latest/docs/tasks/policy-enforcement/rate-limit/#:~:text=Global%20rate%20limiting%20uses%20a,the%20global%20rate%20limiting%20service.

    我建议如果您实施实例级速率限制,您可以使用 envoy local 来使用它。

    https://istio.io/latest/docs/tasks/policy-enforcement/rate-limit/#local-rate-limit

    但是,您总是可以编写代码来检查服务或 POD-2 IP,使用 Kubernetes API 并根据过滤计数限制速率。如果您重新部署服务或部署 sprint 版本,您的 POD IP 可能会发生变化。

    上述解决方案不是很好,因为它不是不可知论者。如果不重新设计应用程序或完全重新考虑基础架构,您就无法将工作负载移出 Kubernetes。

    如果适合您的场景,您可以通过将每个请求中的自定义标头从 POD2 发送到 POD1 来使用 istio 速率限制。您可以在自定义标头中添加任何值,并在此基础上进行速率限制。

    不要编写添加自定义标头的代码,您也可以使用 istio.例如:Adding custom response headers using Istio's (1.6.0) envoy lua filter

    基于键值标头的速率限制示例:https://domagalski-j.medium.com/istio-rate-limits-for-egress-traffic-8697df490f68

    【讨论】:

    • 在我的快递服务器中,我使用 npmjs.com/package/express-rate-limit 包和 redis-store 来限制请求。它还提供了跳过某些请求的选项。在那里,我检查 x-forwarded-for 标头中的 ip 是否与允许列表中的一个匹配。我想将 Pod2 IP 加入白名单。但是正如您指出的那样,如果再次部署 pod 等,它会发生变化。
    • 您可以注入自定义标头并检查其值而不是 POD IP。如果您不想编写额外的附加代码,您可以使用上面提到的 istio 示例来添加标头。
    猜你喜欢
    • 1970-01-01
    • 2012-01-28
    • 2021-10-11
    • 2021-09-06
    • 1970-01-01
    • 2023-02-02
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多