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自动创建)来打通容器到容器宿主的物理(或虚拟)网络。下面就四种模式以下给出使用建议。NAT –默认模式,连接容器到私有IP子网,此模式可方便快捷的应用到任何环境;