Docker网络模式剖析

一、网络模式介绍
●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出去。

六、案例数据分享

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值