限制命名空间和端口内 Pod 通信的网络策略 您当前的配置问题请求的网络政策

问题描述

命名空间 1:arango

命名空间 2:apache - 8080

要达到的标准:

该策略不应允许不在端口 8080 中侦听的 Pod

该策略不应允许来自除“arango”之外的任何其他命名空间的 pods

以下入口是否有助于实现这一目标?还是必须添加出口,因为有规则可以拒绝除 8080 之外的其他命名空间 pod 和端口?

apiVersion: networking.k8s.io/v1
Metadata:
  name: access-Nginx
spec:
  podSelector:
    matchLabels:
      app: arango
  ingress:
  - from:
    - podSelector:
        matchLabels:
          app: apache
    ports:
    - protocol: TCP
      port: 8080

解决方法

您当前的配置

您当前的配置允许流量从 app: arango 上的 default namespace 中带有标签 port: 8080 的 Pod 从 app: apache 中具有标签 default namespace 的 Pod 传输

它将适用于 default namespace,因为您没有指定它。如果未定义 namespace,Kubernetes 始终使用 default 命名空间。

问题

还是必须添加出口,因为有规则可以拒绝除 8080 之外的其他命名空间 pod 和端口?

这取决于您的要求,如果您想过滤从 Pod 到外部、从外部到 Pod 或两者的流量。 Network Policy Resource 文档中对此进行了很好的描述。

NetworkPolicynamespaced resource,因此它将在创建它的命名空间中运行。如果您想允许另一个 namespaces,您应该使用 namespaceSelector

policyTypes 字段指示给定的政策是否适用于 ingress traffic to selected podegress traffic from selected pods 或两者。如果在 NetworkPolicy 上未指定 policyTypes,则默认情况下将始终设置 Ingress,如果 NetworkPolicy 有任何出口规则,则将设置 Egress。

总而言之,ingress 流量是从外部到您的 Pod,而 egress 是从您的 Pod 到外部。

您想应用两个主要规则:

该策略不应允许不在端口 8080 中侦听的 Pod

如果您只想将其用于入口流量,则如下所示:

  ingress:
  - from:
    ports:
    - protocol: <protocol>
      port: 8080

该策略不应允许来自除“arango”之外的任何其他命名空间的 pods

请记住,NetworkPolicynamespaced resource,因此它可以在创建的 Namespace 中工作。它应该在 metadata.namespace

中指定
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: arango
spec:
...

请求的网络政策

我已在启用网络策略的 GKE 集群上对此进行了测试。

在下面的示例中,只有当传入流量来自标签为 app: arango 的 pod,正在侦听 arango namespace 并且是部署在 app: apache 命名空间中。

port: 8080

有用的链接:

Guide to Kubernetes Ingress Network Policies

Get started with Kubernetes network policy

如果这个答案没有解决您的问题,请澄清/提供更多详细信息它应该如何工作,我将编辑答案。