DaoliNet DaoliNet介绍: 软件定义网络(SDN)系统

程序名称:DaoliNet DaoliNet介绍:

授权协议: Apache

操作系统: 跨平台

开发语言: Google Go

DaoliNet DaoliNet介绍: 介绍

DaoliNet是道里云公司自主研发的为基于Docker的应用平台量身打造的动态敏捷高效网络技术,DaoliNet将以全新的技术变革,通过技术开源模式,为全球Docker容器网络贡献价值。

Docker是目前最火的容器技术,而DaoliNet是一个软件定义网络(SDN)系统,其设计目的是为Docker容器提供动态、高效的链接。在Docker容器中,微服务工作负载具有轻量且短暂的性质,DaoliNet恰好适用于这种性质。

DaoliNet介绍:

顶层特点

资源高效:当容器处于相互不主动通信,但可随时切换到提供全连接性能的状态下,容器之间的连接几乎不消耗主机资源。这同容器高效利用主机CPU资源的方式相同。使用者可以从服务器资源中获得更多;

任意分布:Docker服务器可以是办公室或家中防火墙内的笔记本电脑或PC机,也可以是自建数据中心内的服务器,亦或诸如AWS的公共云中的虚拟机,跨数据中心的通信始终加密;

网络虚拟化:可以为容器选择任意CIDR IP地址,并且在物理位置改变后,容器保持IP地址不变;

使用Open-V-Switch(OVS)的纯软件实现:可提供网络功能,如分布式交换机、路由器、网关和防火墙。系统部署采用简单的即插即用。

架构

DaoliNet的网络体系结构基于OpenFlow标准。它使用OpenFlow控制器作为智能控制平面,并用Open-V-
Switches(OVSes)实现数据通路。DaoliNet中的OpenFlow控制器逻辑上为集中化的实体,但实际上为一组HA分布式类Web服务代理。OVSes在Linux内核中无所不在,因此也存在于所有Docker服务器中。

在DaoliNet网络中,所有Docker服务器处于同一以太网,彼此或实际连接或VPN连接。每个Docker服务器都像虚拟路由器一样工作,所有容器工作负载都托管在该服务器上。这些虚拟路由器遵循OpenFlow技术,不运行任何路由算法。当一个容器初始化连接时,所涉及的虚拟路由器将由OpenFlow控制器实时配置,从而建立路由路径。

图1 DaoliNet的架构图

工作过程

当容器发起连接,作为源路由器,宿主Docker服务器中的OVS将给OpenFlow控制器发出一个PacketIn请求。该请求是起始容器的第一个数据包。OpenFlow控制器知晓系统中作为OpenFlow路由器的全部Docker服务器,并且可发现其PacketIN;它还可以识别另一个作为目标工作负载,并承载容器的Docker服务器。第二个Docker服务器是连接的目标路由器。OpenFlow控制器将响应一对PacketOut流,其中一个流用于源服务器,另一个用于目标服务器。PacketOut流将在两个容器之间建立热插拔路由,如图2“热插拔路由的建立”所示。

图2 热插拔路由的建立

热插拔路由一般包括3个IP跳数:(1)src-容器- src -服务器;(2)src -服务器-dst-服务器;(3)dst-服务器-dst-
容器。在两个容器承载于同一Docker服务器的情况下,PacketOut流路由仅包括一跳:src-容器- dst
-服务器。如图3“热插拔路由的IP跳数”所示。

图3 热插拔路由的IP跳数

当一个连接变为空闲,并大于时间阈值,热插拔路由流将暂停,同时将其删除以释放服务器资源。由于热插拔路由建立速度快,所删除的闲置连接可以在重新连接时被重新热插拔。因此作为DaoliNet路由器,Docker服务器将在无连接,无资源消耗的状态下工作。这种网络资源利用率的风格与容器利用服务器CPU的风格完全匹配,因为闲置的容器会消耗很少的服务器资源。DaoliNet是一种用于连接Docker容器的动态高效的网络技术。

用于容器的简单网络

在DaoliNet中,系统中的Docker服务器正处于一种简单的状态,即彼此之间完全独立,互不知晓。该体系结构不仅节约了资源利用率,更重要的是,Docker服务器之间的独立关系极大简化了资源的管理。扩展资源库和即插即用过程(将服务器添加到库并通知OpenFlow控制器)一样简单。在所需的路由器之间没有复杂的路由表查找和更新,也没有必要使用Docker服务器来成对地运行数据包封装协议,因为这样做不仅资源利用率低,而且会使网络诊断和故障排除工具(如跟踪路由)失效。

安装

分为安装环境准备和安装两个步骤,点击此处查看具体安装步骤

使用指南

在开始使用前,请确保系统已经完成安装过程,同时确保各个服务都正常启动。DaoliNet提供了一套命令行工具实现如下功能:

  • 使用Group connect/disconnect由使用DaoliNet driver的Docker network创建的子网,在同一子网的容器默认连通;

  • 在任何主机中使用connect/disconnect连接任意两个容器;

  • 设置防火墙策略控制容器访问行为。

  • 创建Docker网络

  • 网络控制和管理

DaoliNet DaoliNet介绍: 官网

https://github.com/daolinet/daolinet

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Cyclone是一个打造容器工作流的云原生持续集成持续发布平台。 Cyclone主要致力于将代码从本地开发环境用任意容器引擎封装搬运到测试或者生产环境运行。Cyclone包括一下特性:
Kui Shell 为构建云原生应用程序提供了新的开发经验。通过将熟悉的 CLI 的功能与高影响力区域中的可视化相结合,Kui 使用户能够操作复杂的
Eclipse MicroProfile 是一个 Java 微服务开发的基础编程模型,它致力于定义企业 Java 微服务规范,MicroProfile
Kabanero 构建在 Knative、Istio 与 Tekton 之上,提供构建、流量管理与 CI/CD 等能力,同时支持与 Eclipse
Antrea 是一个 Kubernetes 网络解决方案,旨在实现 Kubernetes 原生。它使用 Open vSwitch 作为网络数据平面,在 Layer3/4 上运行,以为
Linkerd 是一个提供弹性云端原生应用服务网格(service mesh)的开源项目,也是面向微服务的开源 RPC 代理。它的核心是一个透明代理。
YugaByte 是用于构建关键型应用的云原生数据库。 YugaByte 使用 C++ 开发,支持 Cassandra 查询语言(CQL)以及 Redis 协议,对 PostgreSQL
Gloo 是一个基于 Envoy 的 Kubernetes 原生入口控制器和下一代 API 网关。Gloo 在函数级路由方面表现卓越,它支持传统应用程序、微服务与 Serverless。Gloo 设计独特,可支持混合应用,其中的多种技术、架构、协议
YugaByte DB 是一个高性能、云原生的分布式 SQL 数据库。 值得关注的特性包括:
ChubaoFS(储宝文件系统)是为大规模容器平台设计的分布式文件系统。它由元数据子系统、数据子系统和资源管理器组成。ChubaoFS
YugaByte 是用于构建关键任务应用程序的云原生数据库。此 repo 是 YugaByte Community Edition。
Draft 是由微软出品的一个帮助开发者在 Kubernetes 上快速创建云原生应用的工具。使用该工具,你可以不需要知道 Docker 或者
Camel K 是一个轻量级集成框架,它使得可以直接在 Kubernetes 与 Knative 上运行Camel。
APISIX 是一个基于云原生、高速可扩展的开源微服务网关节点实现,其自身主要优势是高性能和强大的扩展性。
Open Application Model 是什么? Open Application Model 是一个用来构建云原生应用的规范。它描述了一个模型,开发人员可以在其中定义应用程序组件。应用程序操作员负责创建这些组件的实例并为它们分配应用程序配
ContainerOps 是云原生(Cloud Native)的 DevOps Orchestration。定义 DevOps 组件的基本容器,如Docker 或 rkt。 在浏览器中使用 WYSIWYG 编辑器绘制 DevOps 工作流程,混合 DevOps 组件和现有的
Gravity 是一个开源工具包,为云原生应用程序提供真正的可移植性。它允许开发人员将 Kubernetes
iSula 是一种云原生轻量级容器解决方案,可通过统一、灵活的架构满足 ICT 领域端、边、云场景的多种需求。
Rook将文件、数据块和对象存储系统引入到Kubernetes集群,与其他正在使用存储的应用程序和服务一起无缝运行。通过这种方式,云原生集群可以在公有云和本地部署中自给自足并且具备可移植性。该项目的开发目的是使企
Camel Quarkus 致力于将 280+ Camel 组件移植和打包为 Quarkus 扩展。 Camel 是一个基于规则的路由以及媒介引擎,它提供了一个基于 POJO 的企业集成模式的实现,开发者可以采用其强大且十分易用的 API(Java