如何以只读模式访问MicroK8s,仅查询集群状态且无修改权限?
MicroK8s只读权限配置方案
你提到的错误提示翻译如下:
microk8s.kubectl 权限不足,无法访问MicroK8s。你可以选择使用sudo重试,或者将digital用户添加到
microk8s组:sudo usermod -a -G microk8s digital sudo chown -f -R digital ~/.kube新的组权限会在用户下次登录后生效。
上述操作会授予当前用户集群完全管理权限,不符合只读需求,可通过创建只读ServiceAccount的方式实现需求,具体操作如下:
- 步骤1:临时使用管理员权限创建只读服务账号
运行以下命令创建名为microk8s-reader的专属服务账号:sudo microk8s kubectl create serviceaccount microk8s-reader -n default - 步骤2:绑定只读访问权限
Kubernetes默认内置的view集群角色拥有所有集群资源的只读权限,无创建/修改/删除权限,将其绑定到刚才创建的服务账号:
如果你需要进一步限制敏感资源(比如Secret)的读取权限,可以自定义ClusterRole替换上述命令中的sudo microk8s kubectl create clusterrolebinding microk8s-reader-binding --clusterrole=view --serviceaccount=default:microk8s-readerview角色。 - 步骤3:获取服务账号的访问凭证
运行以下命令生成访问用的token(默认有效期1小时):
如果需要长期有效的token,可运行以下命令创建永久token存储Secret:sudo microk8s kubectl create token microk8s-reader -n defaultsudo microk8s kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
type: kubernetes.io/service-account-token
metadata:
name: microk8s-reader-secret
annotations:
kubernetes.io/service-account.name: microk8s-reader
EOF
再运行以下命令提取永久token:
sudo microk8s kubectl get secret microk8s-reader-secret -o jsonpath='{.data.token}' | base64 -d
- 步骤4:普通用户下配置kubeconfig 不需要将用户加入`microk8s`组,在当前普通用户下编辑`~/.kube/config`文件,写入以下配置,替换对应占位内容: ```yaml apiVersion: v1 clusters: - cluster: certificate-authority-data: 【替换为执行sudo microk8s config view返回的certificate-authority-data字段值】 server: https://127.0.0.1:16443 name: microk8s-cluster contexts: - context: cluster: microk8s-cluster user: microk8s-reader name: microk8s-readonly current-context: microk8s-readonly kind: Config preferences: {} users: - name: microk8s-reader user: token: 【替换为步骤3获取的token】
- 步骤5:验证权限配置
配置完成后运行kubectl get pods -A可正常查看所有命名空间下的Pod资源,运行修改类命令比如kubectl delete pod <任意Pod名>会返回权限禁止错误,即配置生效。
内容的提问来源于stack exchange,提问作者digital_infinity
相关产品推荐
相关产品推荐

