本 overview 有效期有限,据 slack 上一位兄弟言,1.8的 VIPs 由 dcos-minuteman 实现,1.9为 dcos-navstar ,暂不清楚。
[toc]
DC/OS 提供三层 DNS 服务,主要用于对集群内部进行服务发现。
Mesos-DNS 是 DC/OS 中负责进行服务 DNS 解析的组件,能够将诸如 hello-service.marathon-framework.mesos
的域名通过标准 DNS 查询,解析为服务的 IP 地址(A Record)和服务的端口(SRV Record)。
上图来自 mesosphere,描述了 Mesos-DNS 项目的内部结构。Record Generator 扮演 fetcher 的角色,定时从 MesosMaster 拉取集群信息及任务信息,解析后生成相应的 DNS 记录。DNS Resolver 响应 DNS 查询请求。
Mesos-DNS 部署在 DC/OS 集群的所有 Master 节点上。
Navstar-DNS 负责进行对 Mesos-DNS 进行代理查询,并对内提供 DNS 域名动态注册服务。
由于 Mesos-DNS 要定时从 Mesos Master 拉取集群信息,部署实例数不能随 DC/OS 集群规模增长。此时 DNS 查询需要一个本地代理,将公共 DNS 的查询工作从 Mesos-DNS 中分离出去。
Spartan 产生的另一个原因是需要对 Mesos-DNS 进行并发查询,避免查询超时。
Spartan 对外暴露一个健康检查的 DNS 记录,名为 ready.spartan
,供其他服务进行健康检查。
DC/OS 常见部署中,除了一个名为 dcos-spartan.service
的服务,还有一个 dcos-spartan-watchdog.service
的服务,对 Spartan 定时做健康检查,并负责修改 /etc/resolv.conf
文件,保证 Spartan 不可达时,公网域名依旧可以正常解析。
一次完整的 DNS 查询会产生类似下图的一张时序图,
Spartan 会选择性并发查询 DC/OS 内部 DNS 或者外部 DNS 服务器。
overlay 网络实现了 IP-per-container。保证网络应用移植的透明性。
上图取自 dcos.io,DC/OS 的 overlay 网络实现为 VxLAN 机制。VxLAN 相关封包方式及报文结构可以参考cisco 的这篇文章。
在 DC/OS 配置文件中,使用 dcos_overlay_network 参数规划 overlay 网络。subnet 参数规划了该集群可以容纳 agent 节点个数,及每个节点能够分配到的子网号。prefix 规划了每个 agent 节点能够容纳的所有容器个数。其中主机位最高一位为0的 IP 分配给 Mesos Container,为1的 IP 分配给 Docker Container,即两类 Container 平分地址池。
以上为 Agent 启动时 IP 子网分配过程。
DC/OS 中 container2container 的通信方式比较值得一提,由 Mesos Master 的 overlay module 向 Mesos Slave 的 overlay module 发放容器子网的拥有者 Agent。其他部分如图所示,CNI 提供 Mesos Container 的网络实现。Navstar 进行网络编排……
- Minuteman 作为 DC/OS 内部 LB
Minuteman 通过检测 Mesos 的 task.port
结构体中的 label,匹配 VIP_$IDX
字段相同的服务作为后端服务。
Minuteman 使用 IPVS 技术,通过在 iptables 的 raw 表中接入 filter,将匹配相应 IP 的数据包放入 NFQueue。Minuteman 通过监听 NFQueue,截获报文,匹配端口信息,适当修改为 DNat/SNat 后重新传入内核进行路由。
# iptables -vL -t raw
Chain PREROUTING (policy ACCEPT 27M packets, 8170M bytes)
pkts bytes target prot opt in out source destination
3 180 NFQUEUE tcp -- any any anywhere anywhere match-set minuteman dst,dst tcp flags:FIN,SYN,RST,ACK/SYN NFQUEUE balance 50:58
Chain OUTPUT (policy ACCEPT 27M packets, 7898M bytes)
pkts bytes target prot opt in out source destination
7 420 NFQUEUE tcp -- any any anywhere anywhere match-set minuteman dst,dst tcp flags:FIN,SYN,RST,ACK/SYN NFQUEUE balance 50:58
- marathon-lb 作为 DC/OS 对外 LB
marathon-lb 通过定时拉取 Marathon 的 task 信息,生成 HAProxy 的配置文件进行负载均衡。