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 桥接模式的实现
. Host 网络模式
. Container 网络模式
二、容器网络访问原理
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 |
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
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地址
# 测试容器和互联网的连通性
# 查看iptables的表项和NAT表项
(2)SNAT容器访问外网
【注意】docker nat封装的是docker创建的网桥段。
# 查看容器路由表
# 查看宿主机docker网桥IP
(3)DNAT外网访问容器
[root@GZ /]# docker run -itd --name nginx02 -p 88:80 nginx # 不加-p也可手写规则 333b69283ef0e1a677add340325c2e4fe305f9a4a8cadb8f4e4c9f84e2233777
作者:UStarGao
链接:https://www.starcto.com/docker/108.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2024-09-06基于UCloud UDNS产品和NLB产品实现kafka多节点调度
- 2021-02-17搭建图形化容器镜像仓库-harbor
- 2021-06-28Linux 升级内核方法
- 2023-04-25Linux tcp_window_scaling关闭引发限速问题
- 2021-08-10开源对象存储服务MinIO容器化部署