Linux企业运维——Docker网络
Posted 是大姚呀
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Docker网络相关的知识,希望对你有一定的参考价值。
Linux企业运维——Docker(五)网络
文章目录
1、Docker原生网络
Docker自身有4种网络工作方式:
网络模式 | 工作模式 |
---|---|
host | 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口 |
Container | 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围 |
None | 该模式关闭了容器的网络功能 |
Bridge | 此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信 |
docker安装后会自动创建3种原生网络:bridge、host、none。
1.1、bridge网络
- bridge模式下容器没有一个公有ip,只有宿主机可以直接访问,外部主机是不可见的。
- 容器通过宿主机的NAT规则后可以访问外网。
docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口
安装查看桥接工具
1.2、host网络
- host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
关闭harbor仓库,使用host网络模式运行容器
1.3、none网络
- none模式是指禁用网络功能,只有lo接口,在容器创建时使用
–network=none指定。
使用none网络模式运行容器
1.4、网络ip分配规则
先运行两个容器
查看它们分别的ip
当容器停掉时,资源会释放,重新启动按照启动顺序分配动态ip
关闭demo1和demo2,再重启,启动顺序为先demo2再demo1
再次查看他们的网卡
2、Docker自定义网络
- 自定义网络模式,docker提供了三种自定义网络驱动:
bridge、overlay、macvlan
bridge驱动类似默认的bridge网络模式,但增加了一些新的功能,overlay和macvlan是用于创建跨主机网络。 - 建议使用自定义的网络来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址。
2.1、自定义网络创建
(1)创建自定义网桥
(2)使用自定义网络启动容器
测试可以ping通demo1
2.2、不同网桥的容器如何通信
(1)删除demo1和自定义网络mynet1,使用带参数的方法重新创建新的自定义网络,使用新的自定义网络运行demo容器
- –subnet: 子网掩码
镜像信任功能能够保证镜像的安全,只有打了信任标签的镜像才能被拉取- –gateway: 网关
(2)使用自定义网络再启动busybox镜像容器,测试连通性
(3)在创建一个新的自定义网络mynet2
(4)用mynet2启动busybox镜像容器
此时无法ping通172.20.0.10
(5)为该容器配置第二块网卡
再查看其ip,已经有了另一网段的ip,且可以ping通了
3、容器通信
3.1、使用容器名称通信
Container 网络模式是 Docker 中一种较为特别的网络的模式。
Docker 容器会共享一个网络栈,这样两个容器之间可以使用localhost高效快速通信。
在容器创建时使用–network=container:vm指定(vm指定的是运行的容器名)
–link 可以用来链接2个容器
–link的格式: –link:alias
name和id是源容器的name和id,alias是源容器在link下的别名。
重新创建demo容器并进行连接,可以ping通
查看busybox的容器的域名解析文件,看到demo对应的ip是172.17.0.2
停掉demo容器,用ngix镜像拉起容器test
可以看到test的ip是172.17.0.2
再启动demo,查看ip
连接到运行中的busybox的容器
查看域名解析文件,demo对应的ip变成172.17.0.4了
3.2、容器访问外网
查看容器ip
3.3、外网访问容器
外网访问容器用到了docker-proxy和iptables DNAT
删除test和demo容器
重新生成demo容器,-p指定映射端口
宿主机把80端口映射到Docker容器上,访问宿主机的80端口就相当于访问Docker的80端口
查看目的地转换规则
删除第6条
访问该容器80端口,可以正常访问
查看网络状态,杀死docker-proxy进程
现在外网就无法访问容器了
恢复目的地转换规则第6条链
外网又可以成功访问了
4、跨主机容器网络
- 跨主机网络解决方案: docker原生的overlay和macvlan 第三方的flannel、weave、calico
- 众多网络方案是如何与docker集成在一起的 libnetwork docker容器网络库 CNM (Container Network Model)这个模型对容器网络进行了抽象
- CNM分三类组件 Sandbox:容器网络栈,包含容器接口、dns、路由表。(namespace) Endpoint:作用是将sandbox接入network (veth pair)
Network:包含一组endpoint,同一network的endpoint可以通信。
4.1、跨主机同网段容器通信
- server1:
网卡监听模式设为混杂模式
移除两个自定义网络
创建macvlan1网络
使用macvlan1网络运行busybox镜像容器
- server2:
导入busybox
创建macvlan1网络,并使用macvlan1网络运行busybox镜像容器
测试可以相互ping通
4.2、跨主机不同网段容器通信
- macvlan会独占主机网卡,但可以使用vlan子接口实现多macvlan网络
- vlan可以将物理二层网络划分为4094个逻辑网络,彼此隔离,vlan id取值为1~4094。
server1和server2新加一块网卡eth1
新的网卡还没有任何配置
编写eth1的配置文件
启用eth1网卡并开启混杂模式
创建macvlan2网络
server2也做相同的操作
再server1和server2上,使用macvlan2网络运行busybox镜像容器
可以看到相互都可以ping通
server1将容器以macvlan1网络模式连接到demo容器
server2以macvlan1网络模式运行busybox镜像容器,二者可以相互ping通
查看网络规则表
以上是关于Linux企业运维——Docker网络的主要内容,如果未能解决你的问题,请参考以下文章