发布于 2015-12-05 10:58:30 | 532 次阅读 | 评论: 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
查看