目录
vmware的三种网卡模式(网络模式)
docker里的四种网络类型
参考资料:Docker四种网络模式 - 简书 (jianshu.com)
1、桥接模式(默认情况)
2、host模式
3、none模式
4、container模式
创建桥接模式网卡
网卡连接
Overlay的使用
参考文档:Docker Overlay 工作原理 - kevin.Xiang - 博客园 (cnblogs.com)
Overlay的底层原理VXLAN
vxlan网络通信创建步骤:
docker 删除全部nginx容器 命令
[root@mysql ~]# docker rm $(docker ps -a | awk '/nginx/ {print $NF}')
clay-nginx-2
clay-nginx-1
clay-nginx
[root@mysql ~]#
vmware的三种网卡模式(网络模式)
1、桥接模式 bridge --》 vmware 0
2、hostonly --》vmware1
3、nat模式 --》vmnet8
参考资料:(50条消息) 计算机网络 SNAT/DNAT 部署(三种VMware网卡模式)_snat部署_Claylpf的博客-CSDN博客
docker里的四种网络类型
参考资料:Docker四种网络模式 - 简书 (jianshu.com)
1、桥接模式(默认情况)
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。
bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。
2、host模式
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。
3、none模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。
这种网络模式下容器只有lo回环网络,没有其他网卡。none模式可以在容器创建时通过--network=none来指定。这种类型的网络没有办法联网,封闭的网络能很好的保证容器的安全性。
4、container模式
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
因此当我们每启用一个docker容器,宿主机就会自动产生一个虚拟网卡veth
而veth开头的网卡是docker容器上对应的网卡,每启动一个容器就会创建一个虚拟网络接口(网卡)
创建桥接模式网卡
当然我们也可以自己创建一个桥接类型的网卡
[root@mysql ~]# docker network create --driver bridge clay #创建一个桥接类型的网卡
2d136729908f5685307f14f105f4dc17f8d15278427197073d318126ef5cd210
[root@mysql ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
73c5a59652f4 bridge bridge local
2d136729908f clay bridge local
f2c76b408dca host host local
27c1d8f3ca8d none null local
[root@mysql ~]#
我们使用ip add可以查看增加了 br-2d136729908f这块网卡,而这就代表了桥接模式的网卡
30: br-2d136729908f: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:55:f9:46:77 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2d136729908f
我们如何创建docker容器连接到这块新的网卡上去呢
网卡连接
#创建一个容器,定义它连接的网卡是clay网卡
[root@mysql ~]# docker run -d -p 8809:80 --name lpf-nginx-1 --network clay nginx
8811b353441172680020bfd8a2100cf2793bbb9f0f86e836fe63253cd8078e9f
[root@mysql ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8811b3534411 nginx "/docker-entrypoint.…" 9 seconds ago Up 7 seconds 0.0.0.0:8809->80/tcp, :::8809->80/tcp lpf-nginx-1
3585af7fab56 nginx "/docker-entrypoint.…" 18 minutes ago Up 18 minutes 0.0.0.0:8805->80/tcp, :::8805->80/tcp clay-nginx-3
98f179ae4afa nginx "/docker-entrypoint.…" 19 minutes ago Up 19 minutes 0.0.0.0:8804->80/tcp, :::8804->80/tcp clay-nginx-2
905d0e207a1f nginx "/docker-entrypoint.…" 19 minutes ago Up 19 minutes 0.0.0.0:8803->80/tcp, :::8803->80/tcp clay-nginx-1
[root@mysql ~]# ip add #查看网络接口
30: br-2d136729908f: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:55:f9:46:77 brd ff:ff:ff:ff:ff:ff
inet 172.18.0.1/16 brd 172.18.255.255 scope global br-2d136729908f
valid_lft forever preferred_lft forever
inet6 fe80::42:55ff:fef9:4677/64 scope link
valid_lft forever preferred_lft forever
32: veth591b578@if31: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-2d136729908f state UP group default
link/ether 86:a9:4a:28:9b:8d brd ff:ff:ff:ff:ff:ff link-netnsid 3
inet6 fe80::84a9:4aff:fe28:9b8d/64 scope link
valid_lft forever preferred_lft forever
Overlay的使用
overlay是来实现跨主机docker容器之间的通信
需要使用swarm来进行,它是docker的一个集群化管理软件
Overlay网络实际上是目前最主流的容器跨节点数据传输和路由方案
参考文档:Docker Overlay 工作原理 - kevin.Xiang - 博客园 (cnblogs.com)
Overlay的底层原理VXLAN
vlan: 虚拟局域网 :可以隔离广播,对网络进行隔离
一个vlan一个网段(不到5000个可以使用的vlan)
而vxlan: 其实就是对传统vlan的扩展
VXLAN是一种虚拟化网络技术,全称为Virtual eXtensible LAN,可以实现虚拟网络之间的互连,将底层物理网络和上层虚拟化网络进行隔离。VXLAN可以扩展现有的局域网(LAN)范围,在数据中心内构建规模更大、可扩展性更好的虚拟网络。
VXLAN使用了24位的VNI(VXLAN Network Identifier)标识符,可以支持1600万个唯一的网络标识。这样可以在大规模虚拟化环境中提供足够的标识符,使得不同的虚拟网络之间相互独立,且可以跨越多个物理网络互联。
VXLAN可以通过隧道技术将虚拟网络封装在物理网络之中,使得虚拟机可以像在同一个物理网络内一样直接通信。同时,它还支持多路径ECMP等负载均衡技术,提高了网络的带宽利用率和容错能力。
通过VXLAN技术,用户可以更加灵活地配置和管理虚拟网络。它允许用户在同一物理网络基础上创建多个虚拟网络,并按照需要动态调整虚拟网络的大小和位置。此外,它还支持网络功能虚拟化 (NFV),可以快速实现网络功能的部署和调整。
总之,VXLAN是一种基于隧道技术的虚拟化网络技术,可以扩展现有的局域网范围,提高数据中心内虚拟网络的可扩展性和灵活性。
vxlan网络通信创建步骤: