本文共 1896 字,大约阅读时间需要 6 分钟。
越来越多的人关注新型容器网络软件,来运行可扩展的云应用。就像我们看到的,网络可以通过很多方式连接到容器,尽管最终选择哪个容器还不确定,但是他们提供很多选项来满足不同的基础设施。
容器网络和传统的SDN有什么区别?
SDN系统还处于发展阶段。它经常被创建为物理网络的逻辑版本,通过抽象的端口、网络或子网,又连接到逻辑网络交换机,并且连接到虚拟机上。作为服务项目的OpenStack网络Neutron和其它SDN软件,都支持这一概念。这对那些使用虚拟机的人来说有很多优势,因为他们的工作负载可以镜像到物理服务器上。虽然虚拟机更容易和配置物理机来对比,但他们和现在基于容器的计算相比,相对来说更稳定。随着微服务系统的发展,很多容器都可以被动态配置并迅速删除,所以用户需要一种可以容纳这种情况的网络系统。
关于容器网络的基础知识以及其局限性
从根本上来说,一个和网络相关的容器,反过来,可能也会桥接到网络接口。这也是默认情况下Docker网络系统做的事情,但在实际使用时又显得差强人意。它的局限性在有多个主机的时候会更为严重,因为不同主机上的容器之间不能通话,或者它可以用于容器管理或Kubernetes这种业务流程系统。Docker推出了一个叫libnetwork的新的多主机容器网络架构,可以解决这些问题。
Kubernetes
Kubernetes允许网络在pod中实现服务器部署,是应用程序和容器共享资源的集合。每个pod都被分配一个IP地址,和传统系统不一样,传统系统是每个服务器或虚拟机被分配一个IP地址。Pod不是一个容器,而是容器的集合。相反,容器和端口的协调可以确保应用程序之间相互通信。
这就回到了如何设计并部署应用程序的问题上。APP在容器中部署,反过来在pod中运行,这些APP具有高可用性,并能随时处理故障。相反,在传统的虚拟环境中,还要时刻关注虚拟机,以免出现故障。这就体现了在应用程序负载设计和基础设施运营方面的差异性。
新型SDN系统
传统的SDN架构已经逐步发展成为支持容器部署。像OpenStack或者vSphere这种orchestration架构系统最初是用于虚拟机的,但是现在已经用于运行容器。举个例子来说,Kuryr项目可以把Docker网络映射到OpenStack Neutron网络。VMware的NSX还支持容器部署。当然,这些为了适应容器网络的调整需要保护现有基础设施中的投资。
但是,新的SDN架构是这种情况外的兼容容器的架构。这些新系统对APP开发人员最有用处,因为它不用顾虑低层网络基础设施,而是创建了一个简单视图网络。开发人员关心连通性,但是不太关心传统概念,比如2层网络。3层IP地址对他们来说就足够了,新的SDN系统就专门提供这些。他们可以简化配置,加快部署。
案例
下面是一些新的开源网络系统的例子:
Calico:Calico是一个第3层虚拟化网络服务,它使用内置的Linux网络和BPG协议并基于IP tables做转发,在数据中心中共享路由,不依赖任何硬件,只在网络中进行。这个系统可以运行多种平台,比如OpenStack、Docker和Kubernetes。
Contiv:Contiv是把应用程序与基础设施的业务决策联系起来的一个项目。可用于Docker网络和存储容量的插件。
CoreOS Flannel:Flannel是针对容器网络设计的覆盖SDN系统。它使不同主机上的容器就像在同一主机上一样相互通信。
Weaveworks Weave Net:Weaveworks Weave Net是一个针对容器设计的覆盖SDN,可用于多个平台,并可跨主机工作。它提供自动发现服务,避免端口映射。使构建多个容器组成的应用程序变得更简单。
这些系统之间如何关联?
其实,想知道这些系统之间是如何联系的很难,但所幸的是,开发人员在设计的时候把很多都合并了。像Docker这种基本的容器系统都有一个默认的实现机制,运行在盒子外面,电池是内置的,但是插件可能会用于改变功能,电池可更换。这就类似于OpenStack的Neutron,也是利用插件。
网络是所有容器结合在一起的粘合剂,但是早期很难运用。这些新的SDN系统还有待提高,但真的值得探索。开发和生产团队可以利用它们来简化新的基于容器的应用程序的网络基础设施。根据不同的系统,它可以简化安全性、多数据中心部署等工作。
我建议企业检查新的开源项目,它可以简化并提高开发和运营团队的工作效率。虽然不容易拆封,但是值得一提的是,它常常有专业的公司在背后做指导。
本文转自d1net(转载)