Kubectl exec实现的原理是什么?
首先,kubectl 向 API Server 发出了 GET
和 POST
请求,API Server 返回了 101 Ugrade
响应,向客户端表示已切换到 SPDY
协议。
随后 API Server 使用 storage.PodStorage
和 rest.ExecRest
来提供处理器的映射和执行逻辑,其中 rest.ExecRest
处理器决定 exec
要进入的节点。
最后 Kubelet 向 Docker shim
请求一个流式端点 URL,并将 exec
请求转发到 Docker exec
API。kubelet 再将这个 URL 以 Redirect
的方式返回给 API Server,请求就会重定向到到对应 Streaming Server 上发起的 exec
请求,并维护长链。
虽然本文只关注了 kubectl exec 命令,但其他的子命令(例如 attach
、port-forward
、log
等等)也遵循了类似的实现模式:
时来天地皆同力,运去英雄不自由