Rancher服务发现分析

什么是服务发现

容器可以对其它容器提供服务,如mysql(数据库服务)、nginx、mangodb等等。这些服务都可以通过IP+Port方式访问。由于容器会经常重建迁移,所以IP会发生变化,如果调用服务的程序使用IP访问就会很不方便,为此可以使用DNS、zookeeper、etcd等技术实现服务访问与IP的解耦。这种解耦方式叫做服务发现。

版本

  • rancher-dns v0.13.3

Rancher服务发现构成及更新流程

rancher-dns-and-metadata

  • Cattle
    容器管理器(rancher核心)。
  • Event Subscriber
    轻量级的消息队列,用于通知rancher-metadata更新数据
    猜测:采用websocket协议通讯,Cattle为消息生产者,rancher-metadata、scheduler、rancher-agent为消费者或消息订阅者
  • rancher-dns
    向容器提供DNS服务
  • rancher-metadata
    rancher中的元数据管理器

rancher-dns结构

rancher-dns-struct

  • 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工作流程

rancher-dns-route-workflow

关于域名协议流程参见:《DNS协议》中相关内容