4

我正在尝试将命名空间中的 pod 与其他命名空间隔离开来。我试图创建一个 NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-from-other-namespaces
spec:
  podSelector:
    matchLabels:
  ingress:
  - from:
    - podSelector: {}

此 NetworkPolicy 成功地将我的命名空间中的 pod 与另一个命名空间隔离开来。但是,一旦应用此策略,就会禁用到这些 pod 的所有外部流量。是否有任何方法仅阻止来自其他命名空间的流量并允许所有外部流量到 Pod。

4

4 回答 4

1

您应用的 NetworkPolicy 正在阻止来自每个来源的流量。

您可以在定义中添加授权的 CIDR 块:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: example-policy
  namespace: default
spec:
  podSelector:
    matchLabels:
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 172.17.0.0/16
于 2020-07-05T20:47:05.207 回答
1

使用 kubernetes networkPolicy 我不相信在允许所有外部流量的同时拒绝 Pod 之间的通信是可能的。这是因为 kubernetes networkPolicy 资源没有显式拒绝规则的概念。我会调整您的方法或考虑另一个具有拒绝规则的网络策略(例如Calico)。

解决方案:

apiVersion: projectcalico.org/v3
kind: NetworkPolicy
metadata:
  name: deny-other-namespaces
  namespace: prod
spec:
  selector: all()
  types:
  - Ingress
  - Egress
  ingress:
  - action: Deny
    protocol: TCP
    source:
      namespaceSelector: name == 'dev'
  - action: Allow
  egress:
  - action: Allow
于 2020-07-05T21:01:31.700 回答
1

您可以确保为NetworkPolicy资源命名空间并将入口/出口限制为仅命名空间。

apiVersion: extensions/v1beta1
kind: NetworkPolicy
metadata:
  name: onlywithinnamespace
  namespace: mynamespace
spec:
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          role: mynamespace
    - podSelector: {}
  egress:
  - to:
    - namespaceSelector:
        matchLabels:
          role: mynamespace
    - podSelector: {}
  podSelector:
    matchLabels:
  policyTypes:
  - Ingress
  - Egress

确保您的命名空间有正确的标签来匹配:

apiVersion: v1
kind: Namespace
metadata:
  labels:
    role: mynamespace
  name: mynamespace
于 2020-07-05T21:38:51.247 回答
0

您可以允许所有流量,但阻止来自内部网络的流量。

下面的网络策略允许访问除内部网络之外的所有网络(192.168.0.0/16 和 172.23.40.0/24)

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
   name: allow-external
   namespace: dmz
spec:
  podSelector: {}
  policyTypes:
  - Egress
  - Ingress
  egress:
  - to:
    - ipBlock:
        cidr: 0.0.0.0/0
        except:
        - 192.168.0.0/16
        - 172.23.42.0/24
    - namespaceSelector:
         matchLabels:
           name: dmz
于 2021-07-20T11:05:08.783 回答