排查ingress 404报错的方法--附:在容器中使用tcpdump抓包
出现这个问题,一般是由于路由不通导致的,需要进行抓包排查。首先要解决的问题是,如何在 ingress-controller 容器中安装抓包工具。1、由于 ingress-controller 的mandotory.yaml 中安全选项使用的是 33 用户,安装不了程序,因此咱们需要先修改spec.containers.securityContext下的配置securit...
出现这个问题,一般是由于路由不通导致的,需要进行抓包排查。
首先要解决的问题是,如何在 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 的内网域名,导致无法访问。
更多推荐
所有评论(0)