K8S中應用無法獲取用戶真實ip問題排查

現象

領導反饋生產環境的用戶ip有問題。登陸到這個頁面,發現是所有的用戶ip都是172.30.94.97,這是個內部網絡ip.

排查過程

1 登陸到應用前端nginx, 查看nginx的請求日志

172.30.94.97 - - [17/Jul/2024:02:02:54 +0000] "POST /***/notify/my-page HTTP/1.1" 200 182 "/report/home?type=2&id=2612&lang=zh_CN" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36" "10.72.44.200"
172.30.94.97 - - [17/Jul/2024:02:02:54 +0000] "POST /***/notify/my-page HTTP/1.1" 200 182 "/home?lang=zh_CN" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" "10.49.140.102"
172.30.94.97 - - [17/Jul/2024:02:02:56 +0000] "POST /***/msg/notify/my-page HTTP/1.1" 200 59 "/user/message/info?lang=zh_CN" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36" "10.13.52.192"

發現第一列展示的ip正好是我們的Java應用代碼拿到的iP,而真實的ip展示在最后一列

2 查看nginx的日志輸出格式。第一列取的是remote_addr變量,說明這個變量是有問題的 。我們要取的是最后一列http_x_forwarded_for變量

log_format  main   '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';

3 查看Java代碼獲取客戶ip的邏輯。Java代碼從6個Header變量中依次找可以用的ip。

    public static String getClientIP(HttpServletRequest request, String... otherHeaderNames) {String[] headers = new String[]{"X-Forwarded-For", "X-Real-IP", "Proxy-Client-IP", "WL-Proxy-Client-IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR"};if (ArrayUtil.isNotEmpty(otherHeaderNames)) {headers = (String[])ArrayUtil.addAll(new String[][]{headers, otherHeaderNames});}return getClientIPByHeader(request, headers);} 

4 查看nginx傳遞過來了哪些Header變量。nginx傳遞過來了X-Real-IP和X-Forwarded-For,其中X-Real-IP取的是有問題的remote_addr,正好我們Java代碼取到的是這個變量。X-Forwarded-For沒有值。

location ~ ^/(admin-api|rpc-api)/ {client_max_body_size 32m;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_pass http://***:30001;
}

5 根據第二步的分析,將remote_addr修改為http_x_forwarded_for
6 重啟nginx,問題解決

K8S網絡拓撲

在這里插入圖片描述
所有的外部流量一定會通過一個ingress controller進入到K8S的內部。ingress controller的一個常見實現是Nginx,正好我們的k8s選擇的就是Nginx。也就是說我們的業務前端nginx前面還有一個nginx。所以我們的前端nginx的remote_addr拿到的是k8s入口ingress的內部ip地址。

總結

用戶請求經過兩層nginx轉發才到達后端java業務應用。remote_addr僅存儲上一個轉發節點的ip,所以我們的業務應用一直拿的是ingress的ip。http_x_forwarded_for存儲的是原始用戶的請求ip。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909115.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2.倒排索引

傳統數據庫mysql使用的是正向索引 詞條是不允許重復的,給詞條創建唯一索引,根據詞條查找的速度就很快了。

【Android Studio】新建項目及問題解決

新建項目 按照《Android 第一行代碼》中 1.3 小節的步驟創建項目。 注意:Minimum API Level 用于設置項目的最低兼容版本。Android 5.0 以上的系統已經占據超過了 99.9% 的 Android 市場份額,因此這里指定為 API 21: Android 5.0 即可。 問題解決 &…

SX1268低功耗sub-1g芯片支持lora和GFSK調制

SX1268 射頻收發器是長距離無線應用的理想設備,支持410-810MHZ。它專為長電池壽命而設計,僅消耗4.2 mA的主動接收電流。SX1268 可以使用高效的集成功率放大器在490 MHz傳輸高達 22 dBm 的信號。在 780 MHZ時,SX1268 在天線端口傳輸10dBm的信號…

C#高級:利用反射讓字符串決定調用哪個方法

