内容提要
Kubernetes 1.31现在使用WebSocket协议代替SPDY进行流式传输,提高与现代代理和网关的兼容性和支持。WebSocket协议提供了持久、双向、低延迟的实时交互连接。要使用新协议,请确保您的集群和kubectl版本为1.29或更高,并启用必要的功能开关和环境变量。
延伸解读
升级前需确认的版本与开关
要使用 WebSocket 流式传输,集群和 kubectl 版本需为 1.29 或更高。Kubernetes 1.31 中相关特性门控(TranslateStreamCloseWebsocketRequests 和 PortForwardWebsockets)已默认启用,但若连接旧集群,需手动开启这些门控。kubectl 端可通过环境变量 KUBECTL_REMOTE_COMMAND_WEBSOCKETS 和 KUBECTL_PORT_FORWARD_WEBSOCKETS 控制。升级前应检查版本和配置,避免命令失
对日常运维命令的直接影响
kubectl cp、attach、exec 和 port-forward 等命令依赖流式连接。此前 SPDY 协议被现代代理和网关弃用,可能导致这些命令在通过代理访问集群时失败。切换到 WebSocket 后,这些命令的兼容性得到改善,但前提是代理和网关支持 WebSocket。若仍遇到问题,需检查中间组件是否支持协议升级。
协议升级的底层机制
Kubernetes 通过在 HTTP 请求中添加 Upgrade: websocket 等头部将连接升级为流式连接。服务器若支持 WebSocket 及子协议版本(如 v5.channel.k8s.io),会返回 101 Switching Protocols,之后 STDIN、STDOUT、STDERR 及终端调整大小等数据都通过该连接双向传输。这一机制确保了低延迟的实时交互,是 exec 等命令的基础。
Q&A
Kubernetes 1.31中流式传输协议的变化是什么?
Kubernetes 1.31默认使用WebSocket协议替代SPDY进行流式传输,提升了与现代代理和网关的兼容性。
为什么Kubernetes要从SPDY切换到WebSocket?
SPDY协议已被弃用且不再被许多现代代理和网关支持,因此Kubernetes切换到WebSocket以确保兼容性和互操作性。
如何在Kubernetes中使用WebSocket流式协议?
确保集群和kubectl版本为1.29或更高,并启用相关的功能开关和环境变量即可使用WebSocket流式协议。
WebSocket协议与SPDY相比有什么优势?
WebSocket协议提供持久、双向、低延迟的连接,支持实时交互,且被现代代理和网关广泛支持。
Kubernetes 1.31中有哪些功能开关与WebSocket相关?
Kubernetes 1.31中与WebSocket相关的功能开关包括TranslateStreamCloseWebsocketRequests和PortForwardWebsockets,默认启用。
如何确保kubectl命令在代理或网关中正常工作?
使用Kubernetes 1.31及以上版本的kubectl,并确保集群支持WebSocket协议,以保证命令在代理或网关中正常工作。