Kubernetes 在不同节点之间发送的消息将被剪切

Kubernetes 在不同节点之间发送的消息将被剪切,kubernetes,Kubernetes,我在使用Ubuntu 18.04的虚拟机上运行一个Kubernetes v1.16.0集群,其中包括一个主机和三个节点。安装已经完成使用Kubespray和虚拟图像或多或少是干净的。另外,我必须说,我已经使用Kubernetes多年了,这不是我第一次安装,所以我认为我在安装过程中遵循的过程是正确的,并且假设本身没有问题 我面临的是,即使节点本身彼此通信没有问题,运行在不同节点中的容器也无法正确处理消息传递。这会导致消息在发送某些字节后停止,并且在发送之后从不尝试重新连接。我认为用例子更好地解释了

我在使用Ubuntu 18.04的虚拟机上运行一个Kubernetes v1.16.0集群,其中包括一个主机和三个节点。安装已经完成使用Kubespray和虚拟图像或多或少是干净的。另外,我必须说,我已经使用Kubernetes多年了,这不是我第一次安装,所以我认为我在安装过程中遵循的过程是正确的,并且假设本身没有问题

我面临的是,即使节点本身彼此通信没有问题,运行在不同节点中的容器也无法正确处理消息传递。这会导致消息在发送某些字节后停止,并且在发送之后从不尝试重新连接。我认为用例子更好地解释了这一点

如果我通过HTTP在
node1
(例如,一个Apache2网站)上提供某个服务,并从
node2
将其卷曲,那么我可以毫无问题地获得所有数据。沟通处理得很好。另外,在
node1
内部,我可以在
pod1
pod2
之间复制相同的内容。这意味着我可以将一个pod用作服务器,另一个pod用作客户端,并且消息传递没有问题。但是,当我尝试与
pod1.node1
pod1.node2
通信时,问题出现了

为了理解这一点,我们假设我有两种pod:
服务器pod
客户端pod
。一旦部署,在
node1
中就有一个
server pod
,两个
client pod
,一个在
node1
中,另一个在
node2
中。这样,我将curl GET请求发送到
服务器pod.node1/info
,如果我在
node1
中,我得到的答案类似于
{“name”:“John”,“age”:30,“car”:null}
。另一方面,如果我从
node2
发送了curl请求,我得到的是类似
{“name”:“John”,“age”:30,“c
,它只是在那里被阻塞,就像等待更多的数据。当然,这些JSON更长,不会在第一行剪切。我猜大小与MTU有关

此外,如果我从
客户机pod.node2
查询
服务器pod.node1
,并且响应足够小,那么通信不会出现问题。问题似乎出现在某些特定响应之后,我再次认为这与MTU有关。我尝试使用
主机网络部署网络的所有pod:true标志以缓解此问题,但我必须面对另一个问题,DNS解析。如果我使用主机网络,DNS解析将通过8.8.8.8和
客户端pod完成。node2
无法找到
服务器pod.node1


有人知道为什么会发生这种情况吗?我知道这很难解释,但我希望问题能解释得足够清楚。

请,您能了解更多关于您的基础架构的信息吗?您使用的是哪种虚拟化软件以及您的虚拟机是如何连接的?您使用的是什么CNI?您好,我没有那么多关于虚拟机的信息基础设施问题,因为我们不是托管这些机器,而是将它们租给另一家公司。我们认为问题是他们的,但他们说问题是Kubernetes的,因此我们不能在没有正确定位问题的情况下责怪他们。此外,我们使用的是印花布。我们只是更改了底层网络。我想问题就在那里。请原谅se,发布您的解决方案,以及您是如何做到这一点的,以便其他社区成员将来能够从中受益。@mWatney“解决方案”就在这里,就在上面的消息中。我所做的是使用Ubuntu创建新的虚拟机,并进行Kubernetes的干净安装,而这个问题似乎不再发生。我不知道这是否存在作为对问题的回答,我所做的只是“更改问题”。请问,您是否可以了解有关您的基础架构的更多信息?您使用的是哪种虚拟化软件以及您的虚拟机是如何连接的?您使用的是什么CNI?您好,我没有那么多关于基础架构的信息,因为我们没有托管这些机器但是把它们租给另一家公司。我们认为问题是他们的,但他们说问题出在Kubernetes身上,所以我们不能在没有正确定位问题的情况下责怪他们。此外,我们使用的是印花布。我们刚刚更改了底层网络。我想问题就在那里。请发布您的解决方案,以及您是如何到达那里的社区成员将来可以从中受益。@mWatney“解决方案”就在这里,就在上面的信息中。我所做的是用Ubuntu创建新的虚拟机,并进行Kubernetes的干净安装,这个问题似乎不再发生。我不知道这是否可以作为问题的答案。我所做的只是“改变”问题'。