最佳实践系列丨Docker EE 服务发现参考架构(一)
本文首发自“Docker公司”公众号(ID:docker-cn)
编译丨小东
每周一、三、五 与您不见不散!
服务发现对服务进行注册并发布其连接信息,以使其他服务了解如何连接到服务。随着应用向微服务和面向服务的架构转变,服务发现已经成为所有分布式系统的必要组成部分,增加了这些环境的运维复杂性。
Docker 企业版 (Docker EE) 包含服务发现和负载均衡功能,可为整个组织的开发运维计划提供助力。服务发现和负载均衡可以方便开发人员创建可动态互相发现的应用。另外,这些功能还简化了运维工程师扩展应用的过程。
Docker 使用称作服务的概念来部署应用。服务由基于相同的镜像创建的容器组成。每个服务都由在工作节点上执行并且会定义应用的状态的任务组成。部署服务时,服务定义在创建服务时完成。服务定义包含很多信息,其中包括,服务包含的容器、发布的端口、连接的网络和从节点的数量。所有这些任务共同组成服务的理想状态。如果某个节点未通过运行状况检查或服务定义中某个特定的服务任务未通过运行状况检查,那么集群将调整服务状态,使其与另一个运行状况良好的节点的服务状态一致。Docker EE 包含服务发现、负载均衡、扩展和调整事件,以使该编排可以无缝工作。
学习内容
此参考架构涵盖 Docker EE 提供的服务发现和负载均衡领域的解决方案。创建服务时,Docker 使用 DNS 实现服务发现,而且 Docker 内置了不同的网格路由,可确保应用高度可用。UCP 2.0 发行版引入了新的应用层网格路由,称为 HTTP 网格路由 (HRM),它基于 DNS 主机名路由 HTTP 流量。阅读完本文档之后,您将充分了解 HRM 的工作原理以及它如何与其他 Docker 服务发现和负载均衡功能集成。
使用 DNS 的服务发现
Docker 使用嵌入的 DNS 来为在单个 Docker 引擎上运行的容器和在 Docker Swarm 中运行的任务提供服务发现功能。Docker 引擎具备内部 DNS 服务器,可为用户定义的 bridge、overlay 和 MACVLAN 网络中的主机上的所有容器提供名称解析。每个 Docker 容器(或任务(swarm mode 中))都具备一个可将 DNS 查询转发到 Docker 引擎的 DNS 解析器,它充当 DNS 服务器。然后,Docker 引擎将在发送请求的容器所属的每个网络上检查 DNS 查询是否属于容器或服务。如果属于,Docker 引擎将在其键值存储中查找与容器、任务、或服务的名称匹配的 IP 地址,并将 IP 或服务虚拟 IP (VIP) 返回给请求方。
服务发现将网络作为范围,这意味着只有在相同网络上的容器或任务才可使用嵌入的 DNS 功能。不在相同网络上的容器无法解析彼此的地址。而且,只有在特定网络上具备容器或任务的节点才会存储该网络的 DNS 条目。这有助于提高安全性和性能。
如果目标容器或服务和源容器位于不同的网络上,Docker 引擎会将 DNS 查询转发到默认 DNS 服务器。
本示例中,有一个具有两个容器的服务,称为 myservice。在相同的网络上还存在第二个服务 (client)。client 运行两个 curl 操作(为 docker.com 和 myservice)。以下为因此发生的操作:
- client 为 docker.com 和 myservice发起 DNS 查询;
- 容器的内置解析器在 127.0.0.11:53 上拦截 DNS 查询,并将其发送到 Docker 引擎的 DNS 服务器;
- myservice 解析到服务的虚拟 IP (VIP),并在内部均衡分配到各个任务 IP 地址。容器名也将被解析,只不过是直接解析到其 IP 地址;
- docker.com 没有作为服务名称存在于 mynet 网络中,所以请求被转发给已配置的默认 DNS 服务器;
内部负载均衡
当在 Docker Swarm 集群中创建服务时,将自动向其分配虚拟 IP (VIP),它是服务的网络的一部分。解析服务的名称时将返回 VIP。流向 VIP 的流量将被自动发送到整个 overlay 网络上该服务的所有运行状况良好的任务。此方法可避免由于在客户端进行任何负载均衡,因为仅有一个 IP 返回到客户端。Docker 会处理所有路由并将流量平均分发给运行状况良好的服务任务。
要获取服务的 VIP,请按以下方式运行 docker service inspect myservice 命令:
# Create an overlay network called mynet $ docker network create -d overlay mynet a59umzkdj2r0ua7x8jxd84dhr # Create myservice with 2 replicas as part of that network $ docker service create --network mynet --name myservice --replicas 2 busybox ping localhost 8t5r8cr0f0h6k2c3k7ih4l6f5 # Get the VIP that was created for that service $ docker service inspect myservice ... “VirtualIPs":[ { "NetworkID":"a59umzkdj2r0ua7x8jxd84dhr", "Addr":“10.0.0.3/24" }, ]
DNS 轮询 (DNS RR) 负载均衡是适用于服务(使用 --endpoint-mode配置)的另外一个负载均衡选项。在 DNS RR 模式下,不为每个服务单独创建 VIP。Docker DNS 服务器通过轮询方式将服务名称解析到各个容器 IP。
外部负载均衡(Swarm Mode 网格路由)
创建或更新服务时,您可以使用 --publish 标志在外部公开服务。在 Docker swarm mode 下公开端口意味着集群中的每个节点都将侦听端口。但是,如果服务的任务不在侦听该端口的节点上应该怎么办呢?
在这种情况下需要使用网格路由。网格路由是 Docker 引擎 1.12 中的一项新功能,它将 ipvs 和 iptables 相结合以创建功能强大的全集群传输层 (L4) 负载均衡器。它允许所有 swarm 节点接受服务发布的端口上的连接。任何 swarm 节点收到发往运行中服务的已发布 TCP/UDP 端口的流量时,它会使用称为入口的预定义 overlay 网络将流量转发到服务的 VIP。入口网络的行为方式与其他 overlay 网络相似,但是其唯一的目标是将网格路由流量从外部客户端传输给集群服务。它使用与前一部分中所述相同的基于 VIP 的内部负载均衡功能。
启动服务后,您就可以为应用创建外部 DNS 记录,并将其映射到任何或所有 Docker swarm 节点。您无需担心容器在哪里运行,因为有了网格路由路由功能,集群中的所有节点就像一个整体。
#Create a service with two replicas and export port 8000 on the cluster $ docker service create --name app --replicas 2 --network appnet --publish 8000:80 nginx
该图表对网格路由的工作原理进行了说明。
- 创建带有两个从节点的服务,并将其端口映射到外部端口 8000;
- 网格路由在集群中的每个主机上公开端口 8000;
- 发往应用的流量可从任何主机进入。在这种情况下,外部 LB 无需通过服务从节点就可将流量发送到主机;
- 内核的 IPVS 负载均衡器将入口 overlay 网络上的流量重定向到运行状况良好的服务从节点;
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
阿里云王牌架构师二问开发者:容器和虚拟化你会怎么选?
阿里云高级解决方案架构师 杨旭 世界最大混合云的总架构师,4年前,开始作为双11阿里云技术负责人,负责搭建全球最大的混合云结构,把 “双11”的电商业务和技术场景在阿里云上实现,并保障这个混合云在双11当天能够满足全球客户的购物需求。 正文: 随着IT技术的发展,特别是serverless概念被提出以后,网络上出现了很多唱衰虚拟化以及对未来虚拟化方向的讨论,很多文章都做了vm和容器的对比,任何一种技术存在都有其合理性,我们不妨客观分析两种技术的特点选择适合自己业务的,才是最重要的,开始之前先再简单介绍下两种。 技术的定义: 所谓虚拟机(VM)就是对操作系统的完全模拟,虚拟机是架构在虚拟化指令之上,需要特定的硬件、软件同时的支持,,每台虚拟机会预分配需要的资源,包括CPU,内存,磁盘等,以及一个完整的用户操作系统容器就是隔离一个运行环境,每个
- 下一篇
弹性计算双周刊 第11期
【最新动态】 1、阿里云自动化运维产品发布会,正式上线 用户在阿里云上搭建关键业务系统,其系统可用性和业务连续性由阿里云和用户共同保障——阿里云为用户提供安全稳定的ECS云服务,用户设定预期的可用性目标并规划合理的架构;而基于ECS丰富的运维能力,用户可以将主动运维思想贯穿始终,借助OpenAPI和云助手实现大规模资源管理和运行时部署、利用弹性伸缩轻松应对负载峰谷波动、通过系统事件感知异常自动转移恢复故障,形成闭环的主动运维体系,防患于未然,最终实现业务永续运行。 直播回顾:点此查看 2、ECS支持qcow2格式镜像的导入,通过制作压缩比更高的镜像,可以有效缩短镜像导入速度。 【产品资讯】 1、从On-Premise本地化运维到On-Cloud云上运维的演进 从用户的声音中,我们听到用户对稳定、弹性、透明的诉求,我们也在不断升级ECS的运维能力
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS关闭SELinux安全模块
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Hadoop3单机部署,实现最简伪集群
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7安装Docker,走上虚拟化容器引擎之路