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

Networking 防止Kubernetes中的命名空间间通信,networking,kubernetes,kubernetes-networkpolicy,Networking,Kubernetes,Kubernetes Networkpolicy,我是Kubernetes网络的新手 我们已将Kubernetes集群划分为一组名称空间(例如名称空间-a,名称空间-b)。每个名称空间都有一组Kubernetes吊舱。每个pod都有一个服务,可在my svc.namespace-x.svc.cluster.local上使用 现在,我们希望防止命名空间namespace-a的pod与命名空间-b中的服务或pod对话,反之亦然。命名空间内的通信应不受限制 这是我在网络策略文档中发现的一个示例: 据我所知,这完全阻止了跨命名空间的所有POD的网络通

我是Kubernetes网络的新手

我们已将Kubernetes集群划分为一组名称空间(例如
名称空间-a
名称空间-b
)。每个名称空间都有一组Kubernetes吊舱。每个pod都有一个服务,可在
my svc.namespace-x.svc.cluster.local
上使用

现在,我们希望防止命名空间
namespace-a
的pod与
命名空间-b
中的服务或pod对话,反之亦然。命名空间内的通信应不受限制

这是我在网络策略文档中发现的一个示例:

据我所知,这完全阻止了跨命名空间的所有POD的网络通信

  • 如何允许所有网络流量,但仅允许在特定命名空间内进行
  • 我需要一个网络插件,如印花布,法兰绒或编织?我应该选择哪一个
我需要一个网络插件,如印花布,法兰绒或编织

无论您需要什么样的网络插件,但并非所有插件都支持
NetworkPolicy
API对象。根据,下面是一个(可能不是详尽的)支持
网络策略的插件列表:

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

我应该选择哪一个

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

如何允许所有网络流量,但仅允许在特定名称空间内

根据您的示例设置,我认为以下
NetworkPolicy
资源可以满足您的需要:

对于
namespace-a
中的pod,只允许从
namspace-a
pod进入,拒绝从任何其他源进入。出口不受限制:

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
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
对于
namespace-b
中的pod,只允许从
namspace-b
pod进入,拒绝从任何其他源进入。出口不受限制:

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
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-a
name:namespace-b
标签,类似于:

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

我指出这一点只是为了避免让您感到困惑,因为我上面显示的标签恰好与您假设的名称空间名称匹配。标签可以是任意的,并且可能包含多个名称空间——例如,您可能有
namespace-a
namespace-c
,这两个标签都名为
other:labelname
,允许您在
网络策略中使用单个
名称空间选择器选择多个名称空间参考资料。

您可以在此处找到许多网络策略示例: