$ oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
OpenShift Dedicated 支持对 Pod 进行端口转发。
您可以使用 CLI 将一个或多个本地端口转发到 Pod。这允许您在本地监听给定或随机端口,并将数据转发到 Pod 中的给定端口。
CLI 内置了对端口转发的支持
$ oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
CLI 监听用户指定的每个本地端口,使用下面描述的协议进行转发。
可以使用以下格式指定端口
5000
|
客户端在本地监听端口 5000 并转发到 Pod 中的 5000。 |
6000:5000
|
客户端在本地监听端口 6000 并转发到 Pod 中的 5000。 |
:5000 或 0:5000 |
客户端选择一个空闲的本地端口并转发到 Pod 中的 5000。 |
OpenShift Dedicated 处理来自客户端的端口转发请求。收到请求后,OpenShift Dedicated 升级响应并等待客户端创建端口转发流。当 OpenShift Dedicated 收到新的流时,它会在流和 Pod 的端口之间复制数据。
从架构上讲,有多种转发到 Pod 端口的选项。受支持的 OpenShift Dedicated 实现直接在节点主机上调用 `nsenter` 以进入 Pod 的网络命名空间,然后调用 `socat` 将数据复制到流和 Pod 的端口之间。但是,自定义实现可以包括运行一个 _辅助_ Pod,然后运行 `nsenter` 和 `socat`,这样就不需要在主机上安装这些二进制文件。
您可以使用 CLI 将一个或多个本地端口转发到 Pod。
使用以下命令在 Pod 中监听指定的端口
$ oc port-forward <pod> [<local_port>:]<remote_port> [...[<local_port_n>:]<remote_port_n>]
例如
使用以下命令在本地监听端口 `5000` 和 `6000`,并将数据转发到 Pod 中的端口 `5000` 和 `6000`
$ oc port-forward <pod> 5000 6000
Forwarding from 127.0.0.1:5000 -> 5000
Forwarding from [::1]:5000 -> 5000
Forwarding from 127.0.0.1:6000 -> 6000
Forwarding from [::1]:6000 -> 6000
使用以下命令在本地监听端口 `8888` 并转发到 Pod 中的 `5000`
$ oc port-forward <pod> 8888:5000
Forwarding from 127.0.0.1:8888 -> 5000
Forwarding from [::1]:8888 -> 5000
使用以下命令在本地监听一个空闲端口并转发到 Pod 中的 `5000`
$ oc port-forward <pod> :5000
Forwarding from 127.0.0.1:42390 -> 5000
Forwarding from [::1]:42390 -> 5000
或
$ oc port-forward <pod> 0:5000
客户端通过向 Kubernetes API 服务器发出请求来启动对 Pod 的端口转发
/proxy/nodes/<node_name>/portForward/<namespace>/<pod>
在上面的 URL 中
<node_name>
是节点的 FQDN。
<namespace>
是目标 Pod 的命名空间。
<pod>
是目标 Pod 的名称。
例如
/proxy/nodes/node123.openshift.com/portForward/myns/mypod
向 API 服务器发送端口转发请求后,客户端会将连接升级为支持多路复用流的连接;当前实现使用 超文本传输协议版本 2 (HTTP/2)。
客户端创建一个包含目标 Pod 端口号的 port
头部的流。写入流的所有数据都通过 kubelet 传递到目标 Pod 和端口。类似地,从该转发连接的 Pod 发送的所有数据都传递回客户端的同一流。
客户端在完成端口转发请求后,会关闭所有流、升级的连接和底层连接。