【问题标题】:How can I access Microk8s in Read only mode?如何以只读模式访问 Microk8s?
【发布时间】:2021-08-16 23:52:16
【问题描述】:

我想使用 µK8s 读取 K8s 的状态,但我不想拥有修改任何内容的权限。如何做到这一点?

以下内容将为我提供完全访问权限:

microk8s.kubectl  Insufficient permissions to access MicroK8s. You can either try again with sudo or add the user digital to the 'microk8s' group:

   sudo usermod -a -G microk8s digital    sudo chown -f -R digital ~/.kube

The new group will be available on the user's next login.

【问题讨论】:

  • 在限制集群角色/权限方面,更改配置文件的所有权不会给您带来太多好处。正如您在步骤 2 here 中看到的那样,做您所描述的事情是完全正常的。对于集群权限微调,您需要更改/配置 RBAC 规则。最后,明确描述目标肯定有助于为您提供一些解决方案。
  • 在我的公司有一个政策,程序员不能在生产中修改任何东西(恕我直言)。当我们迁移到 K8S 时,我们希望为程序员启用只读访问,例如检查状态/部署等,但所有更改都必须经过 DEV-OPS 团队。只有 DEV-OPS 团队拥有sudo 和修改任何内容的权利。
  • .. 在 Unix/Linux 上,我们可以设置适当的文件/目录访问权限 - 只需 rx,降低 shell 限制(如最大内存/打开文件描述符),降低进程优先级(nice -19 )。我们正在为 K8S 寻找类似的解决方案。当然有一种时尚是不让终端访问生产系统并使用 K8S 的所有 Gui/W​​eb 工具,但终端访问是团队领导开发人员检查一切是否正确的额外检查。
  • 特别是我们在低延迟(或延迟敏感)系统上工作,我们必须注意寻找 K8S 的节点。

标签: kubernetes microk8s


【解决方案1】:

在 Unix/Linux 上,我们可以设置适当的文件/目录访问 权限 - 只需 rx,减少 shell 限制(如最大内存/打开 文件描述符),降低进程优先级(nice -19)。我们是 为 K8S 寻找类似的解决方案

Kubernetes 中的这种解决方案是通过RBAC(基于角色的访问控制)来处理的。 RBAC 防止未经授权的用户查看或修改集群状态。因为 API 服务器公开了一个 REST 接口,所以用户通过向服务器发送 HTTP 请求来执行操作。用户通过在请求中包含凭据(身份验证令牌、用户名和密码或客户端证书)来验证自己。

对于 REST 客户端,您将获得 GETPOSTPUTDELETE 等。这些发送到代表特定 REST API 资源(Pod、服务、部署等)的特定 URL 路径。

RBAC auth 配置了两个组:

  • Roles 和 ClusterRoles - 指定可以执行哪些动作/动词
  • RoleBinding 和 ClusterRoleBindings - 将上述角色绑定到用户、组或服务帐户。

您可能已经发现ClusterRole 是您可能正在寻找的那个。这将允许针对集群限制特定用户或组。 在下面的示例中,我们正在创建只能列出 pod 的 ClusterRole。命名空间被省略,因为 ClusterRoles 没有被命名。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: pod-viewer
rules:
- apiGroups: [""]
  resources: ["pods"]
  verbs: ["list"]

此权限必须通过ClusterRoleBinding 绑定:

apiVersion: rbac.authorization.k8s.io/v1
# This cluster role binding allows anyone in the "manager" group to list pods in any namespace.
kind: ClusterRoleBinding
metadata:
  name: list-pods-global
subjects:
- kind: Group
  name: manager # Name is case sensitive
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: pod-viewer
  apiGroup: rbac.authorization.k8s.io

由于您自己没有足够的权限,您必须联系管理这些权限的适当人员,以便为您创建拥有ClusterRole: View 的用户。视图角色应该已经在集群中预定义(kubectl get clusterrole view

如果您想阅读更多内容,Kubernetes docs 很好地解释了它的整个授权概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多