我对Calico的网络政策还很陌生。我在群集上创建了以下NetworkPolicy:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: nginxnp-po
namespace: default
spec:
podSelector:
matchLabels:
run: nginxnp
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
acces: frontend
ports:
- port: 80
这就是我的阅读方式:只有具有选择器run=nginxnp
的每个Pod才能从端口80上访问所有具有选择器access=frontend
的Pod。
这是我的Nginx Pod(其中装有正在运行的Nginx):
$ kubectl get pods -l run=nginxnp
NAME READY STATUS RESTARTS AGE
nginxnp-9b49f4b8d-tkz6q 1/1 Running 0 36h
我这样创建了一个busybox容器:
$ kubectl run busybox --image=busybox --restart=Never --labels=access=frontend -- sleep 3600
我可以看到它与选择器access=frontend
相匹配:
$ kubectl get pods -l access=frontend
NAME READY STATUS RESTARTS AGE
busybox 1/1 Running 0 6m30s
但是,当我执行到busybox pod并尝试获取nginx pod时,连接仍然被拒绝。
我还尝试设置出口规则,该规则允许流量反过来运行,但这并没有做任何事情。据我了解,网络策略:如果未设置任何规则,则不会阻塞任何内容。因此,当我未设置出口规则时,不应阻止出口。
如果删除网络策略,它将起作用。任何指针都将受到高度赞赏。
答案 0 :(得分:1)
NetworkPolicy模板中有一个错字acces: frontend
应该是access: frontend
ingress:
- from:
- podSelector:
matchLabels:
acces: frontend