kubectl port-forward

14 阅读1分钟

image.png

明白了!这是 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