Kubernetes 中的网络策略

时间:2021-01-24 02:43:11

标签: kubernetes kubernetes-ingress kubernetes-pod kubernetes-networkpolicy

我正在使用 kubernetes 集群将 Nodejs 应用程序与 mongodb 连接起来。我想确保 mongo POD 仅与 Nodejs POD 通信并拒绝任何其他 POD 流量。当我应用默认拒绝策略然后应用允许策略时,应用不起作用。

我提出了以下政策 - 为什么它们不起作用?

默认拒绝策略:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: default-deny
  namespace: default
spec:
  podSelector:
    matchLabels: {}

网络政策:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: access-nodejs
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: nodejs-mongo
  ingress:
    - from:
      - podSelector:
          matchLabels:
            run: mongo

2 个答案:

答案 0 :(得分:0)

拒绝所有策略应如下所示:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress

答案 1 :(得分:0)

我应用了您的政策,并且对我有用。但是,您不必指定拒绝所有策略。一旦您创建了允许 pod 接受来自来自一组特定 pod 的流量的网络策略,它将受到它的限制。这样一来,您的设置就会变得更简单,并且需要更少的故障排除。

因此,在您的情况下,您可以创建允许来自特定 pod 的通信的网络策略。确保您使用正确的标签来选择目标 Pod 和它可以接受流量的 Pod。

请记住,NetworkPolicy 应用于特定的命名空间,并且仅选择该特定 Namespace 中的 Pod。

可应用于接受来自与其选择器匹配的 pod 的流量的示例策略:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: backend-access
spec:
  podSelector:
    matchLabels:
      app: restricted-access #it selects pods that are targeted by this policy
  ingress:
    - from:
      - podSelector:
          matchLabels:
            app: allowed-traffic #selects pods that communicate with pods