有没有办法在pod终端上运行oc命令?我想要做的是让用户使用
登录oc login
然后运行命令获取令牌。
oc whoami -t
然后使用该令牌调用openshift的REST API。这种方式适用于本地环境,但在openshift上,存在一些权限问题,因为我认为openshift没有向用户提供root权限。许可被拒绝。
修改
所以基本上我希望能够获得我可以在REST API的HEADERS中发送的BEARER令牌来创建pod,服务,路由等。我想在任何pod之前创建令牌,因为我将要使用该令牌创建pod。听起来可能听起来很傻,但是如果可能的话,我想知道的是,我们使用命令行使用oc命令的方式,是否可以在openshift中使用。
另一种可能的方法是调用一个给我一个令牌的API,然后在其他API调用中使用该令牌。
@gshipley这对我来说听起来像鸡蛋问题。但是,如果我要解释你在我的本地机器上做了什么,我想要的就是在openshift中复制它,如果可能的话。我在nodejs上运行oc命令,oc.exe文件在我的存储库中。我运行oc登录和oc whoami -t。我读了我得到的令牌并存储它。然后我将该标记作为BEARER发送到API标头中。多数民众赞成在我的本地机器上运作。我只想在openshift上复制这个场景。有可能吗?
答案 0 :(得分:1)
作为群集管理员创建新的Role
,例如role.yml
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
完全相同的权限,仅作为API的入口点,但实际任务是以您的用户身份完成的。
如果您想要更简单的事情,只需为ServiceAccount
添加适当的权限,例如
oc policy add-role-to-user admin -z default --namespace=<your project>
如果运行该命令,项目中具有oc
的任何容器都将能够自动神奇地执行项目内的任务。但是,这样,权限不会像第一步那样从用户继承,因此始终需要根据需要手动将其添加到服务帐户。
说明,项目中始终有ServiceAccount
名为default
。它没有特权,因此无法执行任何操作,但默认情况下,每个容器中都会使用所有必要的凭据来验证ServiceAccount
。很酷的是oc
,如果您不提供任何凭据,只需在OpenShift
中的容器内运行它,它将自动尝试使用此帐户登录。上述步骤只显示如何获得帐户的适当权限,以便oc
可以使用它来执行有意义的操作。
如果您只想访问RESt API,请使用
中提供的令牌/var/run/secrets/kubernetes.io/serviceaccount/token
并如上所述设置ServiceAccount
的权限。有了它,您甚至不需要oc
命令行工具。