栏目头部广告

Docker容器网络管理

一、Docker单主机容器通信介绍

基于对net namespace的控制,docker可以为在容器创建隔离的网络环境,在隔离的网络环境下,容器具有完全独立的网络栈,与宿主机隔离,也可以使容器共享主机或者其他容器的网络命名空间,基本可以满足开发者在各种场景下的需要。

容器网络模式

. Docker支持5种网络模式

(1)bridge:默认网络,Docker启动后默认创建一个docker0网桥,默认创建的容器也是添加到这个网桥中。
(2)host:容器不会获得一个独立的network namespace,而是与宿主机共用一个。
(3)none:获取独立的network namespace,但不为容器进行任何网络配置。
(4)container:与指定的容器使用同一个network namespace,网卡配置也都是相同的。
(5)自定义:自定义网桥,默认与bridge网络一样。

. Bridge 桥接模式的实现

Docker网络管理(图1)

. Host 网络模式

Docker网络管理(图2)

. Container 网络模式

Docker网络管理(图3)

二、容器网络访问原理

2.1 Linux IP信息包过滤原理

Docker主要通过netfilter/iptables实现网络通信。iptables由netfilter和iptables组成,netfilter组件是Linux内核集成的信息包过滤系统,它维护一个信息包过滤表,这个表用于控制信息包过滤处理的规则集。而iptables只是一个在用户空间的工具,用于增删改查这个过滤表的规则。

filter(过滤)INPUT、OUTPUT、FORWARD
nat(地址转换)PREROUTING、POSTROUTING、OUTPUT
mangle(拆包、修改、封装)INPUT、OUTPUT、PREROUTING、POSTROUTING、OUTPUT
raw(数据包状态跟踪)PREROUTING、OUTPUT

Docker网络管理(图4)

2.2 容器网络解读

(1)容器访问外网

[root@10-27-0-224 ~]# iptables -t nat -nL
……

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  172.18.0.0/16        0.0.0.0/0           
MASQUERADE  all  --  172.17.0.0/16        0.0.0.0/0           
MASQUERADE  tcp  --  172.17.0.2           172.17.0.2           tcp dpt:80

……

(2)外部网络访问容器

[root@10-27-0-224 ~]# iptables -t nat -nL
……

Chain DOCKER (2 references)
target     prot opt source               destination         
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           
DNAT       tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 to:172.17.0.2:80

Docker网络管理(图7)

2.3 busybox容器测试

(1)准备busybox环境

【注】busybox默认安装的有网络工具

[root@GZ /]# docker run -itd --name bs01 busybox                  # 创建容器bs01
05ac86c575c5c118d055742561efc1c1bf55f2786b22931b4f97a18f62b18858

[root@GZ /]# docker exec -it bs01 sh                              # 进入容器

# 查看bs01的ip地址

Docker网络管理(图6)

# 测试容器和互联网的连通性

Docker网络管理(图7)

# 查看iptables的表项和NAT表项

Docker网络管理(图10)

(2)SNAT容器访问外网

Docker网络管理(图11)

【注意】docker nat封装的是docker创建的网桥段。

# 查看容器路由表

Docker网络管理(图12)

# 查看宿主机docker网桥IP

Docker网络管理(图13)

(3)DNAT外网访问容器

[root@GZ /]# docker run -itd --name nginx02 -p 88:80 nginx         # 不加-p也可手写规则
333b69283ef0e1a677add340325c2e4fe305f9a4a8cadb8f4e4c9f84e2233777

Docker网络管理(图14)

作者:UStarGao
链接:https://www.starcto.com/docker/108.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处

UCloud云平台推荐


UCloud新用户专属注册连接

UCloud CDN超值特惠专场

UCloud全球云主机(UHost/VPS)大促页面

UCloud快杰云主机大促页面

文章页广告

随便看看

栏目底部广告
`