Kubernetes在外部与特定端口交谈

Kubernetes在外部与特定端口交谈,kubernetes,Kubernetes,在名称空间中有一个pod,我可以在外部进行某些连接,但有些连接似乎被阻塞了。我已经测试过,由于限制,我无法在我的命名空间内运行Wireshark和tcpdump。所以我在目的地上设置了一些测试 Here is a sample of tests nc -v -z -w 2 machinename 445 works like a champ. nc -v -z -w 2 machinename 80 works like a champ nc -v -z -w 2 machinename 808

在名称空间中有一个pod,我可以在外部进行某些连接,但有些连接似乎被阻塞了。我已经测试过,由于限制,我无法在我的命名空间内运行Wireshark和tcpdump。所以我在目的地上设置了一些测试

Here is a sample of tests
nc -v -z -w 2 machinename 445
works like a champ.
nc -v -z -w 2 machinename 80
works like a champ
nc -v -z -w 2 machinename 8080 works
nc -v -z -w 2 machine 5985 - fails with a timeout
在Kubernetes外面的一台裸机上 nc-v-z-w 2机床名称5985-工厂

所以我看着我的出口

apiVersion: extensions/v1beta1
kind: NetworkPolicy
metadata:
  name: allow-all
spec:
  podSelector: {}
  egress:
  - {}
  policyTypes:
  - Egress
当我在目标机器名上执行netmon时。我认为工作电话很好。这个端口只是一个例子,因为有一个python服务调用5985。我还有一些其他端口,但我选择了一个已知的端口(winerm)。我从来没见过netmon的电话。我的信念是,它从pod中被完全阻止,并且永远不会逃出名称空间

我可以排除路由,因为其他端口可以工作。我可以排除出口,因为它是敞开的。因为我可以可靠地说,TCP流量被排除在UDP问题之外

我不知道的是为什么只有特定的端口被TCP流量阻塞。我有另外两个端口与另一个应用程序处于相同状态

所以不是所有的端口,只是一些。我看不出有什么道理


如果有人对要查看的内容有任何想法,请让我知道,因为我已经搜索了很多次,而且到目前为止,我在ingress解决方案中找到的所有内容都是公开端口,而不是一个在呼叫有问题的pod中的服务。

如果您群集使用calico cni,请验证是否存在优先级更高(低顺序)的GlobalNetworkPolicys()创建了一个限制这些特定端口的端口。

答案是这些端口上的路由器规则。我做了一个反向tcpdump并捕获了到达目的地的轨迹。管理员们在名称空间中放置了一个可访问网络根的pod,我能够捕获出站流量。使用wireshark,我能够识别路由器中阻止这些端口通过的规则。

您是否使用自己的本地kubernetes安装?什么版本?
kubectl get NetworkPolicys
是否显示可能影响它的任何其他网络策略?这是公司安装的1.14.7。命名空间中的网络策略我看不到任何影响它的内容。我有上面的allow-all。命名空间的端口53的入口和出口流量都有默认拒绝。还有普罗米修斯和格拉法纳。但没有限制该端口或该类型的流量。您是否100%确定在您的节点上没有应用可能导致问题的特定防火墙规则?我们使用canal,并且没有GlobalNetworkPolicys。