首页 > 编程知识 正文

k8s容器之间通信(docker退出容器命令)

时间:2023-05-06 12:12:54 阅读:90520 作者:1552

一、什么是集装箱网络堆栈

可以看到容器的“网络堆栈”与自己的网络名称空间隔离

网卡(network interface )环回设备(loopback device )路由表(Routing Table ) iptables规则当然,容器使用宿主机的网络- net=主机)网络名称空间)。 容器通常使用自己的网络堆栈,有自己的IP和端口2,容器如何与其他不同的网络名称的容器进行交互?

将容器视为一台主机,两台主机直接通信的方法是用一根网线连接。 在多台主机之间进行通信时,需要通过网络连接到一台交换机。 在linux上,充当虚拟交换机的设备是网桥在数据链路层工作的设备,功能是根据对MAC地址的学习,将包传输到网桥的不同端口。 为了实现上述目的,Docker项目可以默认在主机上创建docker0的桥,连接到上面的容器,通过它进行通信。 另外,还有将容器连接到docker0网络的方法

需要一个名为Veth Pair的虚拟设备。 一旦创建了Veth Pair,它总是以两个虚拟网卡(Veth Peer )的形式成对显示,即使两个网卡位于不同的网络名称空间中,从一个网卡输出的分组也将相应

因此,veth对经常用作连接不同网络名称空间的网线

四、示例演示

本节显示了在瘦主机上启动nginx-1和nginx-2这两个容器,以及nginx-1容器访问nginx-2后如何进行通信

运行nginx-1容器

docker run-d---- name=nginx-1 nginx

浏览nginx-1的网络设备

根@ d5BFA ab 9222 e :/# ifconfig

eth 0:标志=4163上行,广播,运行,多路复用MTU 1500

inet 172.18.0.2网络掩码255.255.0.0广播172.18.255.255

ether 02:42: AC :12:00:02 txqueuelen0(以太网)

rx包3520字节8701343 (8.2兆字节)。

rerrors 0超运行0帧0

tx包3010字节21077765205.8千字节() ) ) ) ) ) )。

超运行0电信公司0集团0集团

lo :标志=73up,回溯,运行MTU 65536

inet 127.0.0.1网络掩码255.0.0.0

looptxqueuelen 1000 (本地环回) )。

rx包0字节0 (0.0b ) )。

rerrors 0超运行0帧0

tx数据包0字节0 (0.0b ) )。

超运行0电信公司0集团0集团

eth0的网卡是Veth Pari设备的一端

显示nginx-1的路由表,并通过route命令显示

根@ d5BFA ab 9222 e :/#根

内核IP路由表

目标网关掩码标记证书安全接口

efault 172.18.0.10.0.0.0.0紫外线0

172.18.0.0.0.0.0.0255.255.0.0 u 00以太网0

172.18.0.0/16网段的请求均按eth0处理。 这是Veth Pair设备的一端,另一端在主机上

5 .查看宿主机的桥

在积木秀上看

根@虚拟机-0-8- Ubuntu : /家庭/Ubuntu #积木显示

bridgenamebridgeidstpenabledinterfaces

docker 08000.0242 c 635 DDB8nove th 4d 1c 130

可以看到在docker0中插入了veth4d1c130网卡

6 .执行另一个nginx-2

docker run-d---- name=nginx-2 nginx

7 .再次查看主机桥

根@虚拟机-0-8- Ubuntu : /家庭/Ubuntu #积木显示

bridgenamebridgeidstpenabledinterfaces

docker 08000.0242 c 635 DDB8nove th 4d 1c 130

vetha9356e9

可以看到在docker0中插入了两张网卡veth4d1c130、vetha9356e9

此时,如果容器nginx-1(172.18.0.2 )对容器nginx-2 ) 172.18.0.3 )进行平移,则可知两个容器可以连通

五、nginx-1可以访问nginx-2的原理是什么?

受网络名称限制的容器进程通过Veth Pair设备汇聚主机桥来与其他容器交换数据

1.nginx-1访问nginx-2时,IP地址与nginx-1容器中的每个路由规则一致

172.18.0.0.0.0.0.0255.255.0.0 u 00以太网0

所有符合此规则的IP包必须通过本地eth0网卡,通过双层网络发送到目标主机

2 .要通过双层网络到达nginx-2,需要172.18.0.3的MAC地址

nginx-1容器需要通过eth0网卡发送ARP广播,并通过IP显示对应的MAC地址

该eth0网卡是Veth Pair,其一端位于nginx-1容器的网络名称空间,另一端位于主机(主机名称空间),插入宿主机的docker0桥中

如果虚假网卡(veth4d1c130 )插入到网桥) docker0),则调用网络的数据包会传输到对应的网桥,因此ARC请求会发送到docker0

3.docker0将数据传输到适当的nginx-2

docker0继续充当第2层交换机,根据分组上的MAC地址(nginx-2的MAC地址),在该CAM的正反面查找对应的端口,发现vetha9356e9,将分组发送到该端口然后,包将到达nginx-2容器的网络名称区

nginx-2看到自己的eth0网卡上发生了流入数据包,处理请求,并向nginx-1返回响应

打开iptables的跟踪功能,可以看到数据包的传输过程,还可以看到tail -f /var/log/syslog

# # iptables-traw-a输出- pic MP-j跟踪

# # iptables -路线预测- pic MP-j跟踪

原理图如下

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。