由于对网络的了解不够深入,本篇逻辑不清楚,只是放了几个关联的命令,至于更详细的原因,留待以后研究。

容器跨主机网络

一个正常的 3 节点容器网络网卡和路由信息如下。

节点一 192.168.200.204

网卡信息:

flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 10.42.0.0  netmask 255.255.255.255  broadcast 0.0.0.0inet6 fe80::ec2c:5ff:fed1:2900  prefixlen 64  scopeid 0x20<link>ether ee:2c:05:d1:29:00  txqueuelen 0  (Ethernet)RX packets 8019  bytes 1873186 (1.7 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 8213  bytes 789044 (770.5 KiB)TX errors 0  dropped 8 overruns 0  carrier 0  collisions 0

路由信息:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
10.42.0.10      0.0.0.0         255.255.255.255 UH    0      0        0 cali72476272766
10.42.0.11      0.0.0.0         255.255.255.255 UH    0      0        0 cali53fb75e9ddc
10.42.0.12      0.0.0.0         255.255.255.255 UH    0      0        0 cali9238d4857d8
10.42.0.13      0.0.0.0         255.255.255.255 UH    0      0        0 cali93e550b9ebf
10.42.1.0       10.42.1.0       255.255.255.0   UG    0      0        0 flannel.1
10.42.2.0       10.42.2.0       255.255.255.0   UG    0      0        0 flannel.1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.200.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

节点二 192.168.200.205

网卡信息:

flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 10.42.2.0  netmask 255.255.255.255  broadcast 0.0.0.0inet6 fe80::9c71:24ff:fe0e:7787  prefixlen 64  scopeid 0x20<link>ether 9e:71:24:0e:77:87  txqueuelen 0  (Ethernet)RX packets 9483  bytes 839101 (819.4 KiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 11321  bytes 1165150 (1.1 MiB)TX errors 0  dropped 8 overruns 0  carrier 0  collisions 0

路由信息:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
10.42.0.0       10.42.0.0       255.255.255.0   UG    0      0        0 flannel.1
10.42.1.0       10.42.1.0       255.255.255.0   UG    0      0        0 flannel.1
10.42.2.18      0.0.0.0         255.255.255.255 UH    0      0        0 calia386a0ae7e9
10.42.2.19      0.0.0.0         255.255.255.255 UH    0      0        0 calid8146ec96f0
10.42.2.20      0.0.0.0         255.255.255.255 UH    0      0        0 calid96aa26afb9
10.42.2.21      0.0.0.0         255.255.255.255 UH    0      0        0 cali125284d5716
10.42.2.22      0.0.0.0         255.255.255.255 UH    0      0        0 cali92f020e8f12
10.42.2.23      0.0.0.0         255.255.255.255 UH    0      0        0 cali6ffdb16a4e8
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.200.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

节点三 192.168.200.206

网卡信息:

flannel.1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450inet 10.42.1.0  netmask 255.255.255.255  broadcast 0.0.0.0inet6 fe80::80ce:7cff:fe3e:9136  prefixlen 64  scopeid 0x20<link>ether 82:ce:7c:3e:91:36  txqueuelen 0  (Ethernet)RX packets 12756  bytes 1068523 (1.0 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 10074  bytes 1792199 (1.7 MiB)TX errors 0  dropped 8 overruns 0  carrier 0  collisions 0

路由信息:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
10.42.0.0       10.42.0.0       255.255.255.0   UG    0      0        0 flannel.1
10.42.1.17      0.0.0.0         255.255.255.255 UH    0      0        0 cali013edd0c23e
10.42.1.18      0.0.0.0         255.255.255.255 UH    0      0        0 cali6cf9397d176
10.42.1.19      0.0.0.0         255.255.255.255 UH    0      0        0 calid4e960f5b99
10.42.1.20      0.0.0.0         255.255.255.255 UH    0      0        0 cali121e24acd4f
10.42.1.21      0.0.0.0         255.255.255.255 UH    0      0        0 cali8fb356abfba
10.42.1.22      0.0.0.0         255.255.255.255 UH    0      0        0 cali8097f1d812c
10.42.2.0       10.42.2.0       255.255.255.0   UG    0      0        0 flannel.1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.200.0   0.0.0.0         255.255.255.0   U     100    0        0 ens33

简单分析

以 192.168.200.204 为例,当前 flannel.1 的 IP 为 10.42.0.0,和另外两个节点有如下的路由:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.42.1.0       10.42.1.0       255.255.255.0   UG    0      0        0 flannel.1
10.42.2.0       10.42.2.0       255.255.255.0   UG    0      0        0 flannel.1

查看 ARP 记录:

[root@localhost ~]# ip neigh show dev flannel.1
10.42.2.0 lladdr 9e:71:24:0e:77:87 PERMANENT
10.42.1.0 lladdr 82:ce:7c:3e:91:36 PERMANENT

查看对于 MAC 地址的网桥信息:

[root@localhost ~]# bridge fdb show flannel.1
82:ce:7c:3e:91:36 dev flannel.1 dst 192.168.200.206 self permanent
9e:71:24:0e:77:87 dev flannel.1 dst 192.168.200.205 self permanent

容器 Veth Pair 关系查看

当单个宿主机内容器网络不通的时候,可以通过本节的命令排查问题。

文中引用信息来自张磊的 深入剖析Kubernetes

张磊: Veth Pair 设备的特点是:它被创建出来后,总是以两张虚拟网卡(Veth Peer)的形式成对出现的。并且,从其中一个“网卡”发出的数据包,可以直接出现在与它对应的另一张“网卡”上,哪怕这两个“网卡”在不同的 Network Namespace 里。

运行下面命令启动一个容器:

docker run --name busybox --rm -it busybox /bin/sh

容器内查看网络信息:

/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:02  inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1RX packets:9 errors:0 dropped:0 overruns:0 frame:0TX packets:2 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0 RX bytes:788 (788.0 B)  TX bytes:125 (125.0 B)lo        Link encap:Local Loopback  inet addr:127.0.0.1  Mask:255.0.0.0UP LOOPBACK RUNNING  MTU:65536  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

打开另一个宿主机的 SSH 连接,通过下面脚本查看和当前容器匹配的 Veth Pair 设备:

[root@localhost ~]# curl -Ssl https://raw.githubusercontent.com/micahculpepper/dockerveth/master/dockerveth.sh | sh
CONTAINER ID    VETH        NAMES
2c54348455eb    vethd030a3f busybox

在宿主机查看该网卡信息:

vethd030a3f: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet6 fe80::8c6c:c9ff:fefb:56aa  prefixlen 64  scopeid 0x20<link>ether 8e:6c:c9:fb:56:aa  txqueuelen 0  (Ethernet)RX packets 3  bytes 167 (167.0 B)RX errors 0  dropped 0  overruns 0  frame 0TX packets 11  bytes 900 (900.0 B)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

通过 brctl 查看网桥信息:

[root@localhost ~]# brctl show
bridge name bridge id       STP enabled interfaces
docker0     8000.02422990970c   no      vethd030a3f

如果系统没有 brctl 可以安装 yum install bridge-utils

可以看到该设备插在了 docker0 上。

张磊: 一旦一张虚拟网卡被“插”在网桥上,它就会变成该网桥的“从设备”。从设备会被“剥夺”调用网络协议栈处理数据包的资格,从而“降级”成为网桥上的一个端口。而这个端口唯一的作用,就是接收流入的数据包,然后把这些数据包的“生杀大权”(比如转发或者丢弃),全部交给对应的网桥。

容器网络问题排查常用命令相关推荐

  1. 网站故障排查常用命令

    为什么80%的码农都做不了架构师?>>>    整理总结了一些常用分析网站的命令方便大家快速定位故障所在排除故障,最小化的减少故障给业务带来的影响. 1.查看TCP连接状态 nets ...

  2. 【容器】kubectl|K8S常用命令总结|crictl管理命令

    目录 即可即用 kubectl常用命令总结 kubectl 查看 K8s 内节点.Pod 资源使用情况 kubectl get - 列出一个或多个资源 kubectl describe - 显示资源的 ...

  3. Docker应用容器引擎——docker的常用命令详解

    文章目录 1.Docker常用命令 2.docker的启动.停止.重启 3.管理命令 4.镜像管理 5.命令的详细演示 docker create docker start docker run do ...

  4. 容器技术之kubectl常用命令

    kubectl用于运行Kubernetes集群命令的管理工具.本文概述涵盖了kubectl语法,对命令操作的描述,并列举了常用命令. Kubectl命令详细列表请查看:Kubernetes kubec ...

  5. Linux网络配置和常用命令

    安装VmWare注意事项 1.是否启动虚拟化服务: 任务管理器--性能--虚拟化--启动 2.安装之后是否出现虚拟网卡:DOS命令--ipconfig--VM1,VM8 虚拟化服务禁用如何开启 win ...

  6. Windows下控制网络连接的常用命令

    1.ipconfig ipconfig 是微软操作系统的计算机上用来控制网络连接的一个命令行工具.它的主要用来显示当前网络连接的配置信息(/all 参数) 实作一 使用 ipconfig/all 查看 ...

  7. 【容器】Podman和常用命令

    Podman常用命令 (摘自:Podman常用命令总结_假面生的博客-CSDN博客_podman命令 容器 podman ps/podman ps -a              查看容器 podma ...

  8. Java后端线上问题排查常用命令收藏

    作者:xiaolyuh ,本文来源:http://r6d.cn/b97q7 内存瓶颈 free free是查看内存使用情况,包括物理内存.交换内存(swap)和内核缓冲区内存. free -h -s ...

  9. 保姆级 Java 后端线上问题排查常用命令收藏

    点击上方"芋道源码",选择"设为星标" 管她前浪,还是后浪? 能浪的浪,才是好浪! 每天 8:55 更新文章,每天掉亿点点头发... 源码精品专栏 原创 | J ...

最新文章

  1. 20165237 2017-2018-2 《Java程序设计》第5周学习总结
  2. Osmocom-bb系统编译
  3. 【博客美化】08.添加扩大/缩小浏览区域大小 按钮
  4. form-validation-engine中的正则表达式
  5. 这8个中国天文台你肯定不认识!
  6. Linux crontab定时执行任务
  7. jpa 跨表_JPA的多表复杂查询
  8. EnjoyCSS – 在线的,先进的 CSS3 代码生成器
  9. 以虚拟现实骨灰级开发者视角,来看VR智能硬件平台
  10. load data infile mysql_mysql Load Data InFile 的用法举例
  11. 人性”的三张图,改变无数人!
  12. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第2节 线程实现方式_9_Thread类的常用方法_获取线程名称...
  13. docker 出现错误:no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS
  14. 微信公众号文章中怎么添加网站链接?
  15. [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush
  16. MySQL数据库学习笔记(2)
  17. 论举办黑客马拉松能为企业带来什么好处| 黑客松| 极客马拉松
  18. 船舶强度与结构设计大作业二matlab,船舶强度与结构设计题目
  19. 分布式发号器——Vesta
  20. 计算广告中的CPM和eCPM

热门文章

  1. chrome主页被篡改毒霸网址大全
  2. 航空票务管理系统java,航空票务管理系统 java jdbc
  3. JavaScript最简单的方式写万年历
  4. 多普勒流速仪用于珠海市政污水流量监测
  5. ubuntu术后那些事儿
  6. CC2640R2F学习笔记(三.电源管理:API介绍)
  7. Python如何将txt文件录入Excel表格
  8. status header not present 解决办法
  9. Windows平台实用的软件分享
  10. 张瑞敏管理箴言100句