[英]RemoteIpAddress in K8S Cluster is always the ingress IP
我有一個在本地裸機 Kubernetes 集群中運行的 ASP.NET Core webapi。 沒有外部負載平衡器,我使用的是 NGINX 入口。
我想獲取用戶的 IP 地址,並在 .NET 代碼中使用HttpContext.Connection.RemoteIpAddress
。
不幸的是,這是獲取 nginx 入口的 IP 地址(可能是給定命名空間的控制器)...
::ffff:10.244.1.85
進行反向 DNS 查找可將其解析為...
10-244-1-85.ingress-nginx.ingress-nginx.svc.cluster.local
經過一點谷歌搜索后,我嘗試將externalTrafficPolicy: "Local"
添加到我的服務定義中,但這並沒有什么區別。
這看起來應該是一件非常微不足道的事情,而且是一個非常普遍的要求。 有任何想法嗎?
首先嘗試從標頭X-Forwarded-For
獲取 ip,如下所示,如果它為空,則可以使用 Connection.RemoteIpAddress。 還要確保您的 nginx configmap 根據屏幕截圖啟用了代理:
var ip = IPAddress.Parse(_accessor.ActionContext.HttpContext.Request.Headers["X-Forwarded-For"].FirstOrDefault());
if (string.IsNullOrEmpty(ip.ToString()))
{
ip = _accessor.ActionContext.HttpContext.Connection.RemoteIpAddress.MapToIPv4();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.