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,如同一把锐利的快刀,能够迅速、简洁地将应用及其依赖封装成镜像,实现便捷的打包与发...
- 一周热门
- 最近发表
- 标签列表
-
- kubectlsetimage (56)
- mysqlinsertoverwrite (53)
- addcolumn (54)
- helmpackage (54)
- varchar最长多少 (61)
- 类型断言 (53)
- protoc安装 (56)
- jdk20安装教程 (60)
- rpm2cpio (52)
- 控制台打印 (63)
- 401unauthorized (51)
- vuexstore (68)
- druiddatasource (60)
- 企业微信开发文档 (51)
- rendertexture (51)
- speedphp (52)
- gitcommit-am (68)
- bashecho (64)
- str_to_date函数 (58)
- yum下载包及依赖到本地 (72)
- jstree中文api文档 (59)
- mvnw文件 (58)
- rancher安装 (63)
- nginx开机自启 (53)
- .netcore教程 (53)