有什么方法可以在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/