CodeReady Containers 中 developer 无法访问 Topology
结论
developer 无需单独获取 “Topology 权限”。Topology 页面读取的是当前 Project(即 Kubernetes namespace)中的 DeploymentConfig、Deployment、Service、Route 等资源。
报错中写明:
in the namespace "default"
这表示控制台正在读取 default namespace。普通 developer 用户默认无权查看这个系统预置 namespace,所以请求会被拒绝。切换到 developer 自己创建的 Project 即可,无需授予整个集群的管理员权限。
如果目标 Project 由其他用户创建,可以由管理员在该 Project 中为 developer 授予 edit 角色。
确认当前选择的 Project
进入 OpenShift Web Console 的 Developer 视图,查看页面上方的 Project 下拉框。将 Project 从 default 切换为刚创建的项目,例如 demo 或 myproject。
如果还没有项目,可以在命令行中以 developer 身份登录并创建:
oc login -u developer -p developer
oc new-project myproject
oc project myproject
不同 CRC 版本的 API 地址和登录方式可能不同,可以先查看 CRC 提供的登录信息:
crc console --credentials
登录后检查当前身份和项目:
oc whoami
oc project
用户应为 developer,当前项目应为 myproject,不能是 default。
随后返回 Web Console,刷新页面,在 Project 下拉框中选择 myproject,再打开 Topology。
检查 developer 的现有权限
使用 oc auth can-i 可以直接检查某项操作是否获得授权:
oc auth can-i list deploymentconfigs.apps.openshift.io -n myproject
如果输出:
yes
说明权限正常,问题通常是 Web Console 选择了错误的 Project。
也可以检查其他常规开发操作:
oc auth can-i create deployments.apps -n myproject
oc auth can-i create services -n myproject
oc auth can-i create routes.route.openshift.io -n myproject
oc auth can-i create pods -n myproject
用户通过 oc new-project 创建 Project 后,通常会自动获得该 Project 的管理权限。实际行为可能受到集群 RBAC 和项目模板配置的影响。
为 developer 授予现有 Project 的开发权限
如果 myproject 由 kubeadmin 或其他管理员创建,developer 可能没有相应权限。先使用 CRC 显示的管理员凭据登录:
crc console --credentials
再执行:
oc adm policy add-role-to-user edit developer -n myproject
edit 适合常规开发。该角色允许用户在指定 Project 中创建和修改应用资源,但无权管理整个集群。
授权后可以验证:
oc auth can-i list deploymentconfigs.apps.openshift.io \
--as=developer \
-n myproject
如果 developer 还需要管理该 Project 中的角色绑定等设置,可以授予 admin:
oc adm policy add-role-to-user admin developer -n myproject
常规开发使用 edit 即可。只有需要管理项目成员和权限时,才使用 admin。
必须访问 default namespace 时
default 不适合作为日常开发项目。如果确实需要让 developer 在其中开发,可以由管理员执行:
oc adm policy add-role-to-user edit developer -n default
如果只需查看资源,可以授予权限较小的 view:
oc adm policy add-role-to-user view developer -n default
更合适的做法是创建独立的 Project,并将应用部署到其中。
不要直接授予 cluster-admin
以下命令可能会消除报错,但不适合作为常规解决方案:
oc adm policy add-cluster-role-to-user cluster-admin developer
它会让 developer 获得整个集群的最高权限,可以访问系统组件和其他 Project。即使 CRC 通常用于本地开发,也没必要为了打开 Topology 页面授予这么大的权限范围。
仍然报错时如何排查
先确认当前身份:
oc whoami
列出当前用户可以访问的项目:
oc projects
检查目标项目中的权限:
oc auth can-i list deploymentconfigs.apps.openshift.io -n myproject
查看目标项目中的角色绑定:
oc get rolebinding -n myproject
如果命令行检查结果为 yes,Web Console 却仍然提示无权访问 default,可以退出控制台后重新登录,选择 myproject,然后刷新 Topology 页面。
用户在当前 namespace 中绑定的角色决定了实际权限。developer 只是用户名,不会自动获得开发权限,OpenShift RBAC 才是权限的依据。
备注:内容仅供参考。
