微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何以只读模式访问 Microk8s?

如何解决如何以只读模式访问 Microk8s?

我想使用 µ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.

解决方法

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

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

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

RBAC auth 配置了两个组:

  • 角色和集群角色 - 指定可以执行哪些动作/动词
  • 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 很好地解释了它的整个授权概念。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。