Windows容器网络

本文讲的是Windows容器网络,【编者的话】下面请允许我激动的介绍Windows容器以及微软和Docker的合作。我们团队投入大量资源研发出Windows Server Technical Preview 5容器网络堆栈,除借鉴Docker的管理经验外,还研发出Windows容器特有的功能和特性。本文将围绕Windows容器的网络堆栈,讲述如何使用Docker让容器网络连通,以及微软如何使容器成为基于Microsoft Azure Stack所构建的现代数据中心的一阶对象。

简介

Windows容器可应用在不同类型的应用场景下,从运行Node.js的Web服务器到数据库,再到视频流。这些应用都需要通过网络连接实现服务发布。那么Windows容器的网络堆栈是什么样子的呢?如何为一个容器分配IP地址或将容器Endpoint连接到网络?以及如何设置最大网络带宽和ACL规则等网络高级策略呢?

下面通过这张容器网络堆栈图(图1)帮助我们加深理解。

图1 Windows容器网络堆栈

所有运行容器的宿主机可以是一台物理服务器、一个Windows客户端、或者一台虚拟机。假如容器宿主已经通过一张NIC卡接入WiFi或以太网实现了网络连接,并需将网络连接扩展到容器自身。容器宿主可使用Hyper-V虚拟交换机实现宿主机到容器的连接,并通过Host vNIC(Windows服务器容器)或Synthetic VM NIC (Hyper-V 容器)两种方式实现容器到vSwitch之间的连接。相比于此,Linux容器技术使用bridge设备而非Hyper-V虚拟交换机,使用veth 偶对而非 vNICs / vmNICs来提供容器间的基础2层(以太网)连接。

Hyper-V虚拟交换机本身并不允许外网访问运行在容器内的网络服务。我们需要3层(IP)连接性来确保数据包能正确路由到目的地。除IP外还需支持更高层的网络协议,如TCP和UDP协议,通过特定端口号寻址到容器中运行的服务(例如,TCP端口80通常用来访问WEB服务)。为了让容器更有用,还需在容器中提供4~7层服务,如DNS、DHCP、 HTTP、SMB等。所有以上特性均会在Windows容器网络中得到支持。

Docker网络配置和管理堆栈

Windows Server Technical Preview 5 (TP5) 提供了通过Docker客户端及Dockers引擎RESTful API接口两种方式安装容器网络。网络配置根据设置的范围,既可在容器网络创建时配置也可在容器创建时配置。相关MDSN文章可提供更详细的信息。

Windows容器网络管理堆栈使用Docker作为管理入口,并将 Windows宿主网络服务( Host Network Service ,HNS)作为服务层,用来创建下层网络(如,vSwitch,WinNAT等)中的“管道”。Docker引擎通过一个网络插件(libnetwork)实现同HNS的通信。请参考图2了解管理堆栈。

图2 管理堆栈

管理堆栈使Docker网络通过HNS实现同Windows网络层的插件式对接。因为创建过程的自动化,用户无需自己设置静态端口映射或防火墙策略(如NAT转换)。

举例:通过Docker创建静态端口映射

注意:NetNatStaticMapping (及防火墙策略)都将自创创建

网络模式

Windows容器的网络连接有四种不同的网络模式(或驱动)。不同模式的选择取决于容器如何被外网客户端访问,IP地址如何分配,网络策略如何执行等因素。

每种网络模式都将使用内部或外部虚拟交换机(由HNS自动创建)来打通容器到容器宿主的物理(或虚拟)网络。下面就四种模式以下给出使用建议。关于每种模式的详细信息请到MDSN文章中查找。

  • NAT –默认模式,连接容器到私有IP子网,此模式可方便快捷的应用到任何环境;
  • Transparent –此模式不经过任何网络转换,直接连接容器到物理网络。当一台宿主机上运行过多容器时,请小心使用此模式,可能会快速导致物理网络问题;
  • L2 Bridge / L2 Tunnel –这两种模式通常用在公有云或私有云环境中,以租用虚拟机运行容器的场景下。