一、反射的實現 using System; using System.Reflection; using System.Threading.Tasks;public class Calculator {public int Add(int a, int b){return a b;}public int Subtract(int a, int b){return a - b;}public int Multiply(int a, int b){return a * b;}public do…

圖像二分類任務推薦使用Sigmoid函數?

?圖像二分類任務中可以使用Softmax作為激活函數,但通常更推薦使用Sigmoid函數?。Softmax函數可以將多個類別的輸出轉換成概率分布,適合多分類任務。在二分類任務中,雖然可以使用Softmax,但它會生成兩個輸出值(每個類…

湖北理元理律師事務所:債務優化的法律邏輯與生活平衡術

在債務糾紛數量年均增長19%的背景下(最高人民法院2023年數據),專業法律服務機構的價值不僅在于解決糾紛,更在于重構債務人與生活的平衡關系。湖北理元理律師事務所的實踐顯示,科學的債務優化需同時滿足三個維度&#x…

window 顯示驅動開發-處理視頻幀

Microsoft Direct3D 運行時調用用戶模式顯示驅動程序的 VideoProcessBeginFrame 和 VideoProcessEndFrame 函數,以指示用戶模式顯示驅動程序可以處理視頻幀的這些函數調用之間的時間段。 在用戶模式顯示驅動程序可以處理任何視頻幀之前,Microsoft Direct…

基于 React Native for HarmonyOS5 的跨平臺組件庫開發指南,以及組件示例

基于 React Native for HarmonyOS5 的跨平臺組件庫開發,需融合分層架構設計、鴻蒙原生能力橋接及性能優化技術,核心指南如下: ?一、分層架構設計? 采用 ?模塊化分層結構?,隔離平臺差異邏輯: ├── common_har …

一站式了解單例模式

引言 這是設計模式專欄的第一篇文章,在這個專欄里面會講到我們在開發中經常使用的設計模式,我會用心將它們解析,然后講給你們聽,如果感興趣可以持續關注這個專欄?? 這次我們要講的是單例模式,這個在大廠面試中十分…

Java應用Flink CDC監聽MySQL數據變動內容輸出到控制臺

文章目錄 maven 依賴自定義數據變化處理器flink cdc監聽驗證 maven 依賴 <properties><flink.version>1.14.0</flink.version><flink-cdc.version>2.3.0</flink-cdc.version></properties><dependencies><!-- Flink dependencie…

獵板厚銅PCB工藝能力如何?

在電子產業向高功率、高集成化狂奔的今天&#xff0c;電路板早已不是沉默的配角。當5G基站、新能源汽車、工業電源等領域對電流承載、散熱效率提出嚴苛要求時&#xff0c;一塊能夠“扛得住大電流、耐得住高溫”的厚銅PCB&#xff0c;正成為決定產品性能的關鍵拼圖。而在這條賽道…

業務:資產管理功能

文章目錄 一、項目背景1.1概述1.2編寫目的 二、注意點說明三、頁面效果四、代碼AssetManagementControllerHwinfoAssetManagementHwinfoAssetManagementServiceHwinfoAssetManagementServiceImplHwinfoAssetManagementMapperHwinfoAssetManagementMapper.xmlSfpAssetManagement…

【MySQL進階】MySQL程序

目錄 一.有哪些MySQL程序 二. mysqld —— MySQL服務器 三.mysql——MySQL客戶端 3.1.連接mysql客?端 3.2.mysql客戶端選項 3.2.1.mysql常用選項 3.2.2.在命令?中使?選項 3.3.MySQL 選項&#xff08;配置&#xff09;文件 3.3.1.Linux環境下默認配置文件的路徑 3.…

Docker 運行 Kafka 帶 SASL 認證教程

Docker 運行 Kafka 帶 SASL 認證教程 Docker 運行 Kafka 帶 SASL 認證教程一、說明二、環境準備三、編寫 Docker Compose 和 jaas文件docker-compose.yml代碼說明&#xff1a;server_jaas.conf 四、啟動服務五、驗證服務六、連接kafka服務七、總結 Docker 運行 Kafka 帶 SASL 認…

??CentOS 7.9?? 上配置 ??Fail2ban 自動封禁 IP?? 的完整步驟,整合了多篇權威資料的最佳實踐

&#x1f527; ??一、安裝 Fail2ban?? ??啟用 EPEL 倉庫?? yum install epel-release -y ??安裝 Fail2ban?? yum install fail2ban -y ??啟動并設置開機自啟?? systemctl start fail2ban systemctl enable fail2ban ?? 注意&#xff1a;CentOS 7.9 默認 Py…

損壞的RAID5 第十六次CCF-CSP計算機軟件能力認證

純大模擬 提前打好板子 我只通過4個用例點 然后就超時了。 #include<iostream> #include<cstring> #include<algorithm> #include<unordered_map> #include<bits/stdc.h> using namespace std; int n, s, l; unordered_map<int, string>…

Kafka Topic中的數據在消費后還存在嗎

在 Kafka 的主題(Topic)和分區(Partition)中,數據在被消費者消費后是否仍然存在,取決于 Kafka 的設計機制和配置策略。

Linuxkernel學習-deepseek-2

以下是國際上廣受好評的 Linux 內核權威公開課&#xff0c;均來自頂級高校和技術組織&#xff0c;附課程鏈接和特色說明&#xff1a; —### 一、殿堂級大學課程1. MIT 6.S081: Operating System Engineering - 核心&#xff1a;基于 RISC-V 架構 重寫 Unix 內核&#xff08;xv6…

高頻面試之6Hive

Hive 文章目錄 Hive6.1 Hive的架構6.2 HQL轉換為MR流程6.3 Hive和數據庫比較6.4 內部表和外部表6.5 系統函數6.6 自定義UDF、UDTF函數6.7 窗口函數6.8 Hive優化6.8.1 分組聚合6.8.2 Map Join6.8.3 SMB Map Join6.8.4 Reduce并行度6.8.5 小文件合并6.8.6 謂詞下推6.8.7 并行執行…

分類場景數據集大全「包含數據標注+訓練腳本」 (持續原地更新)

一、作者介紹&#xff1a;六年算法開發經驗、AI 算法經理、阿里云專家博主。擅長&#xff1a;檢測、分割、理解、大模型 等算法訓練與推理部署任務。 二、數據集介紹&#xff1a; 質量高&#xff1a;高質量圖片、高質量標注數據&#xff0c;吐血標注、整理&#xff0c;可以作為…