Kubernetes 限制命名空间和端口内POD通信的网络策略
名称空间1:arango 名称空间2:apache-8080 实现的标准: 策略不应允许未在端口8080中侦听的POD 策略不应允许来自除“arango”以外的任何其他命名空间的POD 以下入口是否有助于实现这一点?或者添加出口是出于管理考虑,因为有规则拒绝8080以外的其他名称空间吊舱和端口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:
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:apacheapp: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
有用的链接:
如果此答案不能解决您的问题,请澄清/提供更多详细信息,我将编辑答案