我可以在openshift pod终端中运行oc命令吗?

时间:2018-04-06 06:03:50

标签: docker openshift redhat openshift-client-tools openshift-cartridge

有没有办法在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上复制这个场景。有可能吗?

1 个答案:

答案 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命令行工具。