授予用户访问OpenShift中的项目/名称空间的权限

时间:2020-02-23 14:31:31  来源:igfitidea点击:

OpenShift中的项目是隔离和协作的单元。为了使开发人员部署应用程序,他们需要成为项目的成员。在一个项目中,成员可能具有不同的管理,编辑,查看等角色。作为项目管理员,我们可以将用户添加到群集中并为其分配特定的权限。以下是OpenShift.edit中的预定义角色:可以修改项目中大多数对象,但无权查看或者修改角色或者绑定的用户。admin:管理员用户有权查看项目中的任何资源。项目和修改项目中的任何资源(quota.cluster-admin除外):超级用户,可以在任何项目中执行任何操作。当与具有本地绑定的用户绑定时,他们具有对配额的完全控制权以及对项目中每个资源的所有操作。基本用户:可以获取有关项目和用户基本信息的用户。集群状态:可以获取基本集群的用户状态信息。自配置程序:可以创建自己的项目的用户。视图:无法进行任何修改,但可以看到项目中大多数对象的用户。他们无法查看或者修改角色或者绑定。

在这个简短的教程中,我们将创建一个测试项目,用户,并授予他们访问所创建项目的权限。其中一位用户将只能查看集群的访问权限,一位用户应能够编辑名称空间/项目中的所有资源。

在OpenShift上创建一个项目

在OpenShift上创建一个项目。可以在CLI或者Web控制台上完成此操作。

$oc new-project test
Now using project "test" on server "https://api.devocp.example.com:6443".

然后,我们可以列出所有可用项目,以确认我们刚刚创建的项目可用。

$oc get projects

授予用户对OpenShift项目的访问权限

在授予用户访问Project的权限之前,我们应该已经授予用户对OpenShift群集的访问权限。 OpenShift中可以使用多个提供程序来验证用户身份。我们最近创建了一篇有关使用HTPasswd管理OpenShift集群用户的文章。

使用HTPasswd身份提供程序管理OpenShift/OKD用户

我们可以使用oc get users命令获取已经登录到集群的用户列表:

$oc get users
JKMUTAI     17a06002-b543-4fa9-bfa8-92e510646d0a   Josphat Mutai                HTPasswd: Q049Sm9zcGhhdCBNdXRhaSxPVT1TYWZhcmljb20gRGVwYXJ0bWVudHMsREM9c2FmYXJpY29tLERDPW5ldA

使用角色绑定向用户授予对项目的访问权限。使用的语法是:

$oc adm policy add-role-to-user <role> <user> -n <projectname>

要在测试项目中分配JKMUTAI用户编辑角色,请运行以下命令。

$oc adm policy add-role-to-user edit JKMUTAI -n test
clusterrole.rbac.authorization.k8s.io/edit added: "JKMUTAI"

对于群集角色,请使用以下命令:

$oc adm policy add-cluster-role-to-user edit JKMUTAI -n test

要从用户中删除角色,请使用:

$oc adm policy remove-role-from-user <role> <user> -n <projectname>
$oc adm policy remove-cluster-role-from-user <role> <user> -n <projectname>

如果要获取有权访问该项目的用户列表,请运行以下命令:

$oc get rolebindings -n <projectname>
$oc get rolebindings <rolename> -n <projectname>

输出示例:

我们可以从CLI或者控制台登录,并确认可以切换到项目以进行应用程序部署。

$oc login

使用以下命令切换到项目:

$oc project test
Already on project "test" on server "https://api.example.com:6443".

部署测试应用程序。

oc apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: command-demo
  labels:
    purpose: demonstrate-command
spec:
  containers:
  - name: command-demo-container
    image: debian
    command: ["printenv"]
    args: ["HOSTNAME", "KUBERNETES_PORT"]
  restartPolicy: OnFailure
EOF

确认容器正在运行:

$oc get pods