1

我有一个 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。我已经通过使用将 ip-pod 暴露在互联网上来测试该程序type: LoadBalancer,这样它就可以提供正确的客户端 IP。但是当我使用 KrakenD 网关时,IP 是不同的(私有 IP)。

4

1 回答 1

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"
                      ]
                  }
              ]
          }
于 2021-10-06T13:58:58.127 回答