限制对 DC/OS 服务组的访问

ENTERPRISE

使用 DC/OS Web 界面在宽容模式下实现多租户

在本部分中,您将看到如何使用 DC/OS Web 界面在宽容模式下实现多租户。

本教程演示如何在宽容安全模式下实现 DC/OS 服务的用户权限。完成后,您将通过使用 DC/OS 权限获得多租户。

先决条件:

创建用户和组

  1. Services > Services > Create Group 创建服务组。

    服务创建组

    图 1. 创建组页面

    在此示例中,创建了一个名为 prod-a 和一个名为 prod-b。创建组之后,您应该看到两个文件夹。您可以在此处为用户组部署服务并为每个单元设置权限。

    组文件夹

    图 2. 新建组文件夹

  2. 创建用户和组并定义每个组所需的权限。

    1. 选择 Organization > Users 并创建新用户。在此示例中,创建了两个用户(CoryNick)。

      创建用户 Cory

      图 3. 创建新用户

      完成后,您应该看到两个用户。

      所有用户

      图 4. 用户页面中的新用户

      接下来,我们将创建组并为 DC/OS 服务分配权限。

  3. Organization > Groups 创建用户组。

  4. 选择 New Group。在本示例中,创建了两个组:

  • prod-a-group,用于管理用户 Cory 的 DC/OS 服务。

  • prod-b-group,用于管理用户 Nick 的 DC/OS 服务。

    prod-a group

    图 5. 创建新组

定义权限

  1. 选择 Organization > Groups

  2. 选择 prod-a-group 并选择 ADD PERMISSION。在此示例中,权限被分配给 prod-a,以允许用户创建自己的服务!

  3. 选择 INSERT PERMISSION STRING 切换键以使用字符串格式进行输入。字符串区分大小写。

    此处添加了每个组所需的所有权限。这些权限允许用户访问 DC/OS 群集并部署自己的服务。这些权限也将限制每个组,以便他们只能看到自己的 DC/OS 服务。

  4. 为 prod-a-group 添加这些权限,然后单击 Close

    1. dcos:adminrouter:service:marathon full
    2. dcos:adminrouter:service:nginx full
    3. dcos:service:marathon:marathon:services:/prod-a full
    4. dcos:adminrouter:ops:slave full
    5. dcos:adminrouter:ops:mesos full
    6. dcos:adminrouter:package full

    prod-a-group

    图 6. 为“prod-a-group”添加权限

    以下是添加后的权限视图:

    prod-a-group

    图 7. 添加的组权限

  5. 为 prod-b-group 添加这些权限并单击 Close

    1. dcos:adminrouter:service:marathon full
    2. dcos:adminrouter:service:nginx full
    3. dcos:service:marathon:marathon:services:/prod-b full
    4. dcos:adminrouter:ops:slave full
    5. dcos:adminrouter:ops:mesos full
    6. dcos:adminrouter:package full

    既然权限被分配给组,您可以将用户添加到组以继承权限。

  6. 选择 Organization > Users,然后选择 Cory

  7. 选择 Group Membership,然后在搜索框中键入 prod-a-group,然后单击选择。

    prod-a-group

    图 8. 将用户添加到组

  8. 选择 Organization > Users,然后选择 Nick

  9. 选择 Group Membership,然后在搜索框中键入 prod-b-group,然后单击选择。

