有什么方法可以在Pod终端上运行oc命令?我想做的是让用户使用

oc login

然后运行命令以获取 token 。
oc whoami -t

然后使用该 token 调用openshift的REST API。这种方法在本地环境下有效,但在openshift上,存在一些权限问题,因为我想openshift不会为用户提供root权限。它说允许被拒绝。

编辑

因此,基本上,我希望能够获得该BEARER token ,我可以将其发送到REST API的HEADERS中,以创建Pod,服务,路由等。并且我希望在创建任何Pod之前都使用该 token ,因为我将使用该 token 来创建 pod 。我知道这听起来很愚蠢,但这就是我想知道的可能,我们使用oc命令在命令行中使用openshift的方式是否可行。

另一种可能的方式是调用给我一个 token 的API,然后在其他API调用中使用该 token 。

@gshipley在我看来,这听起来像是一个鸡蛋问题。但是,如果我要向您解释我在本地计算机上的工作,我只想在openshift上复制它(如果可能)。我在nodejs上运行oc命令,存储库中有oc.exe文件。我运行oc login和oc whoami -t。我读了我得到的 token 并将其存储。然后,我将该 token 作为BEARER发送到API header 中。多数民众赞成在我的本地机器上工作。我只想在openshift上复制这种情况。可能吗?

最佳答案

作为集群管理员,创建新的Role例如角色

apiVersion: authorization.openshift.io/v1
kind: ClusterRole
metadata:
  name: mysudoer
rules:
  apiGroups: [''],
  resources: ['users']
  verbs: ['impersonate']
  resourceNames: ["<your user name>"]

并运行
oc create -f role.yml

或代替创建原始的role.yml文件,使用:
oc create clusterrole mysudoer --verb impersonate --resource users --resource-name "<your user name>"

然后为您的ServiceAccount赋予新角色
oc adm policy add-cluster-role-to-user mysudoer system:serviceaccount:<project>:default

oc工具下载到您的容器中。现在,无论何时执行命令,都需要添加--as=<user name>或将其隐藏,请在容器内创建一个shell别名
alias oc="oc --as=<user name>"

现在oc的行为应与您机器上的行为完全相同,包括与ServiceAccount完全相同的特权,即ServiceAccount仅作为API的入口点,但实际任务由您的用户完成。

如果您想简单一些,只需将适当的权限添加到oc中,例如
oc policy add-role-to-user admin -z default --namespace=<your project>

如果运行该命令,则项目中任何具有ServiceAccount的容器都将能够自动神奇地在项目内部执行任务。但是,这种方式不会像第一步那样从用户那里继承权限,因此始终需要根据需要手动将其添加到服务帐户。

说明,您的项目中始终存在default,称为ServiceAccount。它没有特权,因此无法执行任何操作,但是默认情况下,每个单个容器中都包含用于验证oc的所有必要凭据。很酷的是OpenShift,如果您不提供任何凭据,而只是在oc的容器中运行它,它将自动尝试使用此帐户登录。上面的步骤仅显示如何获得对帐户的适当权限,以便ServiceAccount可以使用它来执行有意义的操作。

如果您只想访问RESt API,请使用中提供的 token
/var/run/secrets/kubernetes.io/serviceaccount/token

并如上所述设置oc的权限。这样,您甚至不需要ojit_code命令行工具。

关于docker - 我可以在openshift pod终端中运行oc命令吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49686375/

10-11 05:15