本文档介绍如何在 Chaos Mesh 中进行用户权限管理,包括创建用户并绑定权限、管理令牌以及开启/关闭权限验证功能。

Chaos Mesh 使用 Kubernetes 原生的 RBAC 功能来管理用户角色和权限。用户在创建、查看、管理混沌实验时,需要拥有 chaos-mesh.org 这个 apiGroups 下混沌实验自定义资源的相应权限。

:::note 注意

使用 Helm 安装 Chaos Mesh 时,默认开启权限验证功能。对于生产环境及其他安全要求较高的场景,建议保持权限验证功能开启。如果只是想体验 Chaos Mesh 的功能,希望关闭权限验证从而快速创建混沌实验,可以直接参阅权限验证功能的开启及关闭部分了解如何关闭权限验证。

:::

创建用户并绑定权限

你可以直接通过 Chaos Mesh Dashboard 界面创建用户并绑定权限。在访问 Dashboard 时会有登录窗口弹出,点击“点击这里生成”

Dashboard 令牌登录

点击后,弹出的窗口如下所示:

Dashboard 令牌辅助生成器

需在弹出的窗口上执行下面的操作至第 3 步:

  1. 选择权限范围

    如要获取整个 Kubernetes 混沌实验的相应权限,勾选集群范围方框。如果在命名空间下拉选项中指定了 namespace,则只获取该 namespace 下的权限。

  2. 选择角色

    目前 Chaos Mesh 提供了以下角色:

    • Manager:拥有混沌实验的创建、查看、更新、删除等所有权限。
    • Viewer:只拥有混沌实验的查看权限。
  3. 生成 RBAC 配置

    在确定了所创建权限的范围和角色后,Dashboard 页面上会显示对应的 RBAC 配置。例如, busybox namespace 下 Manager 角色的 RBAC 配置如下所示:

    1. kind: ServiceAccount
    2. apiVersion: v1
    3. metadata:
    4. namespace: busybox
    5. name: account-busybox-manager-zcbaf
    6. ---
    7. kind: Role
    8. apiVersion: rbac.authorization.k8s.io/v1
    9. metadata:
    10. namespace: busybox
    11. name: role-busybox-manager-zcbaf
    12. rules:
    13. - apiGroups: [""]
    14. resources: ["pods", "namespaces"]
    15. verbs: ["get", "watch", "list"]
    16. - apiGroups:
    17. - chaos-mesh.org
    18. resources: [ "*" ]
    19. verbs: ["get", "list", "watch", "create", "delete", "patch", "update"]
    20. ---
    21. apiVersion: rbac.authorization.k8s.io/v1
    22. kind: RoleBinding
    23. metadata:
    24. name: bind-busybox-manager-zcbaf
    25. namespace: busybox
    26. subjects:
    27. - kind: ServiceAccount
    28. name: account-busybox-manager-zcbaf
    29. namespace: busybox
    30. roleRef:
    31. kind: Role
    32. name: role-busybox-manager-zcbaf
    33. apiGroup: rbac.authorization.k8s.io

    点击 Dashboard 窗口中 RBAC 配置右上角的复制将 RBAC 配置内容复制到剪切板,然后写入到本地文件 rbac.yaml

  4. 创建用户并绑定权限

    在终端中运行以下命令:

    1. kubectl apply -f rbac.yaml
  5. 生成令牌

    复制 Dashboard 中第 3 步“最后获取令牌”下的命令,并在终端中运行:

    1. kubectl describe -n busybox secrets account-busybox-manager-zcbaf

    输出如下所示:

    1. Name: account-busybox-manager-zcbaf-token-x572r
    2. Namespace: busybox
    3. Labels: <none>
    4. Annotations: kubernetes.io/service-account.name: account-busybox-manager-zcbaf
    5. kubernetes.io/service-account.uid: 19757b8d-195f-4231-b193-be18280b65d3
    6. Type: kubernetes.io/service-account-token
    7. Data
    8. ====
    9. ca.crt: 1025 bytes
    10. namespace: 7 bytes
    11. token: eyJhbGciOi...z-PWMK8iQ

    复制以上输出中的 token 的数据,用于下一步的登录。

  6. 使用创建的用户登录 Chaos Mesh

    点击 Dashboard 令牌辅助生成器窗口上的关闭,返回到登录窗口。在令牌输入框中输入上一步复制的 token 数据,并在名称输入框中给该令牌输入一个有意义的名称,建议使用权限的范围和角色,例如 busybox-manager。输入完成后,点击提交进行登录:

    Dashboard 令牌登录

:::note 注意

  • 需要保证执行 kubectl 的本地用户具有集群的管理权限,从而可以创建用户、绑定不同的权限、并获取 token。

  • 如果没有部署 Chaos Mesh Dashboard,也可以自行生成相应的 RBAC 配置,通过 kubectl 创建用户并绑定权限。

:::

管理令牌

如要管理令牌,在 Dashboard Web 页面中点击设置,如下所示:

Dashboard 令牌管理

可以在添加令牌窗口中继续添加新的令牌,也可以点击使用以切换不同权限的令牌,或者删除令牌。

开启或关闭权限验证功能

使用 Helm 安装 Chaos Mesh 时,默认开启权限验证功能。对于生产环境及其他安全要求较高的场景,建议都保持权限验证功能开启。如果只是想体验 Chaos Mesh 的功能,希望关闭权限验证从而快速创建混沌实验,可以在 Helm 命令中设置 --set dashboard.securityMode=false,命令如下所示:

  1. helm upgrade chaos-mesh chaos-mesh/chaos-mesh --namespace=chaos-testing --set dashboard.securityMode=false

如果想重新开启权限验证功能,再重新设置 --set dashboard.securityMode=true 即可。