Kubernetes 1.31: Streaming Transitions from SPDY to WebSockets
Bài tóm tắt Kubernetes (CNCF) 2024 4. Điều chỉnh Độ khó: Dễ
Kubernetes · 2024 · 4. Điều chỉnh · Độ khó: Dễ — bài gốc
Bài ngắn thông báo thay đổi của dự án; ít số liệu.
Bối cảnh
- Một số endpoint của API server (
exec,attach,cp,port-forward) được nâng cấp từ HTTP lên kết nối streaming hai chiều. Từ đầu, Kubernetes dùng SPDY/3.1 cho việc này. - SPDY đã bị bỏ khoảng 8 năm và chưa từng được chuẩn hoá. Nhiều proxy, gateway, load balancer hiện đại không hỗ trợ, nên các lệnh trên hỏng khi đi qua proxy hay gateway.
Thay đổi chính
- Từ v1.31,
kubectlmặc định dùng WebSocket (RFC 6455): client gửiUpgrade: websocketkèm subprotocol (ví dụv5.channel.k8s.io); nếu server và container runtime hỗ trợ thì trả101 Switching Protocols, rồi STDIN/STDOUT/STDERR, đổi cỡ terminal và mã thoát đi trên kết nối đó. - Chuyển dần qua nhiều bản, hai phía bật riêng:
- Phía server: feature gate
TranslateStreamCloseWebsocketRequests(exec/attach, có từ v1.29) vàPortForwardWebsockets(v1.30); tới v1.31 là beta, bật mặc định. - Phía client: biến môi trường
KUBECTL_REMOTE_COMMAND_WEBSOCKETSvàKUBECTL_PORT_FORWARD_WEBSOCKETS. kubectl1.31 tự dùng hành vi mới nhưng cần cụm đã bật tính năng phía server; với cụm cũ hơn, có thể tự bật hai feature gate để thử.
- Phía server: feature gate
Vì sao
- Giao thức nằm giữa client và server còn phải đi qua mọi middlebox ở giữa; khi hệ sinh thái bỏ một giao thức, hệ của mình hỏng dù không đổi gì (Migration không downtime).
Bài học cho SWE
- Đổi giao thức ở hệ có nhiều phiên bản client/server cùng tồn tại: thương lượng (subprotocol), bật từng phía bằng cờ, qua vài bản phát hành mới đổi mặc định.
- Phụ thuộc vào một giao thức chưa chuẩn hoá là nợ kỹ thuật trả dần theo thời gian, qua những chỗ mình không kiểm soát (proxy của khách).
Liên quan
#SPDY#WebSocket#HTTP Upgrade#kubectl exec#port-forward#Feature gate#Subprotocol negotiation#Proxy compatibility
Được nhắc tới trong
Chủ đề (1)
Công ty (1)
Bài tóm tắt (1)