您的位置:首页 > 其它

MESOS的验证和分角色执行

2016-05-22 00:00 148 查看
我的这个post大约介绍的是一个简单的mesos的翻译:http://domain.coding.io/?p=121
但是实际操作我发现mesos对框架验证支持可能有Bug,或者就是Marathon的密码验证有问题,我今天调试了一天,依旧没有把框架验证调试通过。但是我对整个框架的验证和角色分派有了新的认识:
我们部署mesos集群的时候会遇到这样的问题:集群机器可能分布在不同的机房,一般特定的服务,需要在同一个机房在部署实施,这时你就需要mesos的roles功能了,你要根据你的机房划分不同的roles,比如北京集群,上海集群,然后根据这些不同的角色,在启动masterslave和marathon的时候配置好响应的角色:
forexample:

#记住,所有的集群,master都只有一个。startmaster

mesos-master--ip=$localip--quorum=1--zk=zk://host1:port1,host2:port2,.../path--acls=file:///path/to/file--authenticate=false--authenticate_slaves=true--credentials=file:///path/to/file--roles=bj,sh

#foracl

{

"register_frameworks":[

{

"principals":{"type":"ANY"},

"roles":{"values":["bj","sh"]}

}

],

"run_tasks":[

{

"principals":{"type":"ANY"},

"users":{"values":["root"]}

}

]

}

#因为没有对框架验证,所有的框架没有验证主体,所以这里的访问控制只能写any,如果你担心你的集群遭到攻击,我建议还是从防火墙上控制好master5050端口的访问,从上面的acl中可以看出1.允许所有的框架以bj和sh的角色来进行注册2.允许所有的框架使用root用户运行任务。

#注意master的--roles参数,你要把你所有的角色Name用逗号隔开,master启动之后就只能这些角色允许注册,其他角色是不能注册成功的。

#marathonregister

./bin/start--masterlocal--zkzk://localhost:2181/marathon--mesos_role=bj

#这样就意味着你发送给这个框架的所有任务都只能在bj角色的机器上执行了。

#mesosslave

mesos-slave--ip=localip--master=localhost:5050--credential=file://path/to/file--default_role=bj

#credfile

{

"principal":"username",

"secret":"secret"

}

#这样启动之后slave就算到bj集群中去了。


验证这块marathon上需要配置一个环境变量:
exportPROCESS_IP=localhost
因为使用crammd5这个破玩意完成验证,所以需要安装对应的依赖。

mesos的验证需要mesos.0.20.0以上的版本支持,mesos的验证可以做到三点:
1.在框架注册时进行验证
2.在框架运行任务或者执行程序的时候进行验证
3.在通过api关闭框架时进行验证
这些验证都是通过类似ACL的方式来做控制访问,访问控制列表是一个json格式的数据文件
上面三点分别对应的字段为:”register_frameworks”,”run_tasks”,”shutdown_frameworks”
另外还有几个字段需要解释一下:
principals:你需要把这个字段抽象成框架的名称,这个名称需要全局唯一,用来唯一标识一个框架(这也就是说一个Mesos上可以承载很多框架)
roles:这个一个框架标识,可以想象成框架的分组,算是一个框架的一个属性。
users:操作系统帐号,用来执行应用的帐号
framework_principals:这个在框架关闭的时候要用。

具体的验证过程:
当一个框架要到Mesos的master注册的时候,“register_frameworks”访问控制就会匹配验证当前框架的principals和roles,如果验证失败,这个框架就不允许注册,schedulerdriver就会返回错误信息。
对于任务运行和框架关闭验证也很类似,具体请参照:http://mesos.apache.org/documentation/latest/authorization/

#框架foo和bar可以用alice帐号运行任务

{

"run_tasks":[

{

"principals":{"values":["foo","bar"]},

"users":{"values":["alice"]}

}

]

}


#运行任何框架用guest用户运行任务

{

"run_tasks":[

{

"principals":{"type":"ANY"},

"users":{"values":["guest"]}

}

]

}


#只允许foo框架以analytics角色注册

{

"register_frameworks":[

{

"principals":{"values":["foo"]},

"roles":{"values":["analytics"]}

},

{

"principals":{"type":"NONE"},

"roles":{"values":["analytics"]}

}

]

}


另外你要启用mesos的验证功能,你可能需要设置下面的参数:
formaster:
–acls=VALUE
–authenticate=true
–authenticate_slaves=true
–credentials=VALUE

forslave:
–credential=VALUE
–default_role=VALUE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: