DC/OS的网络功能

勿忘初心2018-11-08 14:58

此文已由作者刘超授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验


DC/OS的网络功能是通过CNI (container network interface) 来实现的。

 

CNI需要三个模块配合工作:

模块一:DC/OS不需要外置的IPAM,而是由mesos-master的replicated_log负责管理分配IP地址,Mesos需要启动的时候,载入overlay network的modules,对应的文件是/opt/mesosphere/active/mesos-overlay-modules/lib/mesos/libmesos_network_overlay.so。

模块二:需要载入CNI isolator,这个在MESOS_ISOLATION这个环境变量里面已经配置了network/cni。

模块三:需要navstar服务来实现跨节点之间的IP互访问

每个mesos-agent的机器上都会运行一个navstar进程。

每个机器上都会创建网卡d-dcos,如果Docker容器使用CNI获取IP的容器都Attach到这个网卡上,而非docker0上。

每个机器上都会创建网卡m-dcos,如果mesos容器使用CNI获取IP的容器都Attach到这个网卡上。

每台机器的d-dcos和m-dcos的网段都不同。

每台机器都会创建一个vtep1024的网卡,作为VTEP,背后是vxlan。

每台机器都会创建默认的路由表,从本节点连接到其他的节点默认走vtep1024这个网卡。

 

在Mesos的配置的环境变量中,有以下的配置

MESOS_NETWORK_CNI_CONFIG_DIR=/opt/mesosphere/etc/dcos/network/cni

MESOS_NETWORK_CNI_PLUGINS_DIR=/opt/mesosphere/active/cni/

在路径/opt/mesosphere/etc/dcos/network/cni有对于DC/OS的网络的配置dcos.cni

  1. {"name":"dcos","type":"bridge","bridge":"m-dcos","isGateway":true,"ipMasq":false,"mtu":1420,"ipam":{"type":"host-local","subnet":"9.0.2.0\/25","routes":[{"dst":"0.0.0.0\/0"}]}}

这个配置文件是一个经典的CNI的配置文件,对于CNI的文档可以参考https://github.com/containernetworking/cni

如果要创建一个使用CNI的网络的容器可以使用如下的Json

{
"id":"nginxmesos",
"cmd":"env; ip -o addr; sleep 3600",
"cpus":0.10,
"mem":512,
"instances":1,
"ipAddress":{
"networkName":"dcos"
},
"container":{
"type":"MESOS",
"docker":{
"network":"USER",
"image":"nginx",
}
}
}

当容器创建完毕之后,会调用network/cni的isolator,它会发现你指定的网络为"dcos",就会根据上面的dcos.cni的模板文件生成一个配置文件,然后定义一些CNI配置所需要的环境变量

environment["CNI_COMMAND"] = "ADD";
environment["CNI_CONTAINERID"] = containerId.value();
environment["CNI_PATH"] = pluginDir.get();
environment["CNI_IFNAME"] = containerNetwork.ifName;
environment["CNI_NETNS"] = netNsHandle;

由于配置文件中的type为"bridge",因而调用plugin目录下面的bridge命令进行配置,bridge是用GO实现的,主要做以下的事情:

  • 如果没有网桥则创建网桥ensureBridge

  • 获取容器所在的namespace

  • 配置veth pair,一个在namespace里面,一个在namespace外面,外面的网卡添加到网桥上

  • 调用IPAM来配置容器的IP地址,由于配置文件中类型为host-local,调用host-local命令

  • 配置网关和路由



容器服务是网易云提供的无服务器容器服务,让企业能够快速部署业务,轻松运维服务。容器服务支持弹性伸缩、垂直扩容、灰度升级、服务发现、服务编排、错误恢复及性能监测等功能。点击可免费试用


免费体验云安全(易盾)内容安全、验证码等服务

更多网易技术、产品、运营经验分享请点击