一、网络模式介绍
●Host:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
●Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。
●None:该模式关闭了容器的网络功能。
●Bridge:默认为该模式,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及iptables nat 表配置与宿主机通信。
本文重点介绍默认模式Bridge
二、网桥介绍
网桥可以理解我们熟悉交换机的前身,也可以成为软件形态的交换机。众所周知,交换机是用来实现帧的转换,通俗来说就行实现在同一个网络内不同主机的数据通信,同理网桥也具备该功能
三、虚拟网卡技术
虚拟网卡技术即veth,让两个隔离的网络命名空间之间可以互相通信。(注:命名空间是Linux内核提供的一种进程隔离技术,用于隔离进程的运行环境,包括文件系统挂载点、进程ID、网络接口、UTS名称等。通过使用命名空间,可以创建具有独立运行环境的进程,使其对其他进程和系统资源不可见。) 基于命名空间的解释之后,veth技术是为了实现两个不同网络命名空间进程之间网络通信。
网络命令空间即 network namespace
在 Linux 内核 2.6
版本引入,作用是隔离 Linux 系统的设备,以及 IP 地址、端口、路由表、防火墙规则等网络资源
。
常见命令如下:ip netns help 、/proc/PID/ns
四、Docker网络架构介绍(基于网桥模式)
查看主机上的docker网桥:ip addr show type bridge 默认为docker0
查看绑定docker网桥上的veth: ip addr show|grep docker0
基于网桥模式下,容器网络初始化过程
#初始化ip
ip addr add 172.17.0.2/16 dev veth0
ip addr add 172.17.0.3/16 dev veth1
ip link set veth0 up
ip link set veth1 up
#配置veth
ip link add veth0 type veth peer name veth1
#配置网桥
brctl addr docker0
ip link set dev veth0 master docker0
ip link set dev veth1 master docker0
容器内部网络问题上解决,但是容器怎么跟外网通信呢?
五、iptables和nat介绍
iptables即软件防火墙,就像电脑防火墙一样,拦截数据包防止恶意攻击。核心成员为五链四表
四表
filter: 负责做过滤功能 : INPUT、OUTPUT、FORWARD
nat: 网址地址转换 PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容 PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARO
raw: 负责数据包跟踪 PREROUYING、OUTPUT
五链
1>PREROUTING:主机外报文进入位置,允许的表mangle,nat(目标地址转换,把本机地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
2>INPUT:报文从本机用户空间出去的位置,允许表filter,mangle
3>OUTPUT:报文从本机用户空间出去的位置,允许filter,mangle,nat
4>FOWARD:报文经过路由并且发觉不是本机决定转发、但还不知道从那个网卡出去,允许filter,mangle
5>POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主机出口网卡地址)
流入本机:PREROUTING --> INPUT --> PROCESS(进程)
经过本机:PREROUTING --> FORWARD --> POSTROUTING
本机流出:PREROUTING --> FORWARD --> POSTROUTING
nat即Network Address Translation,可以实现私有网络和公共网络之间的IP地址转换,从而隐藏内部网络的真实拓扑结构。
#添加网关
route add default gw 172.17.0.1 dev docker0
#设置nat转发
iptables -t nat -A POSTROUNTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
注:
命令说明
iptables -t 表 -A 规则 -s 原地址 !非 -o 输出网络接口 -j 操作
MASQUERADE即动态SNAT,会自动读取eth0现在的ip地址然后做SNAT出去。
六、案例数据分享