限制 pods 在名称空间和端口内的通信的网络策略
Network policy to restrict communication of pods within namespace and port
命名空间 1:arango
命名空间 2:apache - 8080
要达到的标准:
策略不应允许未在端口 8080 上侦听的 pods
策略不应允许 pods 来自除“arango”之外的任何其他命名空间
以下入口是否有助于实现此目的?或者是否必须添加出口,因为有规则拒绝其他命名空间 pods 和 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
您当前的配置
您当前的配置允许流量从 pods 到 pods 的 default namespace
中带有标签 app: arango
的流量 port: 8080
] 在 default namespace
它将应用于 default namespace
,因为您没有指定它。如果未定义 namespace
,Kubernetes 始终使用 default
命名空间。
问题
or is it manadtory to add egress as there are rules to deny other namespace pods and ports except 8080?
这取决于您的要求,如果您想要过滤从您的 pod 到外部、从外部到您的 pod 或两者的流量。 Network Policy Resource 文档中对此进行了很好的描述。
NetworkPolicy
是 namespaced resource
所以它将 运行 在它创建的命名空间中。如果你想允许另一个 namespaces
你应该使用 namespaceSelector
The policyTypes
field indicates whether or not the given policy applies to ingress traffic to selected pod
, egress traffic from selected pods
, or both. If no policyTypes
are specified on a NetworkPolicy then by default Ingress will always be set and Egress will be set if the NetworkPolicy has any egress rules.
总而言之,ingress
流量是从外部到您的 pods,egress
是从您的 pods 到外部。
您想应用两个主要规则:
The policy should not allow pods which are not listening in port 8080
如果您只想将其用于入口流量,它看起来像:
ingress:
- from:
ports:
- protocol: <protocol>
port: 8080
The policy Should not allow pods from any other namespace except "arango"
请记住 NetworkPolicy
是 namespaced resource
因此它将在创建的 Namespace
中工作。应该在 metadata.namespace
中指定
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: network-policy
namespace: arango
spec:
...
请求网络策略
我已经在启用了网络策略的 GKE 集群上对此进行了测试。
在下面的示例中,只有当它们来自带有标签 app: apache
的 pod 时,才允许进入带有 arango namespace
标签 app: arango
的 pods 的传入流量,正在侦听 port: 8080
并部署在 arango
命名空间中。
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
有用链接:
Guide to Kubernetes Ingress Network Policies
Get started with Kubernetes network policy
如果这个答案没有解决您的问题,请clarify/provide详细说明它应该如何工作,我会编辑答案。
命名空间 1:arango
命名空间 2:apache - 8080
要达到的标准:
策略不应允许未在端口 8080 上侦听的 pods
策略不应允许 pods 来自除“arango”之外的任何其他命名空间
以下入口是否有助于实现此目的?或者是否必须添加出口,因为有规则拒绝其他命名空间 pods 和 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
您当前的配置
您当前的配置允许流量从 pods 到 pods 的 default namespace
中带有标签 app: arango
的流量 port: 8080
] 在 default namespace
它将应用于 default namespace
,因为您没有指定它。如果未定义 namespace
,Kubernetes 始终使用 default
命名空间。
问题
or is it manadtory to add egress as there are rules to deny other namespace pods and ports except 8080?
这取决于您的要求,如果您想要过滤从您的 pod 到外部、从外部到您的 pod 或两者的流量。 Network Policy Resource 文档中对此进行了很好的描述。
NetworkPolicy
是 namespaced resource
所以它将 运行 在它创建的命名空间中。如果你想允许另一个 namespaces
你应该使用 namespaceSelector
The
policyTypes
field indicates whether or not the given policy applies toingress traffic to selected pod
,egress traffic from selected pods
, or both. If nopolicyTypes
are specified on a NetworkPolicy then by default Ingress will always be set and Egress will be set if the NetworkPolicy has any egress rules.
总而言之,ingress
流量是从外部到您的 pods,egress
是从您的 pods 到外部。
您想应用两个主要规则:
The policy should not allow pods which are not listening in port 8080
如果您只想将其用于入口流量,它看起来像:
ingress:
- from:
ports:
- protocol: <protocol>
port: 8080
The policy Should not allow pods from any other namespace except "arango"
请记住 NetworkPolicy
是 namespaced resource
因此它将在创建的 Namespace
中工作。应该在 metadata.namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: network-policy
namespace: arango
spec:
...
请求网络策略
我已经在启用了网络策略的 GKE 集群上对此进行了测试。
在下面的示例中,只有当它们来自带有标签 app: apache
的 pod 时,才允许进入带有 arango namespace
标签 app: arango
的 pods 的传入流量,正在侦听 port: 8080
并部署在 arango
命名空间中。
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
有用链接:
Guide to Kubernetes Ingress Network Policies
Get started with Kubernetes network policy
如果这个答案没有解决您的问题,请clarify/provide详细说明它应该如何工作,我会编辑答案。