簡體   English   中英

K8S 集群中的 RemoteIpAddress 始終是入口 IP

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM