温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

docker和iptables的关系是什么

发布时间:2021-06-22 14:59:24 来源:亿速云 阅读:314 作者:Leah 栏目:大数据

这期内容当中小编将会给大家带来有关docker和iptables的关系是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。


1、首先了解一下docker的网络机制

docker有4中网络模式:

a.host

b.container

c.none

d.bridge

docker使用linux中的namespace隔离资源,一个docker容器会分配一个独立的network namespace。但是如果容器采用host时,那么这个容器会和宿主机公用一个network namespqce,容器将不会虚拟出自己的网卡,配置自己的ip,而是使用宿主机的ip和端口

contianer模式是指和已经存在的一个容器共享一个network namespaces,那两个容器除了网络方面,其它的资源还是隔离的,两个容器的进程可以通过lo网卡设备通信

none模式时docker拥有自己的network namespaces,但是docker进行任何网络配置,需要我们自己为docker容器添加网络、配置ip

bridge模式是docker默认的网络设置,此模式会为每个容器分配network namespace、设置ip等,并将一个主机的docker容器连接到一个虚拟网络上

下面说明一下最常用的bridge模式

1.1 bridge模式下的拓扑结构

如图所示:

当docker deamon 启动的时候会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似。

docker会从分配与宿主机不同的ip地址给docker网桥和container。

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 192.168.0.1  netmask 255.255.240.0  broadcast 0.0.0.0

        ether 02:42:a7:07:f4:fc  txqueuelen 0  (Ethernet)

        RX packets 13612806  bytes 1998086329 (1.8 GiB)

        RX errors 0  dropped 0  overruns 0  frame 0

        TX packets 17525195  bytes 2961142842 (2.7 GiB)

        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以把docker0看作网桥的管理接口
Chain DOCKER (1 references)

target     prot opt source               destination         

ACCEPT     tcp  --  0.0.0.0/0            192.168.0.3          tcp dpt:15672

ACCEPT     tcp  --  0.0.0.0/0            192.168.0.3          tcp dpt:5672

ACCEPT     tcp  --  0.0.0.0/0            192.168.0.2          tcp dpt:6379

ACCEPT     tcp  --  0.0.0.0/0            192.168.0.4          tcp dpt:80

ACCEPT     tcp  --  0.0.0.0/0            192.168.0.5          tcp dpt:80

ACCEPT     tcp  --  0.0.0.0/0            192.168.0.6          tcp dpt:33246

以上是iptables出来的的不同container的IP和port


1.2 新建的docker container 完成以上网络配置的过程大致如此:

首先在主机上创建虚拟网卡veth pair设备,成对出现,组成一个数据通道。一端在container里,并命名为eth0,另一端放在主机中以veth。。命令,用$brctl show如下:

bridge name bridge id STP enabled interfaces

docker0 8000.0242a707f4fc no veth0dca6c1

veth530a377

vethb6dcd90

vethe08439b

vethe56b601

vethfc60fba


然后会分配一个IP给container,并设置docker0的ip地址为容器的默认网关

1.3 bridge模式下的容器通信

在bridge模式下连在同一网桥下的容器可以相互通信。

容器发包出去的过程:ip包会从container发往自己默认的网关docker0,到包到达docker0时就时到达了主机,这时候会查询主机的路由表,发现包应该从主机的网卡eth0出去,如下的iptables的规则就起作用,对包做snat转换,将原地址转成eth0的地址,这样对于外部来说docker容器就是不可见的:

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

容器接受包的过程,需要用到主机的端口映射:

看ipbtales:

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination         

DOCKER-ISOLATION  all  --  anywhere             anywhere            

DOCKER     all  --  anywhere             anywhere            

ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

ACCEPT     all  --  anywhere             anywhere            

ACCEPT     all  --  anywhere             anywhere            

DROP       all  --  anywhere             anywhere            

 对主机相应端口的流量进行dnat转换,将流量发往container

上述就是小编为大家分享的docker和iptables的关系是什么了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI