Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 具有IPVS模式的Kube代理不';我不能保持联系_Kubernetes_Kube Proxy_Ipvs - Fatal编程技术网

Kubernetes 具有IPVS模式的Kube代理不';我不能保持联系

Kubernetes 具有IPVS模式的Kube代理不';我不能保持联系,kubernetes,kube-proxy,ipvs,Kubernetes,Kube Proxy,Ipvs,我有一个具有ipvskube代理模式的k8s集群和一个位于k8s之外的数据库集群 为了访问DB群集,我创建了服务和端点资源: --- apiVersion: v1 kind: Service metadata: name: database spec: type: ClusterIP ports: - protocol: TCP port: 3306 targetPort: 3306 --- apiVersion: v1 kind: Endpoints meta

我有一个具有
ipvs
kube代理模式的k8s集群和一个位于k8s之外的数据库集群

为了访问DB群集,我创建了服务和端点资源:

---
apiVersion: v1
kind: Service
metadata:
  name: database
spec:
  type: ClusterIP
  ports:
  - protocol: TCP
    port: 3306
    targetPort: 3306

---
apiVersion: v1
kind: Endpoints
metadata:
  name: database
subsets:
- addresses:
  - ip: 192.168.255.9
  - ip: 192.168.189.76
  ports:
  - port: 3306
    protocol: TCP
然后,我使用MySQL客户端运行一个pod,并尝试连接到此服务:

mysql -u root -p password -h database
在网络转储中,我看到成功的TCP握手和成功的MySQL连接。在pod正在运行的节点(以下称为工作节点)上,我看到下一个建立的连接:

sudo netstat-nat -n | grep 3306
tcp   10.0.198.178:52642             192.168.189.76:3306            ESTABLISHED
然后,我在打开的MySQL会话中从pod发送一些测试查询。它们都被发送到同一个节点。这是预期的行为

然后,我监视工作节点上已建立的连接。大约5分钟后,与数据库节点建立的连接将丢失

但是在网络转储中,我看到TCP终结数据包没有从工作节点发送到数据库节点。结果,我在数据库节点上得到了一个泄漏的连接


ipvs
如何决定断开已建立的连接?如果
ipvs
断开连接,为什么不能正确完成TCP连接?这是一个bug还是我误解了kube proxy中的
ipvs
模式?

kube proxy和Kubernetes不能帮助平衡持久连接

Kubernetes中长寿命连接的整个概念如所述:

Kubernetes无法平衡长期存在的连接和一些POD 可能会收到比其他人更多的请求。如果您使用的是HTTP/2、gRPC, RSockets、AMQP或任何其他长寿命连接,如数据库 连接时,您可能需要考虑客户端负载平衡。

我建议将整个过程进行一遍,但总的来说可以总结为:

  • Kubernetes服务旨在涵盖web应用程序的最常见用途

  • 但是,一旦您开始使用使用持久TCP连接的应用程序协议,例如数据库、gRPC或 WebSocket,它们会散开

  • Kubernetes不提供任何内置机制来负载平衡长寿命TCP连接

  • 相反,您应该对应用程序进行编码,以便它能够在客户端检索和负载平衡上游


有相关日志吗?谢谢,解释得很清楚。