百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

Docker网络优化方案,你认为哪种将引爆未来?

connygpt 2024-12-27 16:03 5 浏览

ICT架构师技术交流 微信号

分析和交流ICT行业最前沿技术,分享更多存储、服务器、数据中心、网络、软件定义和虚拟化等相关知识,旨在知识交流、开放共享和共同进步。

上一篇文章Docker原生网络和实现原理中,我们讨论了Docker原生网络实现原理,在Docker原生网络模型在保证端口映射、链接正确的情况下,可实现同一宿主机上容器间的通信和宿主机之间的通信。也在前期文章Openstack Nova如何实现与Hypervisor对接中提到了Nova如何与Docker对接,具体可以参考下图以助于加深理解。

但针对安全或者特殊功能要求特殊的网络环境,Docker这个原生的网络功能就会受限制。于是许多项目致力于扩展Docker网络生态。下面我们重点介绍下这些基于Docker网络优化的6个项目及方案。

Libnetwork方案介绍

Libnetwork是Docker公司正在开发的新的网络底层架构,由libcontainer和Docker Engine中的网络相关的代码合并而成。Libnetwork的目标是引入了容器网络模型(CNM),并为应用程序提供一致的编程API接口以及网络抽象。CNM得到了网络方面的合作伙伴Cisco、IBM、Joyent、Microsoft、Rancher、VMware和Weave的支持,使Libnetwork发展为一个跨平台的容器网络管理工具。

Libnetwork的容器网络模型包含了三个重要概念,Network Sandbox,Endpoint和Network。

网络沙盒Network Sandbox承载Docker容器中一个网络配置的隔离、独立运行环境。Endpoint用于在某个网络上进行网络通讯的接口,一个Endpoint只能加入一个network Sandbox,同时,多个Endpoint也可以在一个网络沙盒中共存。Network就是一个唯一的、可识别的endpoint组,组内endpoint可以相互通讯。不同网络组内的endpoint不能通信。可以创建两个完全隔离的Frontend

network和Backend network。

Pipework方案介绍

Pipework是由Docker开发者通过Shell开发,作为一个权宜之计来简化Docker网络配置流程,这个项目使得高级网络配置变得容易,能够自动完成一些网络功能配置,但功能有限。

Pipework首先会检查是否存在br0网桥,若不存在,就自己创建。若"ovs"开头,就会创建OpenVswitch网桥,以"br"开头,创建Linux网桥。创建veth pair设备,用于为容器提供网卡并连接到br0网桥。

使用Docker inspect找到容器在主机中的pid,然后通过PID将容器的网络命名空间链接到/var/run/netns/目录下。这么做的目的是,方便在主机上使用ip netns命令配置容器的网络。将之前创建的veth pair设备分别加入容器和网桥中(在容器中默认为eth1)。

最后会配置新网卡eth1的IP。若指定为网关地址,那么pipework会改变默认路由eth0和docker0为该IP,容器通往外网的流量会经由新配置的eth1出去。

Socketplane方案介绍

Socketplane是SND创业公司,目前已经被Docker公司收购,其实现方式是在原有的Docker命令上做了一层封装,通过拦截并修改Docker Client发送给Docker engine的命令来实现网络安全和维护的目前。

Socketplane依赖于OpenvSwitch和Consul。Socketplane作为虚拟交换机实现底层网络通信,Consul实现消息同步和服务发现。SocketPlane在 Socket 层面提供了一个网络的抽象层,对开发者屏蔽VLANs, VXLANs, Tunnels 或TEPs等概念,实现和OpenvSwitch集成,支持多网络和分布式 IP 地址管理,通过可管理的方式去解决各种网络问题。

Weave方案介绍

Weave方案包含两大组件,用户态Shell脚本和Weave虚拟路由容器。Weave虚拟路由容器需要在每个宿主机上布置,把不同宿主机的route容器连接起来。

不同主机间的网络通信依赖于Weave虚拟route,通过route拦截所有普通容器的IP请求,以UDP数据包发送到其他宿主机上的普通容器,实现跨主机的多个容器扁平网络。但是Weave解决了不同主机网络间通信问题。

Flannel方案介绍

Flannel原名为Rudder,是由CoreOS团队开发,这个项目被开发的初衷是为每一个宿主系统提供一个共享、完整的网络子网,配合Google kubernetes使用,但在其他场景下也被用来简化端口映射和网络管理的复杂性。

Flannel和OpenvSwitch设计思路基本一致,在Docker在宿主机上创建一个网桥时,通过采用Flannel自己的网桥替代它。其差别在于Flannel通信是用软的UDP来包装IP数据包,而OpenvSwitch用的是采用SDN思想。Flannel网络配置是写入到etcd集群中,Flannel进程一般运行在三台主机上,Docker启动时,运行的Docker从主机所属的完整子网网段中动态分配IP。

Tinc方案介绍

