16 | 容器网络配置(1):容器网络不通了要怎么调试?
该思维导图由 AI 生成,仅供参考
问题再现
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了容器网络接口配置和调试方法。通过具体案例和操作指导,帮助读者快速了解容器网络接口配置和调试方法,为解决容器网络通讯问题提供了实用的技术指导。文章首先通过实例展示了容器内无法访问外部IP地址的问题,并提出了在容器网络不通时应该如何进行分析和调试。其次,从容器网络接口在系统架构中的位置出发,介绍了容器Network Namespace中的网络接口配置方式,重点讲解了veth的创建过程和基本概念。最后,提供了一些命令示例,帮助读者更好地理解和应用所学知识。整体而言,本文通过逐步操作重现了容器网络通讯问题,并提供了解决问题的思路和方法。读者可以通过对主要设备上做tcpdump来找到具体在哪一步数据包停止了转发,结合内核网络配置参数、路由表信息、防火墙规则,定位出根本原因,最终解决网络不通的问题。文章还提出了思考题,引发读者对网络配置的深入思考。
《容器实战高手课》,新⼈⾸单¥59
全部留言(22)
- 最新
- 精选
- 我来也老师一路tcpdump的操作很犀利,特别是抓容器中的数据包的那个操作: ip netns exec $pid tcpdump -i eth0 host 39.106.233.176 -nn 以前为了在容器中抓包,还要在容器中安装tcpdump,从国外的源拉数据又慢,即使换了国内的源,但每次重建容器后又得再来一次。 搞的我专门准备了一个调试用的基础容器,把各种常用的工具都给装上,包括我的vim。😄
作者回复: @我来也 把调试工具都放到一个基础容器中也挺好的。
2021-01-05412 - 陈斯佳这篇网络调试太硬核了!!一直觉得,容器就是Linux的高级知识,容器通了,Linux的内容你就所向披靡了
作者回复: @陈斯佳 是这样的!
2021-02-047 - 争光 Alan你好,老师,我网络比较弱,看了文章有两个地方没看懂 1.docker0 和veth连接,是可以理解为docker0是个交换机,所有连接docker0的网卡可以二层通信? 2.为什么连接到docker0,开启forward就通了?能讲一下原理吗? 是到达docker0的包会经过postrouting链,然后经过本地路由后,需要走forward链出去,所以需要开forward为accept并且开启forward吗?
作者回复: > 1 对的你可以理解为docker0是一个L2交换机。 > 2 ip_forward就是打开Linux类似路由器的功能,允许数据包从一个接口进入,根据路由从另外一个接口出去。这个和你说的iptables里的postrouting/forward链没有关系
2020-12-2746 - Geek_c2089d老师有个问题想咨询一下你,我有个FTP的容器,ftp的配置是配置了127.0.0.1地址,而我宿主机是192.168.1.21的ip,我连接ftp服务的时候用宿主机的ip去连接会有问题???我现在有一个问题是被动模式连接上去但LIST命令数据没返回,但是主动模式可以,想问下和上面配置有关系??如果没关系我上面的配置会引起什么问题??
作者回复: 127.0.0.1 是 localhost IP, 每个namespace里都有一个。如果从宿主机的host network namespace里去访问127.0.0.1只是 host network namespace里的,不会访问到容器 network namespace的127.0.0.1
2021-03-093 - JianXu以我们设计的system diagnostics 为例子,我们是怎么自动推算出 数据路径是 container veth—> host veth —> docker 0 —> host eth0 呢?从而在这条路径上做消息提取呢?
作者回复: 我们用bpf trace 主要的内核stack的收发函数,dump出network namespace id和device name, 就可以看出这条路径了。
2022-08-14归属地:上海1 - moonberry老师您好,请问iptables 列出的NAT表是docker默认配置的吗?
作者回复: 需要自己加一条 “iptables -P FORWARD ACCEPT”, 其它的是默认的配置。
2021-03-011 - Geek_ba556d老师,能帮忙解决一下,我在两台vmwarework虚拟机安装centos7.6,分别创建物理网卡子接口,并关联了macvlan,但是ARP传输一直出问题,绑定静态就可以ping通,不知是什么原因,能帮忙解答一下吗?
作者回复: @Geek_ba556d 不好意思,这个需要看到现场环境才能进一步分析。不过,你说arp出问题,那么可以先在主要接口dump一下arp request 或者 arp reply的包。
2021-01-0421 - Demon.Lee请教老师和小伙伴们一个问题,不知道你们是否遇到过: 一个简单的 k8s 集群(1个 master ,2个 worker) ,master 的 ip 为 10.5.xx.xx,2 个 worker 的 ip 为 192.168.100.xx。 有一个 pod 暴露了一个 https 端口(比如443),然后 通过 curl https://xxx:443/apis/xxx 访问(调用是会带上token),如果这个 pod 不在 master 节点上,那么在 master 节点上发起请求后一直没反应,直到超时。而在 2 个 worker 节点发起请求,则可以正常返回。 如果将这个 pod 强制调度到 master 节点上,那么在 master 节点上发起请求,可以正常返回,但在 2 个 worker 节点发起请求,会超时无响应。
作者回复: @Demon.Lee 你描述了k8s 集群节点,不过没有描述pod网络配置方式。在分析这个问题前,你可以把集群的网络拓扑和pod在节点上的网络拓扑分析一遍,然后再分析具体的问题。
2021-08-04 - 徐少文老师的思路我看明白了。我已经自己实现了一个容器沙箱,用net namespace进行了网络的隔离,现在想配置它的网络功能。宿主机已经可以连通外网,我在host上创建了一个网桥,然后在host和沙箱里放置了veth0和veth1。但是还没有设置host上的SNAT和DNAT。现在沙箱和host已经可以ping通,也可以通过tcp通信。但是沙箱内还是无法访问外网,但是不知道具体如何设置SNAT和DNAT,老师能给点指导吗?
作者回复: @徐少文 可以找一些iptables相关的文档看一下。
2021-07-07 - Geek_c2089d老师,这段时间遇到这样一个问题,想问下遇到这种问题应该怎么找原因:什么日志都看不了 adding interface vethbad9e82 to bridge docker0 failed: could not find bridge docker0: no such network interface"
作者回复: 用"ip link show type bridge"命令看一下 docker0 interface是不是存在。
2021-04-242