【问题标题】:networkpolicy to isolate namespace and pod with port使用端口隔离命名空间和 pod 的网络策略
【发布时间】:2021-01-17 00:55:58
【问题描述】:

kubernetes V19

创建一个名为 allow-port-from-namespace 的新 NetworkPolicy,允许内部现有命名空间中的 Pod 连接到同一命名空间中其他 Pod 的 80 端口。

确保新的 NetworkPolicy:

不允许访问未侦听端口 80 的 Pod 不允许来自不在命名空间内部的 Pod 访问

我需要知道我是否可以在不向 namspace 和 pod 添加标签的情况下做到这一点?

【问题讨论】:

    标签: kubernetes kubernetes-networkpolicy


    【解决方案1】:

    k8s networkpolicy docs 你读到:

    默认情况下,Pod 是非隔离的;他们接受来自任何 来源。

    Pod 通过选择它们的 NetworkPolicy 被隔离。一次 在选择特定 pod 的命名空间中有任何 NetworkPolicy, 该 pod 将拒绝任何不允许的任何连接 网络策略。 (命名空间中未被选中的其他 pod 任何 NetworkPolicy 都将继续接受所有流量。)

    网络政策不冲突;它们是添加剂。如果有任何政策或 策略选择一个 pod,该 pod 被限制在允许的范围内 这些策略的入口/出口规则的联合。因此,顺序 评估不影响政策结果

    这意味着一旦您使用网络策略分配(选择)一个 pod,您就永远不会设置拒绝规则,因为默认情况下每一个都被拒绝。您只指定允许规则。

    这个beeing解释让我们回到k8s docs,你可以阅读以下内容:

    在入口中可以指定四种选择器 从节或出口到节:

    podSelector:这会选择与 应允许作为入口源或出口的 NetworkPolicy 目的地。

    namespaceSelector:选择特定的命名空间 应允许 Pod 作为入口源或出口目的地。

    namespaceSelectorpodSelector:单个 to/from 条目 同时指定 namespaceSelector 和 podSelector 选择特定的 特定命名空间中的 Pod [...]

    我不会在这里粘贴所有文档,请检查其余的 here


    现在回答你的问题:"I need to know if i can do it without adding a labels to namspace and pod or not ?"

    您在上面提到的文档中应该注意的是,您只能使用标签来定位命名空间和 pod。

    并且当你不使用命名空间标签选择器时,选择器默认为部署 networkpolicy 的命名空间。

    所以,是的,只要您在要定位的命名空间中部署网络策略,您就可以在不向命名空间添加标签的情况下执行此操作。并且你也可以在不给 pod 添加标签的情况下做到这一点,只要这是命名空间中唯一的 pod。

    【讨论】:

      【解决方案2】:
      1. 您需要先标记命名空间

      例如 kubectl label ns namespace-name env: testing

      2.

      apiVersion: networking.k8s.io/v1
      kind: NetworkPolicy
      metadata:
        name: allow-port-from-namespace
        namespace: staging
      spec:
        podSelector: {} 
        policyTypes:
        - Ingress
        ingress:
        - from:
          - namespaceSelector:
              matchLabels:
                env: staging
          ports:
          - protocol: TCP
            port: 80
      

      【讨论】:

        【解决方案3】:

        从这个问题来看,我并没有……完全糊涂。

        statement 1 --> 在同一个命名空间上,pod 可以与端口 80 通信

        语句 2 --> 不允许访问不在端口 80 上侦听的 Pod

        那么,有人可以在这里澄清一下吗?

        他们到底在问什么?我们是否需要提供对 pod 的 80 访问权限?

        【讨论】:

          【解决方案4】:

          以下 yaml 将帮助您解决问题,它确实对我有用。 重点主要是只使用 ingress 数组的端口部分。

          apiVersion: networking.k8s.io/v1
          kind: NetworkPolicy
          metadata:
            name: network-policy
          spec:
            podSelector: {}   #selects all the pods in the namespace deployed
            policyTypes:
            - Ingress
            ingress:
            - ports:          #in input traffic allowed only through 80 port only
              - protocol: TCP
                port: 80
          

          【讨论】:

            【解决方案5】:

            语句 2 --> 不允许访问不在端口 80 上侦听的 Pod

            当 pod 不监听服务器的 TCP 状态时如何禁止 .. 您也可以让 pod 不在同一命名空间的 80 端口上监听。我不认为这在你上面的 yaml 中解决了。

            【讨论】:

              猜你喜欢
              • 2021-07-16
              • 2021-04-10
              • 1970-01-01
              • 2021-03-25
              • 2021-02-09
              • 2021-07-15
              • 1970-01-01
              • 2021-10-16
              • 2020-12-10
              相关资源
              最近更新 更多