Tinc是一个轻量的VPN软件,也是一个开源的VPN解决方案,它采用隧道和加密实现。Tinc是一个健壮的解决方案,它能够使私有网络对任何应用透明。

关于Tinc方案介绍的资料并不多,主要借助VPN技术实现数据网络安全传输,由于采用了“虚拟专用网”技术,即用户实际上并不存在一个独立专用的网络,也能保证Docker间数据安全传输。

Docker容器本身具备对内或对外提供服务是原生网络模型和能力,如通过虚拟接口的配置、子网、NAT表管理和iptables等,但是还需要一些网络项目支持,提供了更高级的网络配置和安全控制。

文章已经同步至微信“ICT架构师技术交流”公众号,关注公众号获取更多精彩技术内容。

相关推荐

vue3 组件初始化流程

学习完成响应式系统后,咋们来看看vue3组件的初始化流程既然是看vue组件的初始化流程,咋们先来创建基本的代码,跑跑流程(在app.vue中写入以下内容,来跑流程)import{h,ref}...

Context的典型使用场景

获取应用文件路径基类Context提供了获取应用文件路径的能力,ApplicationContext、AbilityStageContext、UIAbilityContext和ExtensionCon...

web技术分享|AudioContext 实现音频可视化

要实现音频可视化,实现一些炫酷的效果需要借助WebAudioAPI提供的一些方法AudioContext。AudioContext接口表示由链接在一起的音频模块构建的音频处理图,每个模块由一个...

2023-03-21:音视频解混合(demuxer)为MP3和H264,用go语言编写

2023-03-21:音视频解混合(demuxer)为MP3和H264,用go语言编写。答案2023-03-21:#步骤1:安装github.com/moonfdd/ffmpeg-gogoget...

如何在微信小程序中加入音频或视频?

要在微信小程序中加入音频或视频,可以使用以下步骤:1.在小程序页面中引入wx.createInnerAudioContext()或wx.createVideoContext()方法。2.创建音频或...

使用RKE的方式快速部署K8S集群

RKE是一款经过CNCF认证的开源Kubernetes发行版,可以在Docker容器内运行。它通过删除大部分主机依赖项,并为部署、升级和回滚、节点扩容提供一个稳定的路径,从而解决了Kubernetes...

Rancher(k8s)的持久存储卷Volumes(PV/PVC)的使用方法

1.介绍1.1介绍在上一节课里面福哥带着大家学会了使用k8s的负载均衡LoadBalancing(LB)发布集群内部的服务的方法,今天我们要讲讲k8s的持久存储卷Volumes(PVC)的使用方...

基于 Sealos 的镜像构建能力,快速部署自定义 k8s 集群

Sealos是一个快速构建高可用k8s集群的命令行工具,该工具部署时会在第一个k8smaster节点部署registry服务(sealos.hub),该域名通过hosts解析到第一...

Docker、Containerd、RunC分别是什么

什么是RunC上一遍文章《真正运行容器的工具:深入了解runc和OCI规范》已经讲清楚了Runc与OCI。这里再讲解一下概念。Docker、Google、CoreOS和其他供应商创建了开放容...

偷偷爆料下Docker学习,看这一篇就够了!十分推荐!!

一.什么是容器?生活中常将一个能用来承载物料的装置称之为容器,比如碗、盘子,杯子等,容器内可放入各种各样的物料,每一个容器都相互独立,不相互干扰。而我们计算机领域所说的容器通常是指一个包含了完整的运...

Docker网络优化方案,你认为哪种将引爆未来?

ICT架构师技术交流微信号分析和交流ICT行业最前沿技术,分享更多存储、服务器、数据中心、网络、软件定义和虚拟化等相关知识,旨在知识交流、开放共享和共同进步。上一篇文章Docker原生网络和实现原...

Docker容器和存储系统 云舒网络

江松:1986开始接触到苹果电脑,不是MacBook,是APPLEII.用Basic编程序。1999年去欧洲爱尔兰做存储,从并行SCSI协议开始做,到FC1G,4G,8G。2009年回国后进...

基于docker的跨主机WEB容器管理

前言由于我们的一部分服务器,分布在不同的公共网络环境。而且,这些服务器程序,发布都使用了docker,但并没有使用k8s这样的工具。处于离散的管理状态。也考虑过rancher这样的工具,但对于我们来说...

Kubernetes(k8s)docker 和 Containerd 区别

Kubernetes(k8s)、Docker和Containerd都是容器技术领域的重要工具,但它们各自有不同的角色和功能。Docker:Docker是一个开源的容器化平台,它允许开发者将应...

从 Docker 快刀到 K8s 剑法:程序员的云原生武功秘籍

前言在当今云计算的浪潮中,Docker和Kubernetes(K8s)已成为每位程序员必备的核心工具。Docker,如同一把锐利的快刀,能够迅速、简洁地将应用及其依赖封装成镜像,实现便捷的打包与发...