如何在只读模式下访问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,减少外壳限制(如最大内存/打开文件描述符(、降低进程优先级(nice -19(。我们是为K8S 寻找类似的解决方案

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

对于REST客户端,您将获得GETPOSTPUTDELETE等。这些都发送到表示特定REST API资源(Pods、Services、Deployments等(的特定URL路径。

RBAC身份验证配置有两个组:

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

最新更新