发布于 2015-12-05 10:58:30 | 532 次阅读 | 评论: 0 | 来源: 网络整理

Mesos 0.20.0 起,可对应用框架进行授权管理,包括:

  1. 应用框架使用 授权的roles的角色进行 注册或重注册。
  2. 应用框架以 授权的 users的用户加载任务和执行器。
  3. 授权的principals可通过 HTTP 端传入 "/shutdown" 来关闭应用框架。

授权列表

授权是通过 授权列表(Access Control Lists (ACLs)) 来实现的。上面三种情形在 授权列表中都有对应的设置,文件是JSON格式,详见 mesos.proto

每项授权列表设置了 一系列的 Subjects可在Objects执行 Action

目前支持的操作Actions

  1. register_frameworks : 应用注册
  2. run_tasks : 运行任务和执行器
  3. shutdown_frameworks : 关闭应用

目前支持的 Subjects

  1. principals
    • 应用名称(用于 register_frameworksrun_tasks操作)
    • 用户名 (用于shutdown_frameworks 操作)

目前支持的 Objects

  1. roles : 应用可以注册的资源操控角色(用于 "register_frameworks" 操作)
  2. users : 可加载任务和执行器的用户(用于run_tasks 操作)
  3. framework_principals : 可执行 HTTP POST 关闭操作的应用名 (用于shutdown_frameworks操作).

> NOTE: SubjectsObjects都可用特殊值 ANYNONE

工作方式

Mesos master节点通过匹配 授权列表来 确定一个请求授权与否。

例如,一个应用框架注册到master节点的时候,授权列表里的"register_frameworks"会检查该应用框架FrameworkInfo.principal是否有对应的角色FrameworkInfo.role授权。若无,该应用框架将不允许注册,将收到Error消息(中断资源需求计划)。

同样的,当一个应用框架加载一个任务,授权列表里的"run_tasks"会检查该应用框架FrameworkInfo.principal是否有对应的用户user授权。若无,则无法加载,并收到一个丢失任务的信息TASK_LOST

同样的,当一个 用户或应用框架 想通过 "/teardown" HTTP 关闭master节点上的一个应用框架时,授权列表里的"shutdown_frameworks"被检查是否该principal有相应授权。若无,则无法关闭,并收到一个没有获得授权的消息Unauthorized

需要注意事项:

  1. 授权表是有顺序的,也就是说,第一个匹配的授权起决定作用。

  2. 若无匹配的授权,该请求将根据 ACLs.permissive设定进行授权,默认是 true,也就是说没有匹配授权的请求当已授权处理。

设置示例

  1. 应用foobar可以用户alice的身份运行任务。

        {
          "run_tasks": [
                         {
                           "principals": { "values": ["foo", "bar"] },
                           "users": { "values": ["alice"] }
                         }
                       ]
        }
  2. 任何应用框架都以身份guest运行任务。

        {
          "run_tasks": [
                         {
                           "principals": { "type": "ANY" },
                           "users": { "values": ["guest"] }
                         }
                       ]
        }
  3. root身份不允许运行任何应用。

        {
          "run_tasks": [
                         {
                           "principals": { "type": "NONE" },
                           "users": { "values": ["root"] }
                         }
                       ]
        }
  4. 应用只能用guest身份运行任务,其他身份不行。

        {
          "run_tasks": [
                         {
                           "principals": { "values": [ "foo" ] },
                           "users": { "values": ["guest"] }
                         },
                         {
                           "principals": { "values": [ "foo" ] },
                           "users": { "type": "NONE" }
                         }
                       ]
        }
  5. 应用foo可注册 analyticsads 角色

        {
          "register_frameworks": [
                                   {
                                     "principals": { "values": ["foo"] },
                                     "roles": { "values": ["analytics", "ads"] }
                                   }
                                 ]
        }
  6. 只有应用框架 foo可注册analytics角色,其他不行。

        {
          "register_frameworks": [
                                   {
                                     "principals": { "values": ["foo"] },
                                     "roles": { "values": ["analytics"] }
                                   },
                                   {
                                     "principals": { "type": "NONE" },
                                     "roles": { "values": ["analytics"] }
                                   }
                                 ]
        }
  7. 应用框架foo只能注册为analytics角色,不允许其他角色。

        {
          "permissive" : false,
    
          "register_frameworks": [
                                   {
                                     "principals": { "values": ["foo"] },
                                     "roles": { "values": ["analytics"] }
                                   }
                                 ]
        }
  8. 只有 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 查看

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务