命名空间 1:arango
命名空间 2:apache - 8080
要达到的标准:
该策略不应允许不在端口 8080 中侦听的 Pod
该策略不应允许来自除“arango”之外的任何其他命名空间的 pods
以下入口是否有助于实现这一目标?还是必须添加出口,因为有规则可以拒绝除 8080 之外的其他命名空间 pod 和端口?
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
答案 0 :(得分:1)
您当前的配置允许流量从 app: arango
上的 default namespace
中带有标签 port: 8080
的 Pod 从 app: apache
中具有标签 default namespace
的 Pod 传输
它将适用于 default namespace
,因为您没有指定它。如果未定义 namespace
,Kubernetes 始终使用 default
命名空间。
还是必须添加出口,因为有规则可以拒绝除 8080 之外的其他命名空间 pod 和端口?
这取决于您的要求,如果您想过滤从 Pod 到外部、从外部到 Pod 或两者的流量。 Network Policy Resource 文档中对此进行了很好的描述。
NetworkPolicy
是 namespaced resource
,因此它将在创建它的命名空间中运行。如果您想允许另一个 namespaces
,您应该使用 namespaceSelector
policyTypes
字段指示给定的政策是否适用于 ingress traffic to selected pod
、egress traffic from selected pods
或两者。如果在 NetworkPolicy 上未指定 policyTypes
,则默认情况下将始终设置 Ingress,如果 NetworkPolicy 有任何出口规则,则将设置 Egress。
总而言之,ingress
流量是从外部到您的 Pod,而 egress
是从您的 Pod 到外部。
您想应用两个主要规则:
<块引用>该策略不应允许不在端口 8080 中侦听的 Pod
如果您只想将其用于入口流量,则如下所示:
ingress:
- from:
ports:
- protocol: <protocol>
port: 8080
<块引用>
该策略不应允许来自除“arango”之外的任何其他命名空间的 pods
请记住,NetworkPolicy
是 namespaced resource
,因此它可以在创建的 Namespace
中工作。它应该在 metadata.namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: network-policy
namespace: arango
spec:
...
我已在启用网络策略的 GKE 集群上对此进行了测试。
在下面的示例中,只有当传入流量来自标签为 app: arango
的 pod,正在侦听 arango namespace
并且是部署在 app: apache
命名空间中。
port: 8080
有用的链接:
Guide to Kubernetes Ingress Network Policies
Get started with Kubernetes network policy
如果这个答案没有解决您的问题,请澄清/提供更多详细信息它应该如何工作,我将编辑答案。