kubernetes - 入口网络策略未按预期工作
kubernetes - Ingress network policy not working as excpected
我有 3 个 Kubernetes 部署和每个部署的服务(命名空间 = firstspace)。
每个部署按顺序标记为 app1、app2、app3。
举个例子,如果我运行下面的命令。我会得到第一个 pod 作为结果。
kubectl get pods -l app=app1 --namespace firstspace
我的目标是使用以下网络策略限制第三个 pod (app=app3) 的入口访问,仅允许来自第二个 pod (app=app2) 的流量和来自另一个命名空间的任何 pods “第二空间”。
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”命名空间时,我仍然可以使用第一个来卷曲(并获得示例 JSON 响应)第三个 pod (app=app3) 的服务pod (app=app1).
以下是示例命令。这里10.100.150.0是为第三个pod创建的服务的ClusterIP。
kubectl exec app1-849b94c6df-rzdls --namespace firstspace-- curl -sL 10.100.150.0:8080/testendpoint
谁能帮我理解我做错了什么?
经过反复试验,我观察到以下情况。
根据 Kubernetes 网络策略 documentation, Deployed Network Policies will be only effective if a network plugin 安装在 Kubernetes 集群中。
由于我的本地 minikube cluster did not have a network plugin 我在问题描述中提到的网络策略无效。
安装 Cillium Network Plugin in my minikube 集群后,网络策略按预期运行。
备注:
- Cillium Network Plugin installation was not successful on minikube 当使用
docker
作为驱动程序时。 But it worked when selected hyperv
as the driver.
- 我还必须为带有 app=app2 标签的 pod 创建出口策略,以允许来自带有 app=app3 标签的 pod 的出口流量(参见下面的示例)。
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
我有 3 个 Kubernetes 部署和每个部署的服务(命名空间 = firstspace)。 每个部署按顺序标记为 app1、app2、app3。
举个例子,如果我运行下面的命令。我会得到第一个 pod 作为结果。
kubectl get pods -l app=app1 --namespace firstspace
我的目标是使用以下网络策略限制第三个 pod (app=app3) 的入口访问,仅允许来自第二个 pod (app=app2) 的流量和来自另一个命名空间的任何 pods “第二空间”。
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”命名空间时,我仍然可以使用第一个来卷曲(并获得示例 JSON 响应)第三个 pod (app=app3) 的服务pod (app=app1).
以下是示例命令。这里10.100.150.0是为第三个pod创建的服务的ClusterIP。
kubectl exec app1-849b94c6df-rzdls --namespace firstspace-- curl -sL 10.100.150.0:8080/testendpoint
谁能帮我理解我做错了什么?
经过反复试验,我观察到以下情况。 根据 Kubernetes 网络策略 documentation, Deployed Network Policies will be only effective if a network plugin 安装在 Kubernetes 集群中。
由于我的本地 minikube cluster did not have a network plugin 我在问题描述中提到的网络策略无效。
安装 Cillium Network Plugin in my minikube 集群后,网络策略按预期运行。
备注:
- Cillium Network Plugin installation was not successful on minikube 当使用
docker
作为驱动程序时。 But it worked when selectedhyperv
as the driver. - 我还必须为带有 app=app2 标签的 pod 创建出口策略,以允许来自带有 app=app3 标签的 pod 的出口流量(参见下面的示例)。
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