32 | 浅谈容器网络
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
Linux容器的网络实现原理 本文深入介绍了在单机环境下,Linux容器的网络实现原理。通过解释容器的网络栈、网桥的概念以及Veth Pair虚拟设备的连接方式,帮助读者快速了解了容器之间的交互原理。文章通过实际操作示例和简洁的语言,清晰地阐述了容器在宿主机上的网络通信流程,包括数据包的传输过程和Linux内核Netfilter的参与。 在文章中,作者通过具体的操作示例和图示,详细介绍了容器网络的实现原理,包括容器与宿主机网络的交互过程、docker0网桥的作用以及容器间通信的实现方式。特别是对于容器的“跨主通信”问题,作者提出了Overlay Network(覆盖网络)的解决方案,通过软件构建一个覆盖在已有宿主机网络之上的、可以把所有容器连通在一起的虚拟网络,为读者提供了解决方案。 总的来说,本文通过深入浅出的方式,详细介绍了Linux容器的网络实现原理,为读者提供了重要的参考和理解。文章内容涵盖了容器网络的基本原理和解决方案,对于想要深入学习和实践容器网络的读者来说,具有很高的参考价值。 在生产环境中使用容器的Host Network模式,需要做额外的准备工作,包括网络安全、性能优化、容器间通信等方面的考量。这些内容对于读者在实际应用中的决策和实践具有指导意义。 通过本文的阅读,读者可以快速了解容器网络的实现原理,为进一步深入学习和实践提供了重要参考。
《深入剖析 Kubernetes》,新⼈⾸单¥68
全部留言(79)
- 最新
- 精选
- 心蓝张老师对网络的讲解实在是太棒了,棒在并不使用高深的网络词语,那些高深的网络词语让人不知所述,头晕转向的,而是用最直白的讲话式加上配图来讲解,一看就懂,太喜欢了!少留言的我,都忍不住写留言!
作者回复: 那就多留言哈
2019-01-0944 - loda请教个问题,默认情况两台主机的docker0无法互通,那么如果在这两台机器上配置了路由规则,将docker0的数据转发到eth0,两台机器通过网线或者交换机相连,这样是不是可以保证不用引入overlay network,容器之间也能互通
作者回复: 当然可以。但这还是overlay,只是没用隧道。
2018-11-051015 - 帅老师你好,网络的章节中讲到的二层网络和三层网络是分别指数据链路层和网络层么?
作者回复: 对
2018-11-1410 - kissingers老师,容器1访问容器2,直接docker0网桥根据转发表转发就行了,怎么还有先到docker0接口,路由选择,再回到docker0转发的过程?访问外网时才会有到docker0这个网关,再路由出去的过程吧?
作者回复: 对。这里其实都在二层ebtables处理的。我修改一下。
2018-11-108 - kissingersdocker0网桥有没有dhcp 功能?主机上的容器访问外网没有NAT?主机网卡没连到docker0?
作者回复: 静态IP。访问外网为什么要NAT。同主机两张网卡要用什么连。
2018-11-0824 - 崔不好意思,这里想请教一下,文中提到的二层网络,以及后面提到的三层网络,指的是OSI模型,还是TCP/IP 模型
作者回复: OSI 哈
2020-03-06 - 林辉老师,你的第一条命令-d的-样式不对。。。
作者回复: 是么……编辑看一下?
2018-12-08 - loda在宿主机上ifconfig看到的虚拟网卡应该是veth9c02e56,而不是vethb4963f3,12行代码应该有点问题
作者回复: 是的,已修正
2018-11-05 - blackpiglet看到有位同学问怎么找 docker 和 宿主机上 veth 设备的关系,学完后我也有这个疑问,查了一下,结论是没有命令可以直接查到。但是可以查看 container 里的 eth0 网卡的 iflink 找到对应关系。 # 宿主机上 $ ip link ...... 9: veth0e9cd8d@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP mode DEFAULT group default link/ether 6a:fb:59:e5:7e:da brd ff:ff:ff:ff:ff:ff link-netnsid 1 # 容器内 $ sudo docker exec -it e151 bash root@e1517e9d9e1a:/# cat /sys/class/net/eth0/iflink 9 这样就可以确定 container e1517e9d9e1a 在物理机上对应的 veth pair 是 veth0e9cd8d 了。 这种方式需要登录到 docker 里执行命令,不是所有的容器都能这么做,不过 github 上有人专门做了个脚本来用实现这个功能,可以参考一下: https://github.com/micahculpepper/dockerveth2018-11-1012236
- Jianwen Ji当一个容器试图连接到另外一个宿主机时,比如:ping 10.168.0.3,它发出的请求数据包,首先经过 docker0 网桥出现在宿主机上。宿主机再把这个ping包发送出去之前会做源nat转换,把源ip改成宿主机的ip。大家可以分别在docker0和宿主机的真实网卡上tcpdump 抓包看一下。在宿主机用iptables -L -t nat就能看到相应的规则。2018-11-11767