我试图创造一个如图所示的情况。
kubectl run frontend --image=nginx --labels="app=frontend" --port=30081 --expose
kubectl run backend --image=nginx --labels="app=backend" --port=30082 --expose
kubectl run database --image=nginx --labels="app=database" --port=30082
我创建了网络策略,它应该阻止所有没有特定标签定义的入口和出口访问。
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: access-nginx
spec:
podSelector:
matchLabels:
app: frontend
matchLabels:
app: backend
matchLabels:
app: database
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
matchLabels:
app: backend
matchLabels:
app: database
egress:
- to
- podSelector:
matchLabels:
app: frontend
matchLabels:
app: backend
matchLabels:
app: database
- ports:
- port: 53
protocol: UDP
- port: 53
protocol: TCP
我尝试在没有标签(命令 1)和正确标签(命令 2)的情况下连接到 pod 前端,如下所示。
- kubectl run busybox --image=busybox --rm -it --restart=Never -- wget -O- http://frontend:30081 --timeout 2
- kubectl run busybox --image=busybox --rm -it --restart=Never --labels=app=frontend -- wget -O- http://frontend:30081 --timeout 2
我预计第一个不使用标签的命令将被阻止,第二个命令将允许通信,但在按下第二个命令后我看到输出“wget:无法连接到远程主机(10.109.223.254):连接被拒绝”。我是否错误地定义了网络策略?