Docker跨主机网络

简介: Docker跨主机网络

屏幕截图 2023-08-28 185348.png

1.host 借用物理主机网络配置,相当于vmware的桥接

   docker run -itd --name bbox1 --net host busybox

2.none 仅保留lo

   docker run -itd --name bbox2 --net none busybox

3.bridge 默认,地址转换,相当于VMware的nat

   docker run -itd --name bbox3  busybox

4.container 容器共享模式,和其他容器共用一个ip

   docker run -itd --name bbox4 --net container:bbox3 busybox

5.自定义网络,内置名称服务器,可以直接通过容器名互通

docker network create -d bridge testnet1
    docker run -itd --name bbox5 --net testnet1 busybox
    docker run -itd --name bbox6 --net testnet1 busybox
    docker exec -it bbox5 ping bbox6

6.通过connect连接不同网络的容器

docker network create -d bridge testnet2
    docker run -itd --name bbox7 --net testnet2 busybox
    docker network connect testnet1 bbox7
    docker exec -it bbox5 ping bbox7

======================================================

Docker的跨主机网络

网络模型分类:

   overlay:使用分布式数据库保存网络数据实现共享,数据包需要封装解封装

   underlay:使用Linux内核模块,借用物理网卡实现多Mac配置连接容器,性能高,但网络配置比较复杂

常见的网络模型:

跨主机网络意味着将不同主机上的容器用同一个虚拟网络连接起来。这个虚拟网络的拓扑结构和实现技术就是网络模型。

Docker overlay: 如名称所示,是 overlay 网络,建立主机间 VxLAN 隧道,原始数据包在发送端被封装成 VxLAN 数据包,到达目的后在接收端解包。

Macvlan: 网络在二层上通过 VLAN 连接容器,在三层上依赖外部网关连接不同 macvlan。数据包直接发送,不需要封装,属于 underlay 网络。

Flannel: 有两种 backend:vxlan 和 host-gw。vxlan 与 Docker overlay 类似,属于 overlay 网络。host-gw 将主机作为网关,依赖三层 IP 转发,不需要像 vxlan 那样对包进行封装,属于 underlay 网络。

Weave: 是 VxLAN 实现,属于 overlay 网络。

Calico:属于underlay,完全利用路由规则实现动态组网,通过BGP协议通告路由。

各方案的网络模型描述如下:

Distributed Store:

Docker Overlay、Flannel 和 Calico 都需要 etcd 或 consul。Macvlan 是简单的 local 网络,不需要保存和共享网络信息。Weave 自己负责在主机间交换网络配置信息,也不需要 Distributed Store。

IPAM:

Docker Overlay 网络中所有主机共享同一个 subnet,容器启动时会顺序分配 IP,可以通过 --subnet 定制此 IP 空间。

Macvlan 需要用户自己管理 subnet,为容器分配 IP,不同 subnet 通信依赖外部网关。

Flannel 为每个主机自动分配独立的 subnet,用户只需要指定一个大的 IP 池。不同 subnet 之间的路由信息也由 Flannel 自动生成和配置。

Weave 的默认配置下所有容器使用 10.32.0.0/12 subnet,如果此地址空间与现有 IP 冲突,可以通过 --ipalloc-range 分配特定的 subnet。

Calico 从 IP Pool(可定制)中为每个主机分配自己的 subnet。

连通与隔离:

同一 Docker Overlay 网络中的容器可以通信,但不同网络之间无法通信,要实现跨网络访问,只有将容器加入多个网络。与外网通信可以通过 docker_gwbridge 网络。

Macvlan 网络的连通或隔离完全取决于二层 VLAN 和三层路由。

不同 Flannel 网络中的容器直接就可以通信,没有提供隔离。与外网通信可以通过 bridge 网络。

Weave 网络默认配置下所有容器在一个大的 subnet 中,可以自由通信,如果要实现隔离,需要为容器指定不同的 subnet 或 IP。与外网通信的方案是将主机加入到 weave 网络,并把主机当作网关。

Calico 默认配置下只允许位于同一网络中的容器之间通信,但通过其强大的 Policy 能够实现几乎任意场景的访问控制。

性能:

性能测试是一个非常严谨和复杂的工程,这里我们只尝试从技术方案的原理上比较各方案的性能。

最朴素的判断是:Underlay 网络性能优于 Overlay 网络。

Overlay 网络利用隧道技术,将数据包封装到 UDP 中进行传输。因为涉及数据包的封装和解封,存在额外的 CPU 和网络开销。虽然几乎所有 Overlay 网络方案底层都采用 Linux kernel 的 vxlan 模块,这样可以尽量减少开销,但这个开销与 Underlay 网络相比还是存在的。所以 Macvlan、Flannel host-gw、Calico 的性能会优于 Docker overlay、Flannel vxlan 和 Weave。

Overlay 较 Underlay 可以支持更多的二层网段,能更好地利用已有网络,以及有避免物理交换机 MAC 表耗尽等优势,所以在方案选型的时候需要综合考虑

==================================================

## 一、overlay的解决方案

为支持容器跨主机通信,Docker 提供了 overlay driver,使用户可以创建基于 VxLAN 的 overlay 网络。VxLAN 可将二层数据封装到 UDP 进行传输,VxLAN 提供与 VLAN 相同的以太网二层服务,但是拥有更强的扩展性和灵活性。

Docerk overlay 网络需要一个 key-value 数据库用于保存网络状态信息,包括 Network、Endpoint、IP 等。Consul、Etcd 和 ZooKeeper 都是 Docker 支持的 key-vlaue 软件,我们这里使用 Consul。

