【问题标题】:Network policy to restrict communication of pods within namespace and port限制命名空间和端口内 pod 通信的网络策略
【发布时间】:2021-04-10 23:27:14
【问题描述】:

命名空间 1:arango

命名空间 2:apache - 8080

要达到的标准:

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

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

以下入口是否有助于实现这一目标?还是强制添加出口,因为有规则拒绝除 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

【问题讨论】:

    标签: kubernetes kubernetes-networkpolicy


    【解决方案1】:

    你当前的配置

    您当前的配置是允许流量从 default namespace 中标签为 app: apache 的 pod 到 default namespaceport: 8080 中标签为 app: arango 的 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”之外的任何其他命名空间的 pod

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

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

    请求的网络策略

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

    在下面的示例中,只有当它们来自标签为 app: apache 的 pod、正在侦听 port: 8080 并部署在 arango 命名空间中时,才允许传入 arango namespace 中标签为 app: arango 的 pod。

    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: access-nginx
      namespace: arango
    spec:
      podSelector:
        matchLabels:
          app: arango
      ingress:
      - from:
        - podSelector:
            matchLabels:
              app: apache
        ports:
        - protocol: TCP
          port: 8080
    

    有用的链接:

    Guide to Kubernetes Ingress Network Policies

    Get started with Kubernetes network policy

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

    【讨论】:

      猜你喜欢
      • 2021-01-17
      • 2021-10-16
      • 1970-01-01
      • 2020-10-30
      • 2021-02-09
      • 1970-01-01
      • 2021-07-16
      • 2021-03-25
      • 2020-11-23
      相关资源
      最近更新 更多