3 回答

TA貢獻1886條經驗 獲得超2個贊
您正在使用 NodePort 公開服務,因此沒有反向代理,但您直接連接到您的 Pod。這是一個不錯的選擇。(稍后您可能想使用 Ingress)
您看到的是只有一個 Pod 處理您的請求。您希望每個請求都負載均衡到不同的 pod。你的假設是正確的,但是負載均衡不是發生在HTTP請求層,而是發生在TCP層。
因此,當您擁有持久的 TCP 連接并重新使用它時,您將不會體驗到您期望的負載平衡。由于建立 TCP 連接的延遲時間相當昂貴,因此通常會進行優化以避免重復打開新的 TCP 連接:HTTP keep-alive。
大多數框架和客戶端默認啟用 Keep Alive,Go 也是如此。嘗試s.SetKeepAlivesEnabled(false)
看看是否可以解決您的問題。(僅推薦用于測試?。?/p>
您還可以使用多個不同的客戶端,通過命令行使用curl 或在Postman 中禁用keep-alive。

TA貢獻1993條經驗 獲得超6個贊
在 Kubernetes 集群中,發送到 k8s 服務的請求通過kube-proxy進行路由。
默認kube-proxy
模式是Iptalbles
從 Kubernetes v1.2 開始的,它允許服務和后端 Pod 之間更快的數據包解析。后端 Pod 之間的負載平衡直接通過iptables rules
.
也許您沒有生成足夠的負載,而一個 pod 無法處理,這就是您從 路由到同一個 pod 的原因kube-proxy
。

TA貢獻1890條經驗 獲得超9個贊
我嘗試使用請求標頭,它解決了負載平衡問題,其中所有請求僅命中單個副本,而對于演示或測試,能夠將請求分發到所有副本非常有用
連接:保持活動 連接:關閉
該請求總是到達同一個 pod
curl?-H?"Connection:?keep-alive"?http://your-service:port/path
但是,使用close
,請求會平衡到所有 pod
curl?-H?"Connection:?close"?http://your-service:port/path
- 3 回答
- 0 關注
- 226 瀏覽
添加回答
舉報