本节索引:
一、Docker networking相关概念
二、Docker单主机容器通信
三、Docker单主机网络配置示例
四、Dokcer跨主机容器通信介绍
一、Docker networking相关概念
Docker单主机网络创建过程:
1、创建一对虚拟接口,分别放到本地主机和新容器的命名空间中。
2、本地主机一端的虚拟接口连接到默认的docker0网桥或指定网桥上,并具有
一个以veth开头的唯一名字,如veth1234
3、容器一端的虚拟接口将放到新创建的容器中,并修改名字为eth0。这个接口
只在容器的命名空间可见。
4、从网桥可用地址段中获取一个空闲地址分配给容器的eth0(如:172.17.0.2/16),
并配置默认路由网关为docker0网卡的内部接口docker0的IP地址。
完成这些配置后,容器就可以使用它所能看到的eth0虚拟网卡来连接其他容器和
访问外部网络。
另外,可以在docker运行时通过–net参数来指定容器的网络配置,有四个可选值:
–net=bridge:Bridged container 桥接式容器
–net=host:Joined container 联盟式容器
–net=none:Closed container 闭合式容器
–net=container:Open container 开放式容器
四种容器networking结构对比:
二、Docker单主机容器通信
1、bridge模式:
docker容器默认使用bridge模式,在Docker网桥上为容器创建新的网络栈。
示例:bridge模式
宿主机将会创建一块虚拟网卡,网卡工作模式为桥接,默认地址为:172.17.0.1/16
以默认网络类型(–net=bridge)运行一个容器test
docker run –name test -it –rm busybox:latest
也可从容器外注入配置信息,例如:
docker run –name test -it –rm –dns 114.114.114.114 –add-host www.wxlinux.com:1.1.1.1 busybox:latest
2、host模式
让容器使用宿主机的用户空间,和物理机共用一套TCP/IP协议栈、IP地址;拥有完全
的本地主机接口访问权限,可以跟主机其他root进程一样打开低范围端口,还可以让
容器做一些影响整个主机系统的事情,例如重启主机。因此使用此选项时要非常小心。
示例:host模式
以host网络类型运行一个容器test
docker run –name test –network host -it –rm busybox:latest
3、none模式
让Docker将新容器放到隔离的网络栈中,但是不进行网络配置。之后,用户可以自己
进行配置
示例:none模式
4、container模式
也称为联盟式容器:Joined container
让Docker将新建容器的进程放到一个已存在的容器的网络栈中,新容器进程有自己的文件
系统、进程列表和资源限制,但会和已存在的容器共享IP地址和端口等网络资源,两者进
程可以直接通过lo环回接口通信
示例:container模式
启动第一个容器
docker run –name test1 -it -rm busybox
启动第二个容器,共享test1容器的网络资源
三、Docker单主机网络配置示例
示例一:修改容器默认网桥地址
自定义docker0桥的网络属性信息:/etc/docker/daemon.json文件
{
“bip”: “192.168.1.5/24”,
“fixed-cidr”: “10.20.0.0/16”,
“fixed-cidr-v6”: “2001:db8::/64”,
“mtu”: 1500,
“default-gateway”: “10.20.1.1”,
“default-gateway-v6”: “2001:db8:abcd::89”,
“dns”: [“10.20.1.2″,”10.20.1.3”]
}
核心选项为bip,即bridge ip之意,用于指定docker0桥自身的IP地址;其它选项可通过此地
址计算得出。
systemctl restart docker
示例二:docker远程连接其他docker(默认没开启)
dockerd守护进程的C/S,其默认仅监听Unix SOcket格式的地址,/var/run/docker.sock;
如果使用TCP套接字,
vim /etc/docker/daemon.json
“hosts”: [“tcp://0.0.0.0:2375”, “unix:///var/run/docker.sock”]
也可向dockerd直接传递“-H|–host”选项;
示例:
docker主机IP:192.168.30.10
本地镜像列表如下:
vim /etc/docker/daemon.json
重启docker服务
systemctl restart docker
远程访问IP地址:192.168.30.10的镜像
docker -H 192.168.30.10:2375 image ls
示例三:创建另外一个bridge网络桥
默认docker启动后,自带一个docker0的网桥,地址为172.17.0.1/16
创建一个名称为mybr0,地址为172.26.0.0/16的网桥
docker network create -d bridge –subnet “172.26.0.0/16” –gateway “172.26.0.1” mybr0
查看网桥
四、Docker跨主机容器通信介绍
隧道方案:
Overlay:一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网络不进行大
规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于
IP的基础网络技术为主。Overlay 技术是在现有的物理网络之上构建一个虚拟网络,上
层应用只与虚拟网络相关。
Docker: 跨主机集群网络解决方案的一种,可以用于连接部署在多台主机上的 Docker
容器,使用网络的应用程序不必去配置端口映射等信息,Weave的通信支持加密,所以
用户可以从一个不受信任的网络连接到主机。
Flannel:一个专为kubernetes定制的三层网络解决方案,主要用于解决容器的跨主机通信
问题。
隧道方案优缺点:
优点:对底层的网络没有过高的要求,一般来说,只要是在一个三层可达网络里,就能构建
出一个基于隧道的容器网络。
缺点:随着节点规模的增长复杂度会提升,大规模集群情况下网络问题跟踪复杂
路由方案:
Calico:是一个纯三层的虚拟网络方案,Calico 为每个容器分配一个IP,每个 host都是
router,把不同 host 的容器连接起来。与VxLAN不同的是,Calico不对数据包做额外封
装,不需要 NAT 和端口映射,扩展性和性能都很好。
与其他容器网络方案相比,Calico 还有一大优势:network policy。用户可以动态定义 ACL
规则,控制进出容器的数据包,实现业务需求。
MacVLAN:Linux操作系统内核提供的网络虚拟化方案之一,更准确的说法是网卡虚拟化方
案。它可以为一张物理网卡设置多个mac地址,相当于物理网卡施展了影分身之术,由一
个变多个,同时要求物理网卡打开混杂模式。针对每个mac地址,都可以设置IP地址,本
来是一块物理网卡连接到交换机,现在是多块虚拟网卡连接到交换机。
路由方案优缺点:
优点:从三层或者两层实现跨主机容器互通,没有NAT,效率比较高,和目前的网络能够融合
在一起,每一个容器都可以像虚拟机一样分配一个业务的IP。
缺点:如果几万新的容器IP冲击到路由表里,导致下层的物理设备没办法承受;而且每一个容
器都分配一个业务IP,业务IP会消耗很快。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/104693