首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有1个pod处理Kubernetes集群中的所有请求。

只有1个pod处理Kubernetes集群中的所有请求。
EN

Stack Overflow用户
提问于 2019-10-27 15:29:57
回答 3查看 2.9K关注 0票数 3

以下是用于部署和服务的minikube Kubernetes的清单文件:

代码语言:javascript
运行
复制
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服务器

代码语言:javascript
运行
复制
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个荚中只有一个处理所有请求。如何对请求做出其他豆荚响应?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-10-27 17:25:53

您正在使用NodePort公开服务,因此没有反向代理,但直接连接到Pod。这是个很好的选择。(稍后,您可能需要使用一个“进题”)

您所看到的是,只有一个Pod处理您的请求。您期望每个请求都负载均衡到不同的荚。您的假设是正确的,但是负载平衡不是发生在HTTP请求层,而是发生在TCP层。

因此,当您拥有持久的TCP连接并重用它时,您将不会体验到所期望的负载平衡。由于建立TCP连接非常昂贵,所以通常需要进行优化,以避免重复打开新的TCP连接: HTTP保持活动。

默认情况下,在大多数框架和客户端中都启用了“保持活动”,Go也是如此。尝试s.SetKeepAlivesEnabled(false),看看它是否解决了您的问题。(建议只作测试!)

你也可以使用多个不同的客户,f.e。在命令行中使用卷曲或禁用,在邮递员中保持生存。

票数 7
EN

Stack Overflow用户

发布于 2019-10-27 16:17:30

在Kubernetes集群中,发送到k8s服务的请求由库贝代理路由。

由于Kubernetes v1.2,默认的kube-proxy模式是Iptalbles,它允许服务和后端Pods之间更快的数据包解析。后端Pods之间的负载平衡直接通过iptables rules完成。

也许你没有产生一个吊舱无法处理的负载,这就是为什么你被从kube-proxy路由到同一个吊舱的原因。

您还可以看到实现自定义iptalbes-rule的这个问题的答案。

票数 4
EN

Stack Overflow用户

发布于 2020-05-02 12:20:20

感谢托马斯的伟大洞察力!我试着使用请求头,它解决了负载平衡问题,其中所有请求只访问一个副本,而对于演示或测试,能够将请求分发到所有副本是很有用的。

从医生那里:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection连接:保持活动连接:关闭

这个请求总是命中同一个吊舱。

代码语言:javascript
运行
复制
curl -H "Connection: keep-alive" http://your-service:port/path

然而,使用close,请求平衡到所有的豆荚

代码语言:javascript
运行
复制
curl -H "Connection: close" http://your-service:port/path
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58580778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档