最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2025年07月10日 08:39:35   作者:bruce128  
這篇文章主要介紹了K8S中應用無法獲取用戶真實ip問題排查過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

現(xiàn)象

領導反饋生產(chǎn)環(huán)境的用戶ip有問題。登陸到這個頁面,發(fā)現(xiàn)是所有的用戶ip都是*.*.94.97,這是個內(nèi)部網(wǎng)絡ip.

排查過程

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

*.*.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" "*.*.44.200"
*.*.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" "*.*.140.102"
*.*.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" "*.*.52.192"

發(fā)現(xiàn)第一列展示的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 根據(jù)第二步的分析,將remote_addr修改為http_x_forwarded_for

6 重啟nginx,問題解決

K8S網(wǎng)絡拓撲

所有的外部流量一定會通過一個ingress controller進入到K8S的內(nèi)部。

ingress controller的一個常見實現(xiàn)是Nginx,正好我們的k8s選擇的就是Nginx。

也就是說我們的業(yè)務前端nginx前面還有一個nginx。所以我們的前端nginx的remote_addr拿到的是k8s入口ingress的內(nèi)部ip地址。

總結

用戶請求經(jīng)過兩層nginx轉(zhuǎn)發(fā)才到達后端java業(yè)務應用。remote_addr僅存儲上一個轉(zhuǎn)發(fā)節(jié)點的ip,所以我們的業(yè)務應用一直拿的是ingress的ip。http_x_forwarded_for存儲的是原始用戶的請求ip。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 一篇文章搞懂K8S高級特性

    一篇文章搞懂K8S高級特性

    這篇文章主要給大家介紹了關于K8S高級特性的相關資料,文中通過時實例代碼以及圖文介紹的非常詳細,對大家學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2021-11-11
  • K8S中五種控制器的介紹以及使用

    K8S中五種控制器的介紹以及使用

    這篇文章主要給大家介紹了關于K8S中五種控制器及使用的相關資料,控制器 又稱之為工作負載,本文通過圖文以及實例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • RFO SIG之openEuler AWS AMI 制作詳解

    RFO SIG之openEuler AWS AMI 制作詳解

    這篇文章主要為大家介紹了RFO SIG之openEuler AWS AMI 制作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • k8s?常見面試題集錦

    k8s?常見面試題集錦

    這篇文章主要為大家介紹了k8s?常見面試題集錦,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-09-09
  • Containerd容器運行yum安裝與二進制安裝

    Containerd容器運行yum安裝與二進制安裝

    這篇文章主要為大家介紹了Containerd容器運行yum安裝與二進制安裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • k8s查看pod日志的幾種實用方法匯總

    k8s查看pod日志的幾種實用方法匯總

    Pod是Kubernetes中能夠創(chuàng)建和部署的最小單元,是Kubernetes集群中的一個應用實例,總是部署在同一個節(jié)點Node上,下面這篇文章主要給大家介紹了k8s查看pod日志的幾種實用方法,需要的朋友可以參考下
    2022-07-07
  • Kubernetes Worker Node組件使用及說明

    Kubernetes Worker Node組件使用及說明

    這篇文章主要介紹了Kubernetes Worker Node組件使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2026-01-01
  • k8s進入容器實現(xiàn)方式

    k8s進入容器實現(xiàn)方式

    文章介紹了在Kubernetes(k8s)中進入容器的步驟,包括使用`kubectl get pod`命令獲取容器名稱,然后使用`kubectl exec -it <podname> /bin/bash`或`kubectl exec -it <podname> bash`命令進入容器,如果容器中沒有`/bin/bash`,可以嘗試使用`sh`
    2026-02-02
  • Kubernetes集群模擬刪除k8s重裝詳解

    Kubernetes集群模擬刪除k8s重裝詳解

    這篇文章主要為大家介紹了Kubernetes集群模擬刪除k8s重裝詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • Kubernetes控制器中DaemonSet與Job的使用教程

    Kubernetes控制器中DaemonSet與Job的使用教程

    這篇文章主要介紹了Kubernetes控制器中DaemonSet與Job的使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08

最新評論

商河县| 正安县| 新干县| 廉江市| 葵青区| 江津市| 五原县| 黔东| 汕尾市| 和平县| 贞丰县| 武强县| 秀山| 固安县| 正阳县| 石台县| 东海县| 都兰县| 阳春市| 顺义区| 通渭县| 昭通市| 阳西县| 马尔康县| 墨竹工卡县| 从江县| 原平市| 高阳县| 营山县| 通城县| 崇州市| 平安县| 黄冈市| 台中县| 手游| 商都县| 涞水县| 敦化市| 肥西县| 勐海县| 堆龙德庆县|