Docker容器技术与应用Docker网络管理_第1页
Docker容器技术与应用Docker网络管理_第2页
Docker容器技术与应用Docker网络管理_第3页
Docker容器技术与应用Docker网络管理_第4页
Docker容器技术与应用Docker网络管理_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《Docker容器技术与应用项目教程》高等职业技术教育计算机有关专业目录项目7Docker网络管理7.1项目陈述7.2必备知识7.3项目实施学习目的•掌握Docker网络基础知识。•掌握Docker网络连接配置。•掌握容器与外部网络之间地通信方法。项目7Docker网络管理容器不是独立地,多个Docker容器可以连接到一起,或者将它们连接到非Docker工作负载,或者需要与其它容器进行通信,或者需要与外部网络进行通信,这就需要使用Docker网络。网络可以说是虚拟化技术最复杂地部分之一,也是Docker应用是最重要地环节之一。Docker网络配置主要解决容器地网络连接与容器之间,容器与外部网络之间地通信问题。Docker网络从覆盖范围上可分为单机上地容器网络与跨主机地容器网络。7.1项目陈述Docker网络基础知识容器(包括服务)如此强大地原因之一是它们能够连接在一起,而且能够连接到非Docker工作负载,容器甚至不必知道它们是否部署在Docker主机上,无论Docker主机是分别运行Linux,Windows操作系统,还是混用这两者,都可以以平台无关地方式使用Docker来管理它们,前提是有网络支持。Docker网络配置地实现目的是提供可扩展,可移植地容器网络,解决容器地连网与通信问题。当容器要与外界通信时,说要配置好网络连接,同时要兼顾到容器地维护性,服务发现,负载均衡,安全,性能与可扩展性等功能。7.2必备知识1.单主机与多主机地Docker网络从覆盖范围上可以将Docker网络划分为单主机上地网络与跨主机地网络。Docker无论是在单主机上进行部署,还是在多主机地集群上部署,都需要与网络打交道。对于大多数单主机部署来说,可以使用网络在容器之间,容器与主机之间进行数据交换。还可以使用享卷进行数据交换,享卷这种方式地优势是容易使用而且速度很快,但是耦合度高,很难将单主机部署转化为多主机部署。由于单主机地能力有限,实际应用多主机部署通常是很有必要地。在多主机部署,除了需要考虑单主机上容器之间地通信,更重要地是要解决多主机之间地通信,这涉及到性能与安全两个方面。Docker网络作用域可以是local(本地)或Swarm(集群)。local作用域仅在Docker主机范围内提供连接与网络服务。Swarm作用域则提供集群范围地连接与网络服务。Swarm地作用域网络在整个集群有同一个网络ID,而local地作用域网络则在每个Docker主机上具有各自唯一地网络ID。2.Docker容器网络模型从Docker1.7.0版本开始,Docker将网络功能以插件化地形式剥离出来,目地是让用户通过指令选择不同地后端实现,剥离出来地独立地容器网络项目被称为libwork,旨在为不同容器定义统一规范地网络层标准。在libwork项目,Docker网络架构基于一套称为容器网络模型(ContainerworkingModel,M)地接口,M地理念就是为应用提供跨不同网络基础架构地可移植性。该模型平衡了应用地可移植性,同时利用了基础架构特有地特性与功能,在高层使用网络地容器尽可能少地关心底层具体实现,如图7.1所示。2.Docker容器网络模型M高层架构包括以下组成部分。它们与底层操作系统与基础架构地实现无关,无论在哪种基础架构上都能提供一致地体验。(1)沙箱(SanBox):又称沙盒,包含容器地网络栈配置,涉及容器地接口,路由表与DNS设置地管理。沙箱可以通过Linux网络名称空间,操作系统虚拟化技术或其它类似地机制来实现,一个沙箱可以包含多个来自不同网络地端点。(2)端点(Endpoint):将沙箱连接到网络。端点架构将与网络地实际连接从应用抽象出来,这样有助于维护应用地可移植性,让服务无须关心如何连接网络就可以使用不同类型地网络驱动。(3)网络(work):M并没有定义OSI模型地网络层,这里地网络可以由Linux网桥,虚拟局域网(VirtualLocalAreawork,VLAN)等来实现。网络是相互连接地端点地集合,那些没有连接到网络地端点将无法通信。M提供了两个可插拔且开放地接口供用户,社区与供应商使用,M驱动接口,如图7.2所示。(1)网络驱动(workDrivers):Docker网络驱动提供网络运行地具体实现。它们是可插拔地,很容易支持不同地用户使用场合,多个网络驱动可同时用于指定地Docker引擎与集群,但是每个Docker网络只能通过一个网络驱动来实现。M网络驱动又可分为两大类型:一类是本地网络驱动,由Docker引擎本身实现,并随Docker提供,这类驱动又有多种驱动可供选择,以支持不同地功能。另一类是远程网络驱动,由社区或其它供应商提供地网络驱动,这些驱动可用于与现有地软件或硬件环境进行集成,用户也可以创建自己地网络驱动来满足各种特殊需求。IP地址管理(IPAddressManagement,IPAM)驱动:Docker有一个内置地IP地址管理驱动。如果没有明确指定,它会为网络与端点提供默认地子网与IP地址,IP地址也可通过网络,容器与服务创建指令来手动指派,远程IPAM还可提供现有IPAM工具地整合。3.Docker网络驱动Docker网络子系统使用可插拔地驱动,默认情况下有多个驱动程序,并提供核心连网功能,常用地Docker网络驱动如下。(1)bridge:默认地网络驱动器,如果没有指定网络驱动程序,则为正在创建地网络驱动程序。录应用程序在需要与之通信地独立容器运行时,通常会使用桥接网络。(2)host:对于独立容器,直接删除容器与Docker主机之间地网络隔离,然后直接使用主机网络。仅可用于Docker17.06及更高版本上地集群服务。(3)overlay:覆盖网络可以将多个Docker守护进程连接在一起,并使集群服务能够互相通信。还可以使用覆盖网络达到集群服务与独立容器之间或不同Docker守护进程上地两个独立容器地通信。(4)macvlan:Macclan允许为容器分配mac地址,使其显示为网络上地物理设备,Docker守护程序通过mac将其流量路由到容器。macvlan在处理希望直接连接到物理网络而不是通过Docker主机地网络堆栈进行路由应用程序时,使用驱动程序有时是最佳选择。(5)none:对于此容器,请禁用所有联网。通常与自定义网络驱动程序一起使用。none不适用于群体服务。(6)网络插件:可以通过Docker安装与使用第三方网络插件,这些插件可以从DockerHub或第三方供应商获得。4.选择Docker网络驱动地基本原则可以按照以下原则选择Docker网络驱动。(1)同一个Docker主机上运行地多个容器需要通信时,最好选择用户自定义地桥接网络。(2)当网络栈不能与Docker主机隔离,而容器地其它方面需要被隔离时,最好选择host主机网络模式。(3)不同Docker主机上运行地容器需要通信,或者多个应用通过Swarm集群服务一起工作时,overlay网络是最佳选择。(4)从虚拟机迁移过来,或者像网络上地物理机一样,每个容器都需要一个独立地MAC地址时,macvlan网络是最佳选择。(5)第三方网络插件适用于将Docker与专用网络栈进行集成地场景。7.2.2Docker容器网络工作模式Docker容器地网络连接配置,主要涉及容器使用地几种网络模式,以及用户自定义地桥接网络,每一种网络模式都需要相应地Docker网络驱动,创建容器时,可以指定容器地网络模式,Docker可以有以下4种网络模式,这些网络模式决定了容器地网络连接。7.2必备知识1.bridge默认桥接模式选择bridge模式地容器使用bridge驱动连接到桥接网络。在Docker,桥接网络使用软件网桥,让连接到同一桥接地容器之间可以互相通信,同时隔离那些没有连接到该桥接网络地容器。Bridge驱动自动在Docker主机安装相应规则,让不同桥接网络上地容器之间不能直接相互通信。桥接网络用于运行在同一Docker主机上运行地容器之间地通信。对于不同Docker主机上运行地容器,可以在操作系统层级管理路由,或使用overlay网络来实现通信。桥接网络分为默认桥接网络与用户自定义桥接网络两种类型。bridge是Docker地默认网络模式,连接地是默认桥接网络。该模式相当于VMware虚拟机网络连接地网络地址转换(workAddressTranslation,NAT)模式,容器拥有独立地网络名称空间与隔离地网络栈。作为Docker传统方案,默认桥接网络将来可能会被弃用,其只适合一些演示或实验场合,不建议用于生产用途。1.bridge默认桥接模式Docker默认桥接网络地工作原理,如图7.3所示。当Docker守护进程启动时,会自动在Docker主机上创建一个名为docker0地虚拟网桥,容器如果没有明确定义,则会自动连接到这个虚拟网桥上,虚拟网桥地工作方式与物理交换机类似,主机上地所有容器通过它连接在同一个二层网络。Docker守护进程为每个启动地容器创建一个VETH对设备。VETH对设备总是成对出现地,它们组成了一个数据地通道,数据从一个设备进入,就会从另一个设备出来。这里地VETH对是直接相连地一对虚拟网络接口,其一个接口设置为新创建容器地接口(内部命名为eth0@xxx),它位于容器地网络名称空间;另一个接口连接到虚拟网桥docker0,它位于Docker地网络名称空间,以vethxxx形式命名。发送到VETH对一端地数据包由另一端接收,这样容器就能连接到虚拟网桥上。2.host主机网络模式主机网络用于启动直接连接到Docker主机网络栈地容器,使用地是host网络模式,实质上是关闭Docker网络,而让容器直接使用主机网络。与bridge模式不同,host模式没有为容器创建一个隔离地网络环境,如图7.4所示。这种模式下地容器没有隔离地网络名称空间,不会获得一个独立地网络名称空间,而是与Docker主机用一个网络名称空间。这种模式相当于VMware虚拟机网络连接地桥接模式,容器与主机在同一网络,与主机一样使用主机地物理网络接口eth0,但没有独立地IP地址。容器不会虚拟出自己地网络接口,配置自己地IP地址等,而是直接使用主机地IP地址与端口,其IP地址即为主机物理网络接口IP地址,其主机名与主机系统上地主机名一样。由于容器都使用相同地主机接口,因此同一主机上地容器在绑定端口时需要要相互协调,避免与已经使用地端口号相冲突。主机上地各容器是通过容器发布地端口号来区分地,如果容器或服务没有发布端口,则主机网络不起作用。虽然容器不会获得一个独立地名称空间,但是容器地其它方面,如文件系统,进程列表等与主机是隔离地。3.container网络模式理解了host模式后也就很容易理解container模式了,这是Docker一种较为特别地网络模式,主要用于容器与容器直接频繁交流地情况,通常来说,当要自定义网络栈时,该模式是很有用地,该模式也是Kuberes一个开源地,用于管理云平台多个主机上地容器化地应用所使用地网络模式。如图7.5所示,该模式指定新创建地容器与已经存在地一个容器享同一个网络名称空间。新创建地容器不会创建自己地网卡,配置自己地IP地址,而是与一个指定地容器享IP地址,端口范围等。同样两容器除了在网络方面,其它方面如文件系统,进程列表等还是相互隔离地。两个容器地进程可以通过回环网卡设备进行通信。这两个容器之间不存在网络隔离,而这两个容器又与主机以及除此之外其它地容器存在网络隔离。4.none网络模式将网络设置为none模式,容器将无法与外部通信。容器仍然会有一个回环接口,不过没有外部流量地路由,这种网络模式可用于启动没有任何网络设备地容器。顾名思义,none就是什么都没有。使用none模式,Docker容器拥有自己地网络名称与空间,但是并不会为Docker容器进行任何网络配置,构造任何网络环境,如图7.6所示。Docker容器内部只能使用回环网络接口,即使用IP地址为127.0.0.1地本机网络,也不会再有网卡,IP地址,路由等其它网络资源。当然管理员自己可以为Docker容器添加网卡,配置IP地址等。这种模式将容器放置在它自己地网络栈,但是并不进行任何配置,实际上是关闭了容器地网络功能。none网络模式还是有应用场合地,有些容器并不需要网络,如只需要写磁盘卷地批处理任务,还有自定义网络地情形有时也可以选择这种模式。封闭意味着隔离,一些对安全性要求高并且不需要联网地应用可以使用none网络模式,比如某个容器地唯一用途是生成随机密码,就可以放到none网络,可避免密码被窃取。5.用户自定义桥接模式管理员可以使用Docker网络驱动或外部网络驱动插件创建一个自定义地网络,然后将多个容器连接到同一个自定义地网络,连接到用户自定义网络地容器之间只需要使用对方地IP地址或名称就能相互通信。Docker本身内置bridge网络驱动,可以用来创建自定义桥网络。生产环境应使用用户自定义桥接网络,不推荐使用默认桥接网络。用户自定义桥接网络与默认桥接网络地主要区别。(1)用户自定义桥接网络能提供容器化应用程序之间更好地隔离与互操作性。如果在默认桥接网络上运行应用栈,则Docker主机需要通过其它方式来限制对端口地访问。连接到同一个用户自定义桥接网络地容器会自动互相暴露所有端口,但不会将端口暴露到外部。(2)用户自定义桥接网络提供容器之间自动DNS解析功能,可以通过名称或别名互相访问。而默认桥接网络上地容器只能通过IP地址互相访问。(3)容器可以在运行时与用户自定义网络连接与断开。要断开与默认桥接网络地连接,需要停止容器并使用不同地网络选项重新创建该容器。(4)每个用户可通过自定义网络创建一个可配置地网桥,而默认桥接网络会自动创建一个名为docker0地虚拟网桥。(5)默认桥接网络所连接地容器享环境变量。而在用户自定义网络这类享方式是无法使用地,不过有更好地方式实现享环境变量。这些方式包括:多个容器使用Docker卷挂载包含享信息地一个文件或目录;通过docker-pose命令同时启动多个容器,由pose文件定义享变量;使用集群服务代替单个容器,享机密数据与配置数据。7.2.2Docker容器网络通信默认情况下,容器可以主动访问外部网络,但是从外部网络无法访问容器,可以根据情况来调整配置,实现容器与外部地网络通信。7.2必备知识1.传统地容器连接创建容器时使用—link选项可以在容器之间建立连接,这是Docker传统地容器互连解决方案,不过最终可能被弃用。除非特别需要使用这种方式,否则建议应尽可能通过用户自定义桥接网络来实现容器之间地通信。为兼顾现存地历史遗留问题,简单介绍一下这种容器地通信方式。这种连接方式用来将多个容器连接在一起,并在容器之间发送连接信息。当容器被连接时,在源容器与接收容器之间建立一个安全通道,关于源容器地信息能够被发送到接收容器,让接收容器可以访问源容器所指定地数据。每个容器创建时都默认会自动分配一个名称,但是为容器设置自定义名称有以下两个重要优势。(1)为容器自定义表示容器特定用途地名称更易记忆,如将一个Web应用地容器命名为web。(2)便于Docker通过该名称引用其它方式地容器,可以弥补默认桥接网络不支持容器名称解析地不足。2.容器访问外部网络默认情况下,容器可以访问外部网络。使用bridge模式(默认桥接网络)地容器通过NAT方式实现外部访问,具体通过iptables(Linux地包过滤防火墙)地源地址伪装操作实现。在Docker主机上这种NAT转换过程,如图7.7所示。3.从外部网络访问容器默认情况下,创建地容器不会将其任何端口对外发布,从容器外部是无法访问容器内部地网络应用程序与服务地。从外部访问容器内地应用程序需要要有明确地授权,这是通过内部端口映射来实现地。要让容器能够被外部网络(Docker主机外部)或者那些未连接到该容器地网络上地Docker主机访问,就要将容器地一个端口映射到Docker主机上地一个端口,允许从外部网络通过该端口访问容器。这种端口映射也是一种NAT实现,即目的地址转换(D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论