网络虚拟化 软件定义网络
软件定义网络(SDN)是一种动态,可管理,具有成本效益和适应性强的联网技术,适用于当今应用程序的高带宽,动态性质。 通过使用SDN架构,IT运营团队可以通过集中面板控制复杂网络拓扑中的网络流量,而不必手动处理每个网络设备,例如路由器和交换机。
快速增长的移动内容,服务器虚拟化和混合云服务是导致网络行业重新考虑网络体系结构的一些趋势。 传统的网络体系结构主要建立在分层拓扑中的多层网络交换机上。 但是,要解决分层体系结构中来自多个混合基础架构(例如云)的快速增长的应用程序工作负载,将变得更加困难。
同时,企业严重担心如何隔离跨多个不同数据中心和云服务的多个应用程序容器的安全性和网络。 从1.10版本开始,Docker容器提供了安全的计算模式配置文件以放弃特权; 默认设置还不错,但是它们仍然留下了容器可以执行的270个系统调用。 例如,如果在容器中启用了CAP_NET_ADMIN以便将路由添加到其路由表中,那么搜索足够长的时间,将会有多种方法利用该系统。
使用SDN隔离Linux容器
相反,您可以使用SDN处理Linux容器的网络隔离。
容器网络接口 (CNI)是一个库定义和一组工具,用于通过许多受支持的插件在Linux容器中配置网络接口。 CNI项目隶属于Cloud Native Computing Foundation (CNCF)。 多个插件可以在一个容器中同时运行,该容器参与由不同插件驱动的网络。 网络以JSON格式写入配置文件中,并在调用CNI插件时实例化为新的名称空间。
许多流行的容器运行时,例如Kubernetes , OpenShift , Cloud Foundry和Apache Mesos ,都在使用CNI定义网络插件和Linux上应用容器的容器执行之间的通用接口。 有多种实现CNI的方法,以下九个CNI插件(按字母顺序显示)通常用于在Kubernetes上实现联网功能。
Calico在分布式架构(例如Kubernetes,Docker和OpenStack)上提供了高可伸缩性。
Cilium在应用程序工作负载(例如应用程序容器和进程)之间提供网络连接和负载平衡,并确保透明的安全性。
Contiv使用单个网络结构基于容器网络集成了容器,虚拟化和物理服务器。
Contrail通过网络策略实施为多云和混合云提供覆盖网络。
Flannel使开发人员更容易为Kubernetes配置第3层网络结构。
Multus在Kubernetes的单个Pod中支持多个网络接口,以处理SRIOV , SRIOV-DPDK , OVS-DPDK和VPP工作负载。
Open vSwitch (OVS)提供了具有OpenShift和OpenStack上标准管理接口的生产级CNI平台。
OVN-Kubernetes使用覆盖功能为不同主机上的多个容器启用虚拟网络。
与传统的云网络相比, Romana使云网络功能的构建成本更低,更易于操作且性能更好。
一些Linux供应商为Linux容器提供网络隔离的功能和组件。 例如,红帽企业Linux(RHEL)提供了网络名称空间,该名称空间允许容器使用单独的虚拟网络堆栈,回送设备和进程空间。 您可以将虚拟设备或真实设备添加到容器中,为其分配IP地址,甚至使用完整的iptables规则。
除了网络名称空间之外,SDN还应通过使用多租户插件在多个名称空间之间提供隔离来提高安全性。 这意味着默认情况下,来自一个名称空间的数据包将对其他名称空间不可见,因此来自不同名称空间的容器无法向其他名称空间的Pod和服务发送数据包或从其接收数据包。 这些功能对于隔离开发人员,测试和生产网络很有用。
结论
Linux容器是用于在混合云中开发,部署和管理企业应用程序的最流行技术。 很难在多个开发人员之间协调端口,这会使用户面临他们无法控制的集群级问题。 幸运的是,由于企业开发人员需要消除容器化环境中的手动网络配置,并且网络工程师已准备就绪(除非对工作安全性有误解的人除外),所以许多开源CNI项目正在发展或整合中。 选择上面列出的CNI插件之一,以更快,更轻松,更方便的方式进行动态端口分配,网络隔离和安全。
翻译自: https://opensource.com/article/18/11/intro-software-defined-networking
网络虚拟化 软件定义网络