容器网络管理
1、四种网络模式
- bridge
- -net=bridge,默认网络,docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。也可以自定义网络,相逼默认的具备DNS发现,可以通过容器名之间进行通信。
- host
- -net=host,容器不会获得一个独立的网络命名空间,而是与宿主机共用一个。这意味着容器不会有自己的网卡信息,而是共用宿主机的ip和端口。容器除了网络,其他都是隔离的。
- none
- -net=none,获得独立的网络命名空间,但不为容器进行任何网络配置,需要手动创建。
- container
- -net=container:[name|id],与指定容器共用一个网络命名空间,具有相同的网络配置信息,两个容器除了网络,其他都是隔离。
- eg:docker run -it --net=container:node1 --name node3 busybox sh
- -net=container:[name|id],与指定容器共用一个网络命名空间,具有相同的网络配置信息,两个容器除了网络,其他都是隔离。
2、docker网络模型
-
veth pair:成对出现的一种虚拟网络设备,数据从一端进,另一端出,可理解为连接容器网络命名空间与docker0网桥的一根网线,用于解决网络命名空间之间的隔离。
-
docker0:网桥是一个二层设备,通过网桥可以将linux支持的不同端口连接起来,并实现乐死交换机那样的多对多通信。可通过
命令查看连接网桥的veth设备对(前提安装bridge-utils包) -
模型示图:
3、容器访问网络原理
-
外部访问容器
-
容器访问外部
4、容器网络实现核心技术:iptables
-
四表五链
-
iptables工作流程
- PREROUTING: 在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
- INPUT: 处理入站的数据包
- OUTPUT: 处理出站的数据包
- FORWARD: 处理转发的数据包
- POSTROUTING: 在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
-
容器规则查看
5、跨主机网络:实现容器多主机通信
-
方法:借助flannel网络组件和etcd数据库。即每台宿主机分别部署flannel网络组件负责维护本地路由转发;部署一个ETCD数据库存储容器网络与主机之间的关系。
-
部署方案:
-
4添加environment路径应为:/var/run/flannel/docker
-
部署完成后,需在各宿主机允许通过FORWARD链,具体操作如下:
-
iptables -P FORWARD ACCEPT
或者
iptables -I FORWARD --dst 172.17.0.0/16 -j ACCEPT
172.17.0.0/16为整个网络
-
systemctl restart flanneld
-
systemctl restart docker
-
-