四类网络模式
网络模式 | 配置 | 说明 |
bridge模式 | –net=bridge | (默认为该模式) |
host模式 | –net=host | 容器和宿主机共享Network namespace。 |
container模式 | –net=container:NAME_or_ID | 容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace。 |
none模式 | –net=none | 容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等。 |
bridge模式
内网IP
下面给大家列出来,只要ip地址不属于这几个网段范畴的,都是公网ip。
100.X.X.X
10.X.X.X
192.168.X.X
172.16.X.X-172.31.X.X
bridge模式
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
如下图所示,当Docker1需要访问外网时,请求先到达Docker0虚拟网卡,然后在到达物理网卡,请求就发送出去了。
实操
1)首先有一个服务器,我的云服务器内网IP为:10.0.4.8
2)然后创建一个docke容器,容器为zookeeper(端口2181)
3)查看docker服务器的IP
docker inspect 容器ID
执行上面的命令,就可以查看容器的详细信息,从图中可以看出容器的网络模式为bridge,容器的IP为172.17.0.5(我起了其他的容器,所以不是172.17.0.2)
host模式
host模式
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
实操
1)首先有一个服务器,我的云服务器内网IP为:10.0.4.8
2)通过添加一下参数设置网络模式为host模式
--net=host
启动一个centos容器
docker run -itd --name centos01 --net=host centos:centos7
我们使用一下命令查看docker容器的详细信息,如下图所示,并没有发现IP信息
docker inspect 容器ID
我们可以进入容器内部去查看,其中764af3b723a0为容器ID
//进入容器
docker exec -it 764af3b723a0 /bin/bash
//安装网络工具
yum install net-tools -y
//查看IP
ifconfig
通过截图发现,host网络模式下的容器的IP和宿主机IP一致
container模式
container模式
这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
Container模式示意图:
使用场景
k8s中一个Pod中共用一个网络,其实就Pod里先初始化一个Pause容器用来设置网络,其他的容器通过container模式关联到Pause容器上,这样一个Pod里的多个容器共用一个网络
参考:查看k8s中Pod里容器的数量和名称
none模式
使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。