Kubernetes 限制命名空间和端口内POD通信的网络策略

Kubernetes 限制命名空间和端口内POD通信的网络策略,kubernetes,kubernetes-networkpolicy,Kubernetes,Kubernetes Networkpolicy,名称空间1:arango 名称空间2:apache-8080 实现的标准: 策略不应允许未在端口8080中侦听的POD 策略不应允许来自除“arango”以外的任何其他命名空间的POD 以下入口是否有助于实现这一点?或者添加出口是出于管理考虑,因为有规则拒绝8080以外的其他名称空间吊舱和端口 apiVersion: networking.k8s.io/v1 metadata: name: access-nginx spec: podSelector: matchLabels:

名称空间1:arango

名称空间2:apache-8080

实现的标准:

策略不应允许未在端口8080中侦听的POD

策略不应允许来自除“arango”以外的任何其他命名空间的POD

以下入口是否有助于实现这一点?或者添加出口是出于管理考虑,因为有规则拒绝8080以外的其他名称空间吊舱和端口

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
您当前的配置 您当前的配置允许流量从
默认名称空间
端口:8080
上的
默认名称空间
中标签为
app:arango
的POD到
默认名称空间
中标签为
app:apache
的POD

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: network-policy
  namespace: arango
spec:
...
它将应用于
默认命名空间
,因为您没有指定它。如果未定义
命名空间
,则Kubernetes始终使用
默认
命名空间

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
问题 或者添加出口是出于管理考虑,因为有规则拒绝8080以外的其他名称空间吊舱和端口

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
这取决于你的要求,如果你想过滤从你的吊舱到外面,从外面到你的吊舱或两者的流量。它在文档中有很好的描述

NetworkPolicy
命名空间资源
,因此它将在创建它的命名空间中运行。如果要允许另一个
名称空间
,则应使用
名称空间选择器

policyTypes
字段指示给定策略是否应用于所选pod的
入口流量
所选pod的出口流量
,或两者。如果NetworkPolicy上未指定
策略类型
,则默认情况下,将始终设置入口,如果NetworkPolicy具有任何出口规则,则将设置出口

总之,
入口
流量是从外面到你的吊舱,
出口
是从你的吊舱到外面

您需要应用两个主要规则:

策略不应允许未在端口8080中侦听的POD

如果您只想将其用于入口流量,则它将如下所示:

  ingress:
  - from:
    ports:
    - protocol: <protocol>
      port: 8080
请求的网络策略 我已经在启用了网络策略的GKE集群上对此进行了测试

在下面的示例中,只有来自标签为app:apache
app:apache
的pod、监听端口为8080
且部署在
arango
命名空间中的pod,才允许向
arango
中标签为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
有用的链接:

如果此答案不能解决您的问题,请澄清/提供更多详细信息,我将编辑答案