kubernetes - 入口网络策略未按预期工作

时间:2021-07-28 06:05:06

标签: kubernetes kubernetes-ingress kubernetes-networkpolicy

对于每个部署(命名空间 = 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

有人可以帮助我理解我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:1)

经过反复试验,我观察到以下情况。 根据 Kubernetes 网络策略 documentation,部署的网络策略仅在 Kubernetes 集群中安装了 network plugin 时才有效。

由于我的本地 minikube 集群没有 network plugin,我在问题描述中提到的网络策略无效。

在我的 Cillium Network Plugin 集群中安装 minikube 之后,网络策略按预期工作。

注意事项:

    使用 docker 作为驱动程序时,
  • Cillium Network Pluginminikube 上安装失败。但它在选中hyperv作为驱动程序时工作。
  • 我还必须为带有 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