防止Kubernetes中的命名空间间通信

时间:2018-02-20 21:51:19

标签: networking kubernetes kubernetes-networkpolicy

我是Kubernetes网络的新手。

我们已将Kubernetes群集分成一组命名空间(例如namespace-anamespace-b)。每个命名空间都有一组Kubernetes pod。每个广告连播都有my-svc.namespace-x.svc.cluster.local提供的服务。

现在,我们希望阻止命名空间namespace-a的广告连接与namespace-b反之亦然的服务或广告连接进行通信。名称空间内的通信不受限制。

这是我在网络政策文档中作为示例找到的: https://kubernetes.io/docs/concepts/services-networking/network-policies/#the-networkpolicy-resource

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

据我所知,这可以完全阻止网络通信,对于命名空间中的所有pod。

  • 如何允许所有网络流量,但只允许 特定命名空间?
  • 我是否需要网络插件,如Calico,Flannel或Weave?我应该选择哪一个?

1 个答案:

答案 0 :(得分:5)

  

我是否需要网络插件,如Calico,Flannel或Weave?

无论您需要什么网络插件,但并非所有插件都支持NetworkPolicy API对象。根据{{​​3}},以下是支持NetworkPolicy的插件列表(可能并非详尽无遗):

如果没有支持NetworkPolicy的插件,创建资源将无效。

  

我应该选择哪一个?

至于你应该选择哪一个,stackoverflow不是征求这种建议的地方。我可以推荐的是阅读可用的各种选项的概述/功能文档。也许在本地开发群集中尝试一两个不同的插件,以了解它们的安装,维护和更新有多么困难或容易。

  

如何允许所有网络流量,但仅限于特定命名空间?

鉴于您的示例设置,我认为以下NetworkPolicy资源可满足您的需求:

对于namespace-a中的广告连播,只允许从namspace-a广告单元进入,拒绝来自任何其他来源的广告。出口不受限制:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: namespace-a
spec:
  policyTypes:
  - Ingress
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: namespace-a

对于namespace-b中的广告连播,只允许从namspace-b广告单元进入,拒绝来自任何其他来源的广告。出口不受限制:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: test-network-policy
  namespace: namespace-b
spec:
  policyTypes:
  - Ingress
  podSelector: {}
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          name: namespace-b

请注意,这假设您在命名空间中设置了name: namespace-aname: namespace-b标签,类似于:

apiVersion: v1
kind: Namespace
metadata:
  name: namespace-a
  labels:
    name: namespace-a
    other: labelname

我只是指出这一点,以避免让您感到困惑,因为上面显示的标签恰好与您假设的命名空间名称相匹配。标签可以是任意的,并且可能包含多个名称空间 - 例如,您可能namespace-anamespace-c都带有一个名为other: labelname的标签,允许您使用单个标签选择多个名称空间namespaceSelector资源中的NetworkPolicy