7.7. 在 OpenShift Container Platform 容器中执行远程命令
您可以使用 CLI 在 OpenShift Container Platform 容器中执行远程命令。
7.7.1. 在容器中执行远程命令
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
用户执行。
7.7.2. 用于从客户端发起远程命令的协议
客户端通过向 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
标头设置为 stdin
、stdout
或 stderr
之一。
在完成远程命令执行请求后,客户端关闭所有流、升级的连接和底层连接。