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