什么是服务发现
容器可以对其它容器提供服务,如mysql(数据库服务)、nginx、mangodb等等。这些服务都可以通过IP+Port方式访问。由于容器会经常重建迁移,所以IP会发生变化,如果调用服务的程序使用IP访问就会很不方便,为此可以使用DNS、zookeeper、etcd等技术实现服务访问与IP的解耦。这种解耦方式叫做服务发现。
版本
- rancher-dns v0.13.3
Rancher服务发现构成及更新流程
- Cattle
容器管理器(rancher核心)。 - Event Subscriber
轻量级的消息队列,用于通知rancher-metadata更新数据
** 猜测:采用websocket协议通讯,Cattle为消息生产者,rancher-metadata、scheduler、rancher-agent为消费者或消息订阅者 ** - rancher-dns
向容器提供DNS服务 - rancher-metadata
rancher中的元数据管理器
rancher-dns结构
- TCP、UDP Listen
rancher-dns监听53端口,用于接收域名解析请求。 - miekg DNS
DNS协议封装解析库 - ROUTE
处理域名解析业务逻辑 - metadata client
负责与rancher-metadata同步answer数据,每5秒同步一次。 - answers
负责存储解析metadata client
同步来的answer数据(/etc/rancher/answers.json
)
rancher-dns ROUTE工作流程
*** 关于域名协议流程参见:《DNS协议》中相关内容 ***