Krakend 正在屏蔽客户端 IP 地址

Posted

技术标签:

【中文标题】Krakend 正在屏蔽客户端 IP 地址【英文标题】:Krakend is masking Client IP address 【发布时间】:2021-11-26 17:00:31 【问题描述】:

我有一个 python 程序,它使用 request.client.host 标头和快速 API 获取客户端 IP。 该程序在 kubernetes pod(ip-pod) 上运行。 我有另一个使用 KrakenD 实现的网关 API,它在 kubernetes 集群中的另一个 pod 上运行。 两者(ip-pod 和 KrakenD)的 Kubernetes yaml 文件都具有 externalTrafficPolicy: Local 属性 我无法检索用户的真实 IP,这可能是因为 KrakenD 不允许真实 IP 访问 ip-pod。 我已经通过使用type: LoadBalancer 将 ip-pod 暴露在互联网上来测试该程序,这样它就可以提供正确的客户端 IP。但是当我使用 KrakenD 网关时,IP 是不同的(私有 IP)。

【问题讨论】:

【参考方案1】:

您可以将 no-op 与 krakenD 一起使用,它将请求转发到后端

https://www.krakend.io/docs/endpoints/no-op/

您也可以在 KrakenD 的 YAML 中检查参数转发配置

"headers_to_pass":[  
      "*"
]

如果您在标头中获取客户端 IP,KrakenD 会将其转发到后端。

https://www.krakend.io/docs/endpoints/parameter-forwarding/#sending-all-client-headers-to-the-backends

参考


              "endpoint": "/api/v1/uid/user",
              "method": "GET",
              "headers_to_pass": [ "*" ],
              "querystring_params": [ "*" ],
              "output_encoding": "no-op",
              "concurrent_calls": 1,
              "backend": [
                  
                      "url_pattern": "/api/uid/user",
                      "encoding": "no-op",
                      "host": [
                          "http://IP:Port"
                      ]
                  
              ]
          

【讨论】:

谢谢。如何查看 headers_to_pass 的输出?我使用了 X-Forwarded-For 标头,以便源 IP 保持不变。 in backedn writ 简单的测试应用程序或服务,它将将请求数据打印到控制台,您可以启动 pod 并使用它来检查标题是否最终通过 我不是 100% 确定,但在这里我的 docker 注册表用户和图像 URI 可能有助于打印数据。 hub.docker.com/repository/docker/harshmanvar/http-https-echo 使用 master one 或使用这个 github repo 来构建您的自定义一个:github.com/harsh4870/docker-http-https-echo 直接使用这个 docker :mendhak/http-https-echo,在我的 docker 镜像中,可能会有一些变化。

以上是关于Krakend 正在屏蔽客户端 IP 地址的主要内容,如果未能解决你的问题,请参考以下文章

为啥ip地址访问不了,localhost可以

公司ERP服务器老是出现IP地址冲突,导致客户机无法连接服务器!问题如下:

双路由双核心网络项目

php如何获取通过CURL或file_get_contents抓取者的IP地址

以太网屏蔽arduino上的FTP客户端

在 Flask 中使用开发服务器时获取客户端 IP 地址