作为用户登录到 DC/OS Web 界面

  1. 以 Cory 身份登录到 DC/OS Web 界面。您可以看到,用户 Cory 只能访问 ServicesUniverse 选项卡。同时,Cory 只能看到 prod-a 服务。
  1. ![prod-a-group](/mesosphere/dcos/1.12/img/GUI-Services-Limited_User_Access_List-1_12.png)
  2. 9. 限制视图
  3. <p class="message--note"><strong>注意:</strong>要退出当前用户,单击右上角的用户名,然后选择<strong>注销</strong>。</p>
  4. 我们将把 NGINX 服务部署到 `prod-a-group`
  1. 选择 Services > Services,然后单击加号 (+) 来部署服务。

    1. 选择 JSON Configuration 并粘贴到以下应用定义中:

      1. {
      2. "id": "/prod-a/nginx",
      3. "cmd": "rm -rf /usr/share/nginx/html && ln -s /mnt/mesos/sandbox/hello-nginx-master/ /usr/share/nginx/html && nginx -g 'daemon off;'",
      4. "instances": 1,
      5. "cpus": 1,
      6. "mem": 1024,
      7. "disk": 0,
      8. "gpus": 0,
      9. "fetch": [
      10. {
      11. "uri": "https://github.com/mesosphere/hello-nginx/archive/master.zip",
      12. "extract": true,
      13. "executable": false,
      14. "cache": false
      15. }
      16. ],
      17. "backoffSeconds": 1,
      18. "backoffFactor": 1.15,
      19. "maxLaunchDelaySeconds": 3600,
      20. "container": {
      21. "type": "DOCKER",
      22. "docker": {
      23. "image": "nginx:1.8.1",
      24. "network": "BRIDGE",
      25. "portMappings": [
      26. {
      27. "hostPort": 0,
      28. "containerPort": 80,
      29. "protocol": "tcp",
      30. "servicePort": 10000
      31. },
      32. {
      33. "hostPort": 0,
      34. "containerPort": 443,
      35. "protocol": "tcp",
      36. "servicePort": 10001
      37. }
      38. ],
      39. "privileged": false,
      40. "forcePullImage": false
      41. }
      42. },
      43. "healthChecks": [
      44. {
      45. "gracePeriodSeconds": 300,
      46. "intervalSeconds": 60,
      47. "timeoutSeconds": 20,
      48. "maxConsecutiveFailures": 3,
      49. "protocol": "COMMAND",
      50. "command": {
      51. "value": "service nginx status | grep -q 'nginx is running.'"
      52. }
      53. }
      54. ],
      55. "upgradeStrategy": {
      56. "minimumHealthCapacity": 1,
      57. "maximumOverCapacity": 1
      58. },
      59. "unreachableStrategy": {
      60. "inactiveAfterSeconds": 900,
      61. "expungeAfterSeconds": 604800
      62. },
      63. "killSelection": "youngest_first",
      64. "acceptedResourceRoles": [
      65. "*"
      66. ],
      67. "requirePorts": false,
      68. "labels": {
      69. "DCOS_PACKAGE_RELEASE": "1",
      70. "DCOS_SERVICE_SCHEME": "http",
      71. "DCOS_PACKAGE_SOURCE": "https://universe.mesosphere.com/repo",
      72. "DCOS_PACKAGE_METADATA": "eyJwYWNrYWdpbmdWZXJzaW9uIjoiMi4wIiwibmFtZSI6Im5naW54IiwidmVyc2lvbiI6IjEuOC4xIiwibWFpbnRhaW5lciI6InN1cHBvcnRAbmdpbnguY29tIiwiZGVzY3JpcHRpb24iOiJOZ2lueCBwYWNrYWdlIiwidGFncyI6WyJwcm94eSIsIndlYi1zZXJ2ZXIiLCJjYWNoZSJdLCJzY20iOiJodHRwOi8vaGcubmdpbngub3JnL25naW54LyIsInByZUluc3RhbGxOb3RlcyI6IlByZXBhcmluZyB0byBpbnN0YWxsIG5naW54LiIsInBvc3RJbnN0YWxsTm90ZXMiOiJOZ2lueCBoYXMgYmVlbiBpbnN0YWxsZWQuIiwicG9zdFVuaW5zdGFsbE5vdGVzIjoiTmdpbnggd2FzIHVuaW5zdGFsbGVkIHN1Y2Nlc3NmdWxseS4iLCJsaWNlbnNlcyI6W3sibmFtZSI6IkJTRCBsaWtlIiwidXJsIjoiaHR0cDovL25naW54Lm9yZy9MSUNFTlNFIn1dLCJpbWFnZXMiOnsiaWNvbi1zbWFsbCI6Imh0dHBzOi8vcGJzLnR3aW1nLmNvbS9wcm9maWxlX2ltYWdlcy81Njc3NzQ4NDQzMjI3MTM2MDAvdFlvVmp1MzEucG5nIiwiaWNvbi1tZWRpdW0iOiJodHRwczovL3Bicy50d2ltZy5jb20vcHJvZmlsZV9pbWFnZXMvNTY3Nzc0ODQ0MzIyNzEzNjAwL3RZb1ZqdTMxLnBuZyIsImljb24tbGFyZ2UiOiJodHRwczovL3Bicy50d2ltZy5jb20vcHJvZmlsZV9pbWFnZXMvNTY3Nzc0ODQ0MzIyNzEzNjAwL3RZb1ZqdTMxLnBuZyJ9fQ==",
      73. "DCOS_PACKAGE_REGISTRY_VERSION": "2.0",
      74. "DCOS_SERVICE_NAME": "nginx",
      75. "DCOS_SERVICE_PORT_INDEX": "0",
      76. "DCOS_PACKAGE_VERSION": "1.8.1",
      77. "DCOS_PACKAGE_NAME": "nginx",
      78. "DCOS_PACKAGE_IS_FRAMEWORK": "false"
      79. }
      80. }

      JSON 视图

      图 10. JSON 文件视图

  1. 单击 REVIEW & RUN,然后单击 RUN SERVICE

  2. 针对 Nick 重复之前的步骤。确保指定 "id": "/prod-b/nginx",,例如:

    1. {
    2. "id": "/prod-b/nginx",
    3. "cmd": "rm -rf /usr/share/nginx/html && ln -s /mnt/mesos/sandbox/hello-nginx-master/ /usr/share/nginx/html && nginx -g 'daemon off;'",
    4. "instances": 1,
    5. "cpus": 1,
    6. "mem": 1024,
    7. "disk": 0,
    8. "gpus": 0,
    9. "fetch": [
    10. ...
    11. }
  3. 在 Cory 或 Nick 登录时,单击 NGINX 启动图标,查看确认消息。

    NGINX

    图 11. 确认屏幕

    现在,我们将从超级用户的界面查看 Services 选项卡。

DC/OS Web 界面:监控用户帐户

注销当前用户,然后以具有超级用户权限的用户身份返回。您将看到,两个服务都在 prod-a 和 prod-b 组中运行。

prod-a-group

图 12. 超级用户界面