发布于 2015-12-05 10:58:30 | 564 次阅读 | 评论: 0 | 来源: 网络整理
Mesos 0.20.0 起,可对应用框架进行授权管理,包括:
roles的角色进行 注册或重注册。users的用户加载任务和执行器。principals可通过 HTTP 端传入 "/shutdown" 来关闭应用框架。授权是通过 授权列表(Access Control Lists (ACLs)) 来实现的。上面三种情形在 授权列表中都有对应的设置,文件是JSON格式,详见 mesos.proto 。
每项授权列表设置了 一系列的 Subjects可在Objects执行 Action。
目前支持的操作Actions:
register_frameworks : 应用注册run_tasks : 运行任务和执行器shutdown_frameworks : 关闭应用目前支持的 Subjects:
principals
register_frameworks 和 run_tasks操作)shutdown_frameworks 操作)目前支持的 Objects:
roles : 应用可以注册的资源操控角色(用于 "register_frameworks" 操作)users : 可加载任务和执行器的用户(用于run_tasks 操作)framework_principals : 可执行 HTTP POST 关闭操作的应用名 (用于shutdown_frameworks操作).> NOTE: Subjects和Objects都可用特殊值 ANY 或NONE。
Mesos master节点通过匹配 授权列表来 确定一个请求授权与否。
例如,一个应用框架注册到master节点的时候,授权列表里的"register_frameworks"会检查该应用框架FrameworkInfo.principal是否有对应的角色FrameworkInfo.role授权。若无,该应用框架将不允许注册,将收到Error消息(中断资源需求计划)。
同样的,当一个应用框架加载一个任务,授权列表里的"run_tasks"会检查该应用框架FrameworkInfo.principal是否有对应的用户user授权。若无,则无法加载,并收到一个丢失任务的信息TASK_LOST。
同样的,当一个 用户或应用框架 想通过 "/teardown" HTTP 关闭master节点上的一个应用框架时,授权列表里的"shutdown_frameworks"被检查是否该principal有相应授权。若无,则无法关闭,并收到一个没有获得授权的消息Unauthorized。
需要注意事项:
授权表是有顺序的,也就是说,第一个匹配的授权起决定作用。
ACLs.permissive设定进行授权,默认是 true,也就是说没有匹配授权的请求当已授权处理。应用foo 和 bar可以用户alice的身份运行任务。
{
"run_tasks": [
{
"principals": { "values": ["foo", "bar"] },
"users": { "values": ["alice"] }
}
]
}
任何应用框架都以身份guest运行任务。
{
"run_tasks": [
{
"principals": { "type": "ANY" },
"users": { "values": ["guest"] }
}
]
}
root身份不允许运行任何应用。
{
"run_tasks": [
{
"principals": { "type": "NONE" },
"users": { "values": ["root"] }
}
]
}
应用只能用guest身份运行任务,其他身份不行。
{
"run_tasks": [
{
"principals": { "values": [ "foo" ] },
"users": { "values": ["guest"] }
},
{
"principals": { "values": [ "foo" ] },
"users": { "type": "NONE" }
}
]
}
应用foo可注册 analytics和 ads 角色
{
"register_frameworks": [
{
"principals": { "values": ["foo"] },
"roles": { "values": ["analytics", "ads"] }
}
]
}
只有应用框架 foo可注册analytics角色,其他不行。
{
"register_frameworks": [
{
"principals": { "values": ["foo"] },
"roles": { "values": ["analytics"] }
},
{
"principals": { "type": "NONE" },
"roles": { "values": ["analytics"] }
}
]
}
应用框架foo只能注册为analytics角色,不允许其他角色。
{
"permissive" : false,
"register_frameworks": [
{
"principals": { "values": ["foo"] },
"roles": { "values": ["analytics"] }
}
]
}
只有 ops可通过 HTTP /teardown 关闭其他应用。
{
"permissive" : false,
"shutdown_frameworks": [
{
"principals": { "values": ["ops"] },
"framework_principals": { "type": "ANY" }
}
]
}
通过在主控增加一个acls开启授权。
acls : 格式是JSON格式的字符串或者是使用JSON的文件路径。可以绝对路径也可以相对路径,如:<code>file:///path/to/file</code> 或 <code>/path/to/file</code>。
在mesos.proto的ACL的protobuf中,查看可用格式。详情可用命令 ./mesos-master.sh --help 查看