注: Windows Server 2016 或者Windows 10 客户端不再支持NAT 虚拟交换模式创建。NAT容器网络可通过在Docker中设定nat驱动或者在PowerShell环境下运行NAT模式来创建。

举例:创建Docker ‘NAT’网络

请注意虚拟交换和NetNat如何被自动创建。

容器网络+软件定义网络(SDN)

容器逐步成为数据中心和企业的一阶实体,同虚拟机相提并论。而IaaS云租户或企业业务部门需要同时支持虚拟网卡和容器Endpoint两种模式下,程序化地定义网络策略(如ACLs、QoS、负载均衡等)。Windows Server 2016 版本的软件定义的网络(SDN)堆栈支持客户在Windows Network Controller使用PowerShell 脚本、SCVMM或微软 Azure Stack新出的Azure Portal 为容器Endpoint 定义网络策略。

在虚拟化环境下,容器宿主可以是一台物理服务器上的虚拟机。Network Controller通过标准的SouthBound 通道(如OVSDB)发送策略给运行在物理服务器上的宿主Agent,宿主Agent将策略传入物理服务器的vSwitch的VFP进行执行。由于网络策略是特定于具体某个IP地址(如,容器Endpoint)的,当多个容器Endpoint被连接到同一张容器宿主网卡时,网络策略仍然可以被细粒度地定义。

L2 Tunnel 网络模式下,所有容器宿主虚拟机的网络流量都将通过物理服务器的vSwitch收发,vSwitch 上的VFP转发扩展将会执行从Network Controller 以及Azure Stack中的高层组件(如Network Resource Provider、Azure Resource Manager、Azure Portal)接收到的网络策略。堆栈架构请参考图3。

图3 容器实现同SDN叠加虚拟网的连接

这样容器可以加入由独立云租户创建的叠加虚拟网(如,VxLAN),实现跨节点集群内的通信以及同其他虚拟机的通信,还可以接收网络策略。

美好未来

未来我们不仅会在Windows操作系统上不断创新,更会贡献更多的代码到GitHub的Docker 开源项目上。我们希望Windows的容器使用者可以使用到更加丰富的网络策略,并通过容器客户端来创建网络策略。我们也希望将网络策略的执行尽可能的更靠近容器Endpoint,来缩减数据路径,提升网络吞吐,降低网络时延。

原文链接:Windows Container Network(翻译:Chilly,审校:滕启明)

原文发布时间为:2016-05-16 

本文作者:chilly_2016

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:Windows容器网络

时间: 2024-12-23 05:01:22

Windows容器网络的相关文章

Docker的Windows容器初体验

系列文章 第一篇 Docker的Windows容器初体验 - 本文 第二篇 阿里云Windows Server 2016环境Docker试用 最近微软发布了Windows Server 2016,其中最让广大开发者和运维同学期待的就是Docker对Windows容器的支持. Windows支持两种不同类型的容器,即 Windows Server 容器和 Hyper V 容器. 这两种类型的容器的使用方式相同,也支持相同的容器映像. 但是它们的实现机制不同,提供了不同的安全隔离级别 Windows

容器网络Calico进阶实践 | 褚向阳

各位晚上好,我是数人云的褚向阳,接下来要跟大家分享的主题是<容器网络Calico进阶实践>. 距离上次聊 Calico 已经过去快半年的时间了,数人云也一直在努力将容器网络方案应用到企业客户的环境中,Calico v2.0 也马上就要发布了,这次跟大家一起感受下新版. 需要说明下,本人跟 Calico 没有任何直接关系,也只是个"吃瓜群众",做为使用者,想跟大家聊聊心得而已. 这次分享的内容主要包括: 简单总结下作为使用者我看到的 Calico 的变化,包括组件,文档和 c

谁来管理Windows容器?IT人员表示‘我说了算’

对于微软的容器产品,用户的态度如何呢?根据市场调查,到目前为止,微软企业用户更倾向于在内部环境中或者自管理的云基础架构中使用Windows Server 2016中的容器功能,而不是单独的Azure容器服务--尽管Azure容器目前已经可用,而Windows Server容器离上市还有几个月的时间. Bala Subra是一家大型出版公司的.NET架构师,他对Windows Server容器已经进行了概念验证测试,他表示"我们需要一个适用于多种平台的解决方案,不只是Linux系统."

windows常用网络命令使用脚本分享

 这篇文章主要介绍了windows常用网络命令使用脚本,包括查看本地网卡接口信息.查看路由.表添加路由.跟踪路由等命令,需要的朋友可以参考下 netCmd.bat    代码如下: #windows常用网络命令   #查看本地网卡接口信息 ipconfig /all   #ping(常用于测试网络连通性) ping www.baidu.com   #路由相关   #1.查看路由表(其中0.0.0.0记录为默认路由配置) route print   #2.添加路由(如果添加-p参数可表示添加永久路

图文解析Windows 8网络和共享中心啦

第一.Windows 8网络和共享中心的打开方式 A.在系统托盘中打开 B.右击传统桌面右下侧网络图标,单击"打开网络和共享中心"即可. 需要注意的是,图中的网络图标为已连接到无线网络模式的图标,根据网络连接方式的不同,另外还有类似计算机样式的网络图标等几种不同的网络图标样式,可以多尝试一下. 我们在控制面板中打开网络和共享中心 第一步:打开控制面板.前文介绍了许多控制面板的打开方式,这里只说一种,使用快捷方式的Win+X,然后单击控制面板.第二步:在控制面板中,单击"网络和

在Docker中使用Open vSwitch创建跨主机的容器网络

本文讲的是在Docker中使用Open vSwitch创建跨主机的容器网络,[编者的话]本文介绍了如何使用Open vSwitch为Docker 1.9.0及以后版本提供网络支持.操作前请先确认你已经按照INSTALL.md 编译,或者通过包管理器安装了Open vSwitch.关于如何安装Docker,请参考www.docker.com上提供的介绍. Docker从1.9.0版本之后提供了跨主机的网络支持.通过将Docker和Open vSwitch整合,则可以利用Open vSwitch v

Windows 容器对比:WinDocks vs. Microsoft

本文讲的是Windows 容器对比:WinDocks vs. Microsoft[编者的话]介绍基于WinDocks的容器和Microsoft的容器之间的区别. WinDocks是在Windows系统层面上的具有独立端的Docker开源应用.作为前微软工程师,我们致力于改善软件开发人员的工作,在2016年3月我们开源了第一个基于Windows的Docker端.基于社区免费版我们培养了大量相关技术人员. 目前,微软发布了Windows Server 2016,并且支持Windows容器技术,那么许

Linux内核为高级容器网络提供关键技术

本文讲的是Linux内核为高级容器网络提供关键技术[编者的话]本文介绍了一个为容器提供网络解决方案的实验性开源项目Cilium,该项目利用Linux的BPF技术在应用层完成容器的网络策略. [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述.架构.日志和监控,部署.自动驾驶.服务发现.网络方案等核心机制分析,进阶篇--Kubernetes调度工作原理.资源管理及源码分析等. 实验性开源项目Cilium使用现有的Linux内核特性为容器提供更快更有力的网络. 容

容器网络概述

本文讲的是容器网络概述[编者的话]本文介绍容器网络,对容器网络的实践. 我在博客中经常讨论关于容器的事情,是因为我在工作中一直在关注着它们. 对于这些新奇容器的东西,最难理解的实际是关于容器的网络问题. 虽然有很多不同的方式来解决容器网络互连问题,并且介绍这方面的文档也很多,但是有些用起来很糟糕.我对这些非常的困惑,因此我试图在这篇博客当中用非专业术语的方式来理清这个问题.(我不喜欢夸夸其谈,但是我对于容器网络文档当前状态真的很沮丧.) 到底容器网络是什么呢? 当我们在容器中运行程序时,你将有两