首页 > 其他 > 详细

Docker容器网络

时间:2020-09-07 14:40:15      阅读:52      评论:0      收藏:0      [点我收藏+]

1.四种网络模式

bridge

--net=bridge

默认网络,docker启动后创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。

也可以自定义网络,相比默认的具备内部DNS发现,可以通过容器名容器之间网络通信

host

--net=host

容器不会获得一个独立的network namespace,而是与宿主机共用一个。这意味着容器不会有自己的网卡信息,而是使用宿主机的。容器除了网络,其他都是隔离的。

none

--net=none

获取独立的network namespace,但不为容器进行任何网络配置,需要我们手动配置

container

--net=container:Name/ID

与指定的容器使用同一个network namespace,具有同样的网络配置信息,两个容器除了网络,其他都还是隔离的。

 

自定义网桥:

docker network ls  查看网络

docker network create test  

docker network inspect 网桥id

 

应用场景:

bridge 默认网络

host 希望使用宿主机的网络,除了网络其他都是隔离

none 手动配置容器网络,对接公司IP

container 希望容器与另一个容器再一个网络命名空间,lnmp

 

2.docker网络模型

veth pair:成对出现的一种虚拟网络设备,数据从一端进,从另一端出/用于解决网络命名空间之间隔离。

docker0:网桥是一个二层网络设备,通过网桥可以将linux支持的不同的端口连接起来,并实现类似交换机那样的多对多的通信。

 

3.容器网络访问原理

 

 

技术分享图片

 

外部访问容器:
在浏览器输入地址时,数据包先到达宿主机的网络协议栈,经过DNAT机制,做了网络地址转换,转换给docke0,docker0关联veth的另一端,从另一端进另一端流出,进入容器里面

技术分享图片

容器访问外部:curl 网址,数据包从容器里网卡eth0出去,到达宿主机,从veth进流出到docker0,根据本地iptables做了个SNAT规则,然后通过宿主机eth0,访问外部信息

 

4.容器网络实现核心技术:iptables

INPUT链:接收的数据包是本机(入站)时,应用此链中的规则

OUTPUT链:本机向外发送数据包(出站)时,

FORWARD链:需要通过防火墙中转发送给其他地址的数据包(转发)

ROREOUTING:在对数据包做路由选择之前 DSNAT

POSTROUTING:在对数据包做路由选择之后 SNAT

 

MASQUERADE 动态源地址转换

SNAT 固定IP

 

所有数据包源IP来自172.17.0.0/16这个网段都要做源地址转换

-A POSTOUTING -s 172.17.0.0.16/16 ! -o docker0 -j MASQUERADE

 

 5.跨主机网络:实现docker主机容器通信

FlannelCoreOS维护的一个网络组件,在每个主机上运行守护进程负责维护本地路由转发,Flannel使用ETCD来存储容器网络与主机之前的关系。

其他主流容器跨主机网络方案:

Weave

Calico

OpenvSwitch

 

Docker容器网络

原文:https://www.cnblogs.com/zhaichao93/p/13626370.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!