Kubernetes入口网络策略按预期工作,出口阻塞所有流量

Kubernetes入口网络策略按预期工作,出口阻塞所有流量,kubernetes,amazon-eks,calico,kubernetes-networkpolicy,Kubernetes,Amazon Eks,Calico,Kubernetes Networkpolicy,我已经在EKS上安装了印花布 我有两个名称空间,foo和bar,都标有“purpose”标签,每个名称空间都包含一个apppod 当我将以下仅入口策略导入foo名称空间时,它完全按照预期工作;其他测试吊舱无法连接到foo应用程序,但bar应用程序可以 --- apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: foo namespace: foo spec: podSelector: mat

我已经在EKS上安装了印花布

我有两个名称空间,foo和bar,都标有“purpose”标签,每个名称空间都包含一个apppod

当我将以下仅入口策略导入foo名称空间时,它完全按照预期工作;其他测试吊舱无法连接到foo应用程序,但bar应用程序可以

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: foo
  namespace: foo
spec:
  podSelector:
    matchLabels:
      app: foo-app
  policyTypes:
  - Ingress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
但是,当我导入一个包含入口和出口规则的策略时,它会完全关闭到pod的网络。我甚至无法从酒吧应用程序ping foo应用程序pod IP

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: foo
  namespace: foo
spec:
  podSelector:
    matchLabels:
      app: foo-app
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - from:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53
在删除并系统性地重新添加部分策略后,肯定是在出口中添加了
namespaceSelector
条目破坏了该策略

群集上没有其他网络策略


如果没有直接明显的原因说明发生这种情况的原因;除了遍历工作节点上的netfilter规则之外:是否有任何有效的方法来调试此操作?

您的上一个网络策略同时处理出入口。我会在两个不同的yaml文件中分割出入口和出入口(如果有几个不同的入口/出入口策略,我也会将它们分割到不同的文件中),并逐一应用它们。这样更容易阅读。另外,如果您使用拒绝规则,我会先应用它,然后再应用其他规则。

我认为您写得不对

我认为你应该改变

  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53

这是因为您可能正在阻止用于将服务名称解析为其IP地址的DNS。你可以读一本非常好的书

如果这仍然是一个问题,请提供有关POD在哪里运行的详细信息、标签以及您想要实现的规则


您还可以在GitHub上查看一些很好的入口和出口示例,并且。

您的yaml是错误的。为什么要打开
0.0.0.0/0
?这与不创建
网络策略
相同。我不知道为什么有时它会阻塞,因为它不应该。
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          purpose: bar
  - to:
    ports:
    - protocol: TCP
      port: 53
    - protocol: UDP
      port: 53