×

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。

:50000: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 发送的所有数据都传递回客户端的同一流。

客户端在完成端口转发请求后,会关闭所有流、升级的连接和底层连接。