网络策略隔离带端口的名称空间和Pod

时间:2020-10-01 09:58:30

标签: kubernetes kubernetes-networkpolicy

kubernetes V19

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

确保新的NetworkPolicy:

不允许访问未在端口80上监听的Pod 不允许来自不在名称空间内部的Pod进行访问

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

5 个答案:

答案 0 :(得分:1)

k8s networkpolicy docs中,您读到:

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

通过具有选择它们的NetworkPolicy可以隔离它们。一旦 命名空间中有任何NetworkPolicy选择特定的容器, 该广告连播会拒绝任何人不允许的任何连接 网络政策。 (名称空间中未被选择的其他Pod 任何NetworkPolicy都会继续接受所有流量。)

网络策略不冲突;它们是添加剂。如果有政策或 策略选择一个广告连播,该广告连播仅限于 这些策略的入口/出口规则的并集。因此, 评价不会影响政策结果

这意味着一旦分配(选择)了具有网络策略的Pod,就不会设置拒绝规则,因为默认情况下所有内容都被拒绝。您只指定允许规则。

下面解释的这一点让我们回到k8s文档中,您可以阅读以下内容:

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

podSelector :这将在与 应被允许作为入口源或出口的NetworkPolicy 目的地。

namespaceSelector :这将选择所有特定的命名空间 应该允许将豆荚作为入口来源或出口目的地。

namespaceSelector podSelector :单个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的名称空间。

因此,是的,只要在要定位的名称空间中部署网络策略,就可以在不向名称空间添加标签的情况下进行操作。而且,只要这是名称空间中唯一的容器,您也可以不向容器添加标签。

答案 1 :(得分:0)

从问题上来说,我并没有……完全困惑。

语句1->在同一名称空间上,窗格可以与端口80通信

声明2->不允许访问未在端口80上监听的Pod

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

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

答案 2 :(得分:0)

以下yaml会帮助您解决问题,它确实为我工作。 重点主要是仅使用入口数组的端口部分。

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

答案 3 :(得分:0)

statement 2 --> 不允许访问不监听端口 80 的 Pod

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

答案 4 :(得分:0)

  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