对于每个部署(命名空间 = firstspace),我有 3 个 Kubernetes 部署和服务。 每个部署按顺序标记为 app1、app2、app3。
例如,如果我运行以下命令。结果我会得到第一个豆荚。
kubectl get pods -l app=app1 --namespace firstspace
我的目标是使用以下网络策略限制第三个 Pod (app=app3) 的 Ingress 访问,仅允许来自第二个 Pod (app=app2) 和来自另一个名为“secondspace”的命名空间的任何 Pod 的流量。>
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: ingress-app3
namespace: firstspace
spec:
podSelector:
matchLabels:
app: app3
ingress:
- from:
- namespaceSelector:
matchLabels:
name: secondspace
- podSelector:
matchExpressions:
- {key: app, operator: In, values: [app2]}
policyTypes:
- Ingress
但是,当我将网络策略部署到“firstspace”命名空间时,我仍然可以使用第一个 Pod (app=app1) 卷曲(并获得示例 JSON 响应)第三个 Pod (app=app3) 的服务.
以下是示例命令。这里,10.100.150.0 是为第三个 pod 创建的服务的 ClusterIP。
kubectl exec app1-849b94c6df-rzdls --namespace firstspace-- curl -sL 10.100.150.0:8080/testendpoint
有人可以帮助我理解我在这里做错了什么吗?
答案 0 :(得分:1)
经过反复试验,我观察到以下情况。 根据 Kubernetes 网络策略 documentation,部署的网络策略仅在 Kubernetes 集群中安装了 network plugin 时才有效。
由于我的本地 minikube 集群没有 network plugin,我在问题描述中提到的网络策略无效。
在我的 Cillium Network Plugin 集群中安装 minikube 之后,网络策略按预期工作。
注意事项:
docker
作为驱动程序时,hyperv
作为驱动程序时工作。apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: egress-app2
namespace: firstspace
spec:
podSelector:
matchLabels:
app: app2
egress:
- to:
- podSelector:
matchLabels:
app: app3
policyTypes:
- Egress