以下是用于部署和服务的minikube Kubernetes的清单文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-deployment
spec:
selector:
matchLabels:
app: hello
replicas: 3
template:
metadata:
labels:
app: hello
spec:
containers:
- name: hello
image: hello_hello
imagePullPolicy: Never
ports:
- containerPort: 4001
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: hello
spec:
selector:
app: hello
ports:
- port: 4001
nodePort: 30036
protocol: TCP
type: NodePort和一个用Golang语言编写的简单HTTP服务器
package main
import (
http "net/http"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
server := &http.Server{
Addr: ":4001",
Handler: r,
}
server.ListenAndServe()
}当我向IP:30036/ping发出几个请求,然后打开pod的日志时,我可以看到,每3个荚中只有一个处理所有请求。如何对请求做出其他豆荚响应?
发布于 2019-10-27 17:25:53
您正在使用NodePort公开服务,因此没有反向代理,但直接连接到Pod。这是个很好的选择。(稍后,您可能需要使用一个“进题”)
您所看到的是,只有一个Pod处理您的请求。您期望每个请求都负载均衡到不同的荚。您的假设是正确的,但是负载平衡不是发生在HTTP请求层,而是发生在TCP层。
因此,当您拥有持久的TCP连接并重用它时,您将不会体验到所期望的负载平衡。由于建立TCP连接非常昂贵,所以通常需要进行优化,以避免重复打开新的TCP连接: HTTP保持活动。
默认情况下,在大多数框架和客户端中都启用了“保持活动”,Go也是如此。尝试s.SetKeepAlivesEnabled(false),看看它是否解决了您的问题。(建议只作测试!)
你也可以使用多个不同的客户,f.e。在命令行中使用卷曲或禁用,在邮递员中保持生存。
https://stackoverflow.com/questions/58580778
复制相似问题