Krakend 正在屏蔽客户端 IP 地址
Krakend is masking Client IP address
我有一个 python 程序,它使用 request.client.host headers 和快速 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)。
您可以将 no-op 与 krakenD 一起使用,它将请求转发到后端
https://www.krakend.io/docs/endpoints/no-op/
您也可以在 KrakenD 的 YAML 中检查参数转发配置
"headers_to_pass":[
"*"
]
如果您在 header 中获取客户端 IP,KrakenD 会将其转发到后端。
参考
{
"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"
]
}
]
}
我有一个 python 程序,它使用 request.client.host headers 和快速 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)。
您可以将 no-op 与 krakenD 一起使用,它将请求转发到后端
https://www.krakend.io/docs/endpoints/no-op/
您也可以在 KrakenD 的 YAML 中检查参数转发配置
"headers_to_pass":[
"*"
]
如果您在 header 中获取客户端 IP,KrakenD 会将其转发到后端。
参考
{
"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"
]
}
]
}