排查ingress 404報錯的方法--附:在容器中使用tcpdump抓包

出現這個問題,一般是由於路由不通導致的,需要進行抓包排查。

 

首先要解決的問題是,如何在 ingress-controller 容器中安裝抓包工具。

 

1、由於 ingress-controller 的mandotory.yaml 中安全選項使用的是 33 用戶,安裝不了程序,因此咱們需要先修改spec.containers.securityContext下的配置

securityContext:
 
allowPrivilegeEscalation: true
 
capabilities:
   
drop:
      - ALL
   
add:
      - NET_BIND_SERVICE
 
# www-data -> 33
 
runAsUser: 33

改成:

securityContext:
  runAsUser: 0

 

2、 kubectl exec –it xxxx –n ingress-nginx /bin/bash 進入容器

 

3、 下載 tcpdump 並安裝

Ingress-controller的鏡像使用 Ubuntu ,因此使用 apt-get 更新安裝:

下載tcpdump及其依賴的libpcap

wget http://www.tcpdump.org/release/tcpdump-4.5.1.tar.gz

wget http://www.tcpdump.org/release/libpcap-1.5.3.tar.gz

 因爲沒有編譯,所以需要安裝編譯環境:

 Ingress-controller容器內基本上啥也沒有,直接使用 apt-get 命令會說找不到package

 執行:apt-get update

 之後依次執行:

  apt-get install build-essential

apt-get install flex

apt-get install bison

 考慮到要監聽指定網卡,你需要了解本機的網卡名稱,需要安裝 net-tools

  apt-get install net-tools

 

4、解壓 libpcap-1.5.3.tar.gz 文件,在解壓後的文件中,依次執行 :

./config

make

make install

 

5、解壓 libpcap-1.5.3.tar.gz 文件,在解壓後的文件中,依次執行 :

./config

make

make install

 

6、完成後先看看網卡: ifconfig

咱們監聽 eth0 網卡即可

 

7、使用命令 tcpdump -i eth0 port 8080 -w /tmp/ingress.pcap 將抓包報文導出

 

8、訪問報錯的 ingress 連接,之後使用 kubectl cp 命令將 容器內部的 ingress.pcap 拿出來

 

9、使用 wireshark 工具分析包文件:(安裝鏈接:https://www.wireshark.org/download.html)

 

經分析,今天的報錯是因爲我們外網轉發內網時,存在代理,代理中的有個配置是錯誤的,它將外網的地址映射到了內網IP而不是 ingress 的內網域名,導致無法訪問。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章