Kubernetes K8s做了一些奇怪的网络工作,破坏了应用程序设计

Kubernetes K8s做了一些奇怪的网络工作,破坏了应用程序设计,kubernetes,iptables,connection-refused,Kubernetes,Iptables,Connection Refused,我发现K8s网络有一个奇怪的行为,它会完全破坏一些应用程序的设计 我有两个吊舱和一个服务舱 Pod 1是一个愚蠢的反向代理(我不知道实现) POD2是一个Web服务器 上述服务属于POD2,即Web服务器 在堆栈的初始启动之后,我发现pod1(反向代理)在第一次尝试时由于某种原因无法到达Web服务器,ping工作正常,curl也正常。 现在,我在Pod 1-反向代理中尝试了wget mywebserver,得到了以下结果: wget mywebserver --2020-11-16 20:

我发现K8s网络有一个奇怪的行为,它会完全破坏一些应用程序的设计

我有两个吊舱和一个服务舱

  • Pod 1是一个愚蠢的反向代理(我不知道实现)
  • POD2是一个Web服务器
  • 上述服务属于POD2,即Web服务器
在堆栈的初始启动之后,我发现pod1(反向代理)在第一次尝试时由于某种原因无法到达Web服务器,ping工作正常,curl也正常。 现在,我在Pod 1-反向代理中尝试了wget mywebserver,得到了以下结果:

 wget mywebserver
--2020-11-16 20:07:37--  http://mywebserver/
Resolving mywebserver (mywebserver)... 10.244.0.34, 10.244.0.152, 10.244.1.125, ...
Connecting to mywebserver (mywebserver)|10.244.0.34|:80... failed: Connection refused.
Connecting to mywebserver (mywebserver)|10.244.0.152|:80... failed: Connection refused.
Connecting to mywebserver (mywebserver)|10.244.1.125|:80... failed: Connection refused.
Connecting to mywebserver (mywebserver)|10.244.2.177|:80... connected.
其中10.244.2.177是Web服务器的Pod IP。 对我来说,问题似乎是反向代理不会尝试触发转发包的尝试两次,相反,它只会在失败的地方尝试一次,就像上面的wget cmd一样,请求会被丢弃,因为由于奇怪的K8s IPtables之类的东西,无法访问被备份的包

如果我将反向代理配置为不使用服务DNS名称进行加载,而是使用Pod IP(10.244.2.177),则一切正常,并符合预期

我已经尝试过各种CNI供应商,如:法兰绒、印花布、运河、编织和纤毛,因为Kube代理不用于纤毛,但所有这些供应商都失败了,所有这些供应商都进行了奇特的布线,没有人能清楚地理解。所以我的问题是,我如何才能使K8s路由立即在这一点上工作?我已经将我的整个堆栈重新实现给docker swarm,只是为了看看它是否有效,而且它确实完美无瑕!所以这个问题似乎与K8s路由方案有关

为了排除我这边的错误配置,我还尝试了不同的即用K8s解决方案,如Digital Ocean的托管K8s和/或自托管RKE。所有人都有相同的行为

是否有人知道问题可能是什么,以及如何修复K8s的这种行为

如果我知道wget请求时实际发生了什么,我可能会非常有用,因为这对我来说仍然是个谜


非常感谢

事实证明,我在K8s部署时有几个配置错误。 我首先删除了clustrip:None,因为这会导致wget在我的问题中显示的行为。此外,我在部署时设置了app:和tier:错误。不管怎样,现在一切都很好,wget有一个正确的连接


再次感谢

那么,哪些IP没有响应
10.244.0.34、10.244.0.152、10.244.1.125
?这是个问题,我根本不知道!但至少它们都是Pod的CIDR范围K8sshow
kubectl description
的一部分,用于您连接到的服务。wget尝试连接到的IP似乎来自该服务,kubectl的输出是:Endpoints:10.244.0.34:80,10.244.0.152:10.244.1.125:80…我已经尝试给服务一个静态ClusterIP,但没有成功解决这个路由问题。请遵循本教程。这是一个很好的示例,说明如何使用k8s服务连接前端和后端。正如k8s观点的评论所述,应该对其进行更多的调查,但根据提供的示例,很难找出问题所在(幕后)。