【问题标题】:Can I run oc commands in openshift pod terminals?我可以在 openshift pod 终端中运行 oc 命令吗?
【发布时间】:2018-04-06 06:03:49
【问题描述】:

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

登录
oc login

然后运行命令获取令牌。

oc whoami -t

然后使用该令牌调用 openshift 的 REST API。这种方式适用于本地环境,但在 openshift 上,存在一些权限问题,因为我猜 openshift 不会授予用户 root 权限。它说权限被拒绝。

编辑

所以基本上我希望能够获得那个 BEARER 令牌,我可以在 REST API 的 HEADERS 中发送以创建 pod、服务、路由等。而且我想要在制作任何 pod 之前使用该令牌,因为我将使用用于创建 pod 的令牌。我知道这听起来可能很愚蠢,但这就是我想知道的是否可能,我们使用命令行使用 oc 命令的方式,在 openshift 上是否可能。

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

@gshipley 对我来说这听起来确实像是一个鸡鸡蛋问题。但是,如果我要向您解释我在本地机器上所做的事情,我只想在可能的情况下在 openshift 上复制它。我在 nodejs 上运行 oc 命令,oc.exe 文件在我的存储库中。我运行 oc login 和 oc whoami -t。我阅读了我获得的令牌并将其存储。然后我将该令牌作为 BEARER 发送到 API 标头中。这就是我的本地机器上的工作。我只想在 openshift 上复制这个场景。有可能吗?

【问题讨论】:

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


【解决方案1】:

作为集群管理员创建新的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=&lt;user name&gt;,或者要隐藏它,请在容器中创建一个 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 命令行工具。

【讨论】:

  • 在控制台中创建角色时出现以下错误。服务器出错(禁止):创建“role.yml”时出错:用户“”无法在集群范围内创建集群角色
  • 正如我上面提到的,您需要成为“集群管理员”才能被允许这样做。要做到这一点,您需要运行oc adm policy add-cluster-role-to-user cluster-admin &lt;username&gt; 并作为具有集群管理员权限的用户(使用minishift 时执行oc login -u system:admin 以获得该权限)。如果您无法获得该权限(例如生产集群),您将需要使用第二种方法而不进行模拟或要求您的管理员为您执行此操作。
  • 有没有办法为构建器容器做到这一点?我正在尝试从 S2I 汇编脚本运行 oc,但它不会自动从上下文中获取任何身份验证信息(我可以手动提供令牌,这将起作用,但这当然不是我们想要的)跨度>
  • 当我尝试这个时,我得到“错误:默认集群没有定义服务器”。我必须指定 --server=
猜你喜欢
  • 2018-11-05
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-25
  • 2021-05-30
  • 2021-09-26
  • 1970-01-01
相关资源
最近更新 更多