×

您可以使用CLI在AWS上的Red Hat OpenShift Service容器中执行远程命令。

在容器中执行远程命令

CLI内置对远程容器命令执行的支持。

步骤

要在容器中运行命令

$ oc exec <pod> [-c <container>] -- <command> [<arg_1> ... <arg_n>]

例如

$ oc exec mypod date
示例输出
Thu Apr  9 02:21:53 UTC 2015

出于安全考虑oc exec命令在访问特权容器时不起作用,除非该命令由cluster-admin用户执行。

从客户端启动远程命令的协议

客户端通过向Kubernetes API服务器发出请求来启动在容器中执行远程命令。

/proxy/nodes/<node_name>/exec/<namespace>/<pod>/<container>?command=<command>

在上面的URL中

  • <node_name>是节点的FQDN。

  • <namespace>是目标Pod的项目。

  • <pod>是目标Pod的名称。

  • <container>是目标容器的名称。

  • <command>是要执行的所需命令。

例如

/proxy/nodes/node123.openshift.com/exec/myns/mypod/mycontainer?command=date

此外,客户端可以向请求添加参数以指示是否

  • 客户端应向远程容器的命令发送输入(stdin)。

  • 客户端的终端是TTY。

  • 远程容器的命令应将stdout的输出发送到客户端。

  • 远程容器的命令应将stderr的输出发送到客户端。

向API服务器发送exec请求后,客户端会将连接升级到支持多路复用流的连接;当前实现使用**HTTP/2**。

客户端为stdin、stdout和stderr分别创建一个流。为了区分这些流,客户端将流上的streamType标头设置为stdinstdoutstderr之一。

客户端在完成远程命令执行请求后,关闭所有流、升级的连接和底层连接。