你当前的配置
您当前的配置是允许流量从 default namespace 中标签为 app: apache 的 pod 到 default namespace 上 port: 8080 中标签为 app: arango 的 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”之外的任何其他命名空间的 pod
请记住NetworkPolicy 是namespaced resource,因此它将在创建的Namespace 中工作。应该在metadata.namespace中指定
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: network-policy
namespace: arango
spec:
...
请求的网络策略
我已在启用网络策略的 GKE 集群上对此进行了测试。
在下面的示例中,只有当它们来自标签为 app: apache 的 pod、正在侦听 port: 8080 并部署在 arango 命名空间中时,才允许传入 arango namespace 中标签为 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
有用的链接:
Guide to Kubernetes Ingress Network Policies
Get started with Kubernetes network policy
如果此答案没有解决您的问题,请澄清/提供更多详细信息它应该如何工作,我将编辑答案。