centos7下安装docker(15.1跨主机网络)
之前学习了单个host上的网络,我们知道单个host上的网络有:none,host,bridge和joined,他们解决了单个host上面的容器通信的问题;接下来我们讨论跨主机间容器通信的方案
跨主机的网络方案包括:
1.docker原生的overlay和macvlan
2.第三方方案:常用的包括flannel,weave,calico
docker 网络是一种非常活跃的技术领域,不断有新方案开发出来:
这么多的方案是通过:libnetwork以及CNM与docker集成在一起的
libnetwork&CNM
libnetwork是docker容器网络库,最核心的内容是其定义的container network model(CNM),这个模型对容器网络进行了抽象,由一下三类组件组成:
Sanbox:
Sandbox是容器的网络栈,包括容器的interface,路由表和DNS设置。linux network namespace是Sandbox的标准实现。Sandbox可以包含来自不同network的endpoint
Endpoint
Endpoint的作用是将Sandbox接入network。Endpoint的典型实现是veth pair,后面将举例子。一个Endpoint只能属于一个网络,也只能属于一个Sandbox
Network
network包含一组Endpoint,同一Network的endpoint可以直接通信。Network的实现可以是linux bridge,VLAN等
下面是CNM的示例:自己瞎画的,绝非盗图,哈哈哈
如图所示:有两个容器,一个容器一个Sandbox,第一个容器有两个Endpoint,一个连接到Network1中对应的endpoint1,一个连接到Network2中的endpoint2,这里体现了一个endpoint只能属于一个Sandbox,一个Network,因为endpoint是通过veth pair实现的,要一一对应;第二个容器也有一个Sandbox,endpoint连接到Network2;因为endpoint2与endpoint3都在Network2中,所以两个容器之间能够相互通信
libnetwork CNM 定义了容器的网络模型,按照该模型开发出的driver就能与docker host协同工作,实现容器网络。docker原生的driver包括none,bridge,overlay和macvlan,第三方driver包括flannel,weave,calico等
下面我们以docker bridge driver为例讨论libnetwork CNM是如何实现的
这张图我们在学习单个host网络的时候已经学习过
1.两个Network:默认网络“bridge”和自己创建的my_net2两个网络,实现方式是linux bridge:docker0和br-5d86。。。
2.三个Endpoint,由veth pair实现,一端vethxxx挂在linux bridge上,另一端eth0挂在容器内
3.三个Sandbox,由Network Namespace实现,每个容器有自己的Sandbox
- centos7下安装docker(15.7容器跨主机网络---calico)
- centos7下安装docker(15.6docker跨主机网络---Weave)
- centos7下安装docker(15.3跨主机网络-macvlan)
- centos7下安装docker(15.2跨主机网络-overlay)
- 安装Centos7过程中网络和主机名:显示没有可用网络设备
- centos7下安装docker(15.4跨主机网络-flannel)
- centos7下安装docker(12.5容器在单个host上的网络总结)
- centos7下安装docker(12docker网络)
- centos7下安装docker(15.5容器跨主机网络--flanneld)
- centos7下安装docker(15.8docker跨主机容器通信总结)
- 02 - Centos7中安装Docker、虚拟机的网络配置
- centos7下安装docker(12.1bridge网络)
- centos7安装桥接的网络后,主机开机无网络
- docker-compose 安装redis sentinel,共享主机网络模式
- Docker系列之CentOS7安装Docker(一)
- CentOS7 安装docker
- CentOS7 安装docker
- centos7上安装docker以及一些小问题
- centos7 minimal 配置网络,yum库, 安装所需包(ifconfig)
- 十、Docker网络以及跨宿主机通信