介绍
Docker 提供了实际的集装箱化技术,但许多其他项目有助于开发适当的部署环境中启动和通信所需的工具。
许多Docker环境依赖的核心技术之一是服务发现,服务发现允许应用程序或组件发现其环境和邻居的信息,这通常是作为分布式关键值存储的实现,这也可以作为一个更一般的位置来决定配置细节。
在本指南中,我们将讨论在集群的Docker环境中发现服务的好处,我们将主要关注一般概念,但在适当的情况下提供更具体的示例。
服务发现和全球可访问的配置商店
服务发现背后的基本理念是,任何新实例的应用程序都应该能够编程识别其当前环境的细节。这需要为新的实例能够连接
到现有的应用程序环境,而无需手动干预。服务发现工具通常被实施为一个全球可访问的注册表,存储有关目前运行的实例或服务的信息。
虽然服务发现平台的主要目的是提供连接细节,以便将组件连接在一起,但它们可以更一般地用于存储任何类型的配置。
服务发现是如何工作的?
因此,对于每个组件,服务发现地址必须要么被硬编码到应用程序/容器本身,要么在运行时作为选项提供。
服务发现门户的运作方式是,每个服务,因为它在网上,注册自己与发现工具. 它记录任何相关组件可能需要的信息,以消耗它提供的服务。
当该服务的消费者上网时,它可以在预定义的终端点查询服务发现注册表的信息,然后可以根据所找到的信息与所需的组件进行交互,其中一个很好的例子是负载平衡器,它可以通过查询服务发现门户并相应调整其配置来查找需要传输流量的每个后端服务器。
这将配置细节从容器本身中删除,其中一个好处是它使组件容器更灵活,并且不受特定配置的约束,另一个好处是它使您的组件轻松地响应相关服务的新实例,允许动态重新配置。
存储配置如何联系?
全球分布式服务发现系统的一个关键优点是,它可以存储您的组件在运行时可能需要的任何其他类型的配置数据,这意味着您可以从容器中提取更多的配置并进入更大的执行环境。
通常情况下,为了使这项工作最有效,您的应用程序应该设计具有合理的默认值,可以在运行时通过查询配置存储进行翻译。这允许您使用配置存储,就像您使用命令行旗一样。
配置存储如何帮助集群管理?
在 Docker 部署中,分布式关键值存储的一个可能最初不明显的功能是存储和管理集群会员资格。
某些可能存储在分布式关键值存储中的个别主机的信息包括:
- 主机 IP 地址
- 主机本身的连接信息
- 可针对计划决策的任意元数据和标签
- 群集中的角色(如果使用领导者/追随者模型)
这些细节可能不是在正常情况下使用服务发现平台时需要关注的事情,但它们为管理工具提供了一个位置,以查询或修改关于集群本身的信息。
什么是故障检测?
故障检测可以通过多种方式实现,问题在于,如果某个组件失败,检测服务是否会被更新,以反映它不再可用。
许多服务发现平台允许使用可配置的时空设置值。组件可以设置一个时空设置值,并在定期间隔下对发现服务进行 ping,以重置时空。
这还可以通过将一个裸体的助手
容器与每个组件联系起来,其唯一责任是定期检查组件的健康状况,并在组件失效时更新注册表。这种类型的架构的担忧是,助手容器可能会下降,导致商店中的信息不正确。一些系统通过能够在服务发现工具中定义健康检查来解决这个问题。
当细节发生变化时,如何重组服务?
基本服务发现模型的一个关键改进是动态重新配置,而正常的服务发现允许您通过检查启动时的发现信息来影响组件的初始配置,动态重新配置涉及配置您的组件以响应配置商中的新信息。
由于负荷平衡示例是此功能的主要用例之一,存在一系列专注于在检测配置变化时重新配置负荷平衡器的项目。
某些项目更灵活,因为它们可以用来触发任何类型的软件的更改. 这些工具会定期查询发现服务,并在检测到更改时使用模板系统生成包含发现终端值的配置文件. 在生成新配置文件后,受影响的服务会重新加载。
这种类型的动态重组需要在构建过程中进行更多的规划和配置,因为所有这些机制都必须存在于组件容器中,这使得组件容器本身负责调整其配置。
安全怎么样?
许多人第一次了解全球可访问的配置存储时,有一种担忧是安全性,正确地说,将连接信息存储到全球可访问的位置是否真的很好?
这个问题的答案很大程度上取决于您选择在商店中放置的内容以及您认为需要保护数据的安全层次。几乎每个服务发现平台都允许使用SSL/TLS加密连接。
有许多不同的方法来解决这个问题,各种项目提供自己的解决方案. 一个项目的解决方案是继续允许开放访问发现平台本身,但加密写给它的数据。
对于另一种方法,一些服务发现工具实现了访问控制列表,以便将密钥空间划分为单独的区域,然后可以根据特定密钥空间定义的访问要求指定所有权或访问区域。
什么是常见的服务发现工具?
现在,我们已经讨论了服务发现工具和全球分布的关键价值仓库的一些一般特征,我们可以提到一些与这些概念相关的项目。
一些最常见的服务发现工具是:
- etcd:此工具是由CoreOS的开发者创建的,旨在为容器和主机系统提供服务发现和全球分布式配置,它实现了HTTP API,并在每个主机上都有一个命令行客户端
- consul:这个服务发现平台具有许多先进的功能,包括可配置的健康检查,ACL功能,HAProxy配置等。
扩展基本服务发现的其他一些项目包括:
- crypt: Crypt允许组件通过公用密钥加密来保护他们所写的信息. 意在读取数据的组件可以被赋予解密密钥. 所有其他缔约方将无法读取数据。
- confd:Confd是一个旨在根据服务发现门户的变化允许动态重组任意应用程序的项目. 该系统涉及一个工具,用于监视相关的端点进行修改,一个诱导系统,以根据所收集的信息构建新的配置文件,以及重新装入受影响的应用程序的能力。 () ( )* vulcand:Vulcand是一组组件的负载平衡器。 它受到等同的注意,并根据商店中检测到的变化来修改其配置. () ( )* marathon:马拉松主要是一种排程器(后被覆盖),同时它也执行一种基本能力,在对现有服务进行修改时重新装入HAProxy,它应该加以平衡. () ( )* ** Frontrunner**:这个项目勾入了马拉松,为更新HAProxy提供了更强有力的解决方案. () ( )* 突触:这个项目引入了嵌入式HAProxy实例,可以将流量引导到组件. (_ ( )* ** 神经**:神经结合突触,用于对单个成分进行健康检查。 如果组件无法使用,神经会更新突触,使组件脱离旋转. (单位:千美元) (英语)
结论
服务发现和全球配置仓库允许Docker容器适应其当前环境,并连接到现有组件,这是提供简单、无缝的可扩展性和部署的必要前提,允许组件跟踪和响应其环境中的变化。
在 下一个指南中,我们将讨论 Docker 容器和主机可以通过自定义网络配置进行通信的方式。