我已经在默认名称空间中创建了如下所示的网络策略
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
run: nginx1
ingress:
- from:
- podSelector:
matchLabels:
run: "nginx2"
并且在默认名称空间中具有以下pod
master $ k get pod --show-labels
NAME READY STATUS RESTARTS AGE LABELS
nginx1 1/1 Running 0 30m run=nginx1
nginx2 1/1 Running 0 30m run=nginx2
nginx3 1/1 Running 0 30m run=nginx3
当我尝试从其他名称空间访问pod时,我仍然能够访问pod(nginx1)
master $ kubectl run busybox -n mynamespace --rm --labels=run=nginx2 -ti --image=busybox -- /bin/sh
/ # wget --spider --timeout=2 nginx1.default
Connecting to nginx1.default (10.107.249.117:80)
remote file exists
如何限制其他命名空间访问默认命名空间中的pod
答案 0 :(得分:1)
这是预期的行为,因为您没有使用namespaceSelector
在默认名称空间中添加标签key=value
,并在入口使用namespaceSelector
仅允许来自具有该标签的名称空间的流量。
key=value
仅作为示例,您可以使用其他标签。
kubectl label ns default key=value
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
run: nginx1
ingress:
- from:
- namespaceSelector
matchLabels
key: value
- podSelector:
matchLabels:
run: "nginx2"
如何限制其他命名空间访问默认命名空间中的pod
如果您只想限制在命名空间级别,则只需使用namespaceSelector
kubectl label ns default key=value
---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
run: nginx1
ingress:
- from:
- namespaceSelector
matchLabels
key: value
这将阻止流量从任何不带有标签run=nginx1
的命名空间中的任何Pod发送到带有标签key=value
的Pod。
有关更多详细信息,请参阅文档here
答案 1 :(得分:1)
如果您希望AND条件(同时匹配POD和Namespace条件)符合您的要求。您可以使用下面的NetworkPolicy yaml文件和label命令执行此操作(请看一下如何定义namespaceSelector和PodSelector,它在同一数组内定义以将其标记为AND条件)。但是您确定您的网络策略已在默认名称空间中创建吗?
kubectl label ns default name=default
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
run: nginx1
ingress:
- from:
- namespaceSelector:
matchLabels:
name: "default"
podSelector:
matchLabels:
run: "nginx2"
答案 2 :(得分:1)
网络策略文档概述了可以在入口notes(collection)
note_1(doc)
content: 'some words...'
tags: ['apple', 'banana']
tags(collection)
tag_1(doc)
name: 'apple'
tag_2(doc)
name: 'banana'
部分或出口from
部分中指定的四种选择器。
您应该在用例中使用选择器的第三种类型: namespaceSelector和podSelector
to