明白了!这是 kubectl port-forward 的底层实现。
代码分析
这段代码展示了 kubectl port-forward 的一种实现方式:
req := restClient.Post().
Resource("pods").
Name(pod.Name).
Namespace(pod.Namespace).
SubResource("exec")
req.VersionedParams(&corev1.PodExecOptions{
Container: container.Name,
Command: []string{"nc", opts.RemoteHost, remotePort}, // 关键:依赖 nc 命令
Stdin: true,
Stdout: true,
Stderr: false,
TTY: false,
}, scheme.ParameterCodec)
工作流程:
kubectl port-forward → API Server → exec 到 Pod → 执行 nc host port → 建立 TCP 隧道
本地连接的数据通过 SPDY stream 双向转发到 Pod 内的 nc 进程,实现端口转发。
结论
这是一个合理的使用场景。nc 在这里作为 kubectl port-forward 功能的基础设施,不是直接暴露给外部攻击者。
在 VPC NAT Gateway 场景下,如果需要支持 kubectl port-forward 进入该 Pod 并转发到 VPC 内部服务,确实需要 nc。