**环境限制**:

- 必须安装key-value存储服务,如consul

- 宿主机已经安装docker engine

- 宿主机的hostname必须不同

#### 实验环境:

docker01  

docker02                                    

docker03                          

暂时不考虑防火墙和selinux安全问题。

将3台dockerhost防火墙和selinux全部关闭,并且分别更改主机名称。

### 在docker01上的操作。

//运行consul服务。

docker run -d -p 8500:8500 -h consul --name consul --restart always progrium/consul -server -bootstrap

PS: 容器生产之后,我们可以通过浏览器访问consul服务,验证consul服务是否正常。访问dockerHost加映射端口。

http://192.168.8.10:8500

### 修改docker02和docker03的docker配置文件

vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.8.10:8500 --cluster-advertise=ens33:2376
systemctl daemon-reload 
systemctl restart docker

PS:返回浏览器consul服务界面,找到KEY/VALUE----> DOCKER---->NODES,会看到刚刚加入的docker02/docker03的信息。

#### 在docker02上创建一个自定义网络

docker network create -d overlay ov_net1
docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
5ec0c207991c        ov_net1             overlay             global
```

在docker02上创建的网络,我们可以看到它的SCOPE定义的是global(全局),意味着加入到consul这个服务的docker服务,都可以看到我们自定义的网络。

同理如果是用此网络创建的容器,会有两张网卡。

默认这张网卡的网段是10.0.0.0网段,如果想要docker01也可能看到这个网络,那么也只需在docker01的docker配置文件添加相应内容即可。

同理,因为是自定义网络,符合自定义网络的特性,可以直接通过docker容器的名称相互通信,当然也可以在自定义网络的时候,指定它的网段,那么使用此网络的容器也可以指定IP地址。

#### 在docker02创建跨主机网络测试机

docker run -itd --name bbox1 --net ov_net1 busybox

#### 在docker03创建跨主机网络测试机

docker run -itd --name bbox2 --net ov_net1 busybox

docker exec -it bbox2 ping bbox1

===================================

Docker跨主机网络方案之MacVlan

除了overlay,docker 还开发了另一个支持跨主机容器网络的 driver:macvlan。

macvlan 本身是 Linux kernel 模块,其功能是允许在同一个物理网卡上配置多个MAC 地址,即多个interface,每个 interface 可以配置自己的 IP。macvlan 本质上是一种网卡虚拟化技术,Docker用 macvlan 实现容器网络就不奇怪了。

macvlan 的最大优点是性能极好,相比其他实现,macvlan 不需要创建 Linux bridge,而是直接通过以太 interface 连接到物理网络。下面我们就来创建一个 macvlan 网络。

实验环境:

docker01                                     docker02

关闭防火墙和禁用selinux,更改主机名。

#### 1)打开网卡的混杂模式

//需要在docker01和docker02上都进行操作。

ip link set ens33 promisc on

ip link show ens33

#### 2)在docker01上创建macvlan网络

docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1

PS: -o parent=绑定在哪张网卡之上

#### 3)基于创建的macvlan网络运行一个容器

docker run -itd --name bbox1 --ip 172.22.16.10 --network mac_net1 busybox

#### 4)在docker02上创建macvlan网络,注意与docker01上的macvlan网络一模一样。

docker network create -d macvlan --subnet 172.22.16.0/24 --gateway 172.22.16.1 -o parent=ens33 mac_net1

#### 5)在docker02上,基于创建的macvlan网络运行一个容器,验证与docker01上容器的通信。

docker run -itd --name bbox2 --network mac_net1 --ip 172.22.16.20 busybox

#### 6)在docker02上,登录bbox2测试ping bbox1

docker exec -it bbox2 /bin/sh

目录
相关文章
|
1月前
|
应用服务中间件 nginx Docker
Docker网络管理
Docker网络管理
29 1
|
6天前
|
运维 前端开发 Devops
云效产品使用报错问题之流水线打包docker镜像时报网络代理有问题如何解决
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
负载均衡 算法 应用服务中间件
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
Docker Swarm总结+service创建和部署、overlay网络以及Raft算法(2/5)
113 0
|
1月前
|
关系型数据库 MySQL 数据库
虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
虚拟机Linux-Centos系统网络配置常用命令+Docker 的常用命令
48 0
|
1月前
|
应用服务中间件 Docker 容器
在Docker容器和主机之间复制文件/文件夹
在Docker容器和主机之间复制文件/文件夹
46 0
|
1月前
|
应用服务中间件 Docker 容器
如何在Docker容器和主机之间复制文件/文件夹
如何在Docker容器和主机之间复制文件/文件夹
77 1
|
1月前
ping 测试主机之间网络连通性
ping 测试主机之间网络连通性。
58 1
|
2月前
|
JSON Kubernetes Linux
Docker之网络模式
docker基础 网络模式
51 2
|
2月前
|
测试技术 Linux 数据安全/隐私保护
【好用的个人工具】在Docker环境下部署WatchYourLAN轻量级网络IP扫描器
【2月更文挑战第2天】在Docker环境下部署WatchYourLAN轻量级网络IP扫描器
108 0
|
2月前
|
弹性计算 测试技术 数据中心
阿里云香港服务器BGP多线精品网络_CN2性能测试_中国香港主机测试
阿里云香港服务器BGP多线精品网络_CN2性能测试_中国香港主机测试,阿里云香港服务器中国香港数据中心网络线路类型BGP多线精品,中国电信CN2高速网络高质量、大规格BGP带宽,运营商精品公网直连中国内地,时延更低,优化海外回中国内地流量的公网线路,可以提高国际业务访问质量