【问题标题】:Kubernetes Networkpolicy does not work as expectedKubernetes Networkpolicy 没有按预期工作
【发布时间】:2019-08-17 18:12:10
【问题描述】:

我对 Calico 的网络策略还很陌生。我在集群上创建了以下 NetworkPolicy:

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: nginxnp-po
  namespace: default
spec:
  podSelector:
    matchLabels:
      run: nginxnp
  policyTypes:
    - Ingress
  ingress:
  - from:
    - podSelector:
        matchLabels:
          acces: frontend
    ports: 
      - port: 80

这是我的阅读方式:所有具有选择器 run=nginxnp 的 pod 只能从具有选择器 access=frontend 的每个 pod 的端口 80 访问。

这是我的 nginx pod(里面有一个正在运行的 nginx):

$ kubectl get pods -l run=nginxnp
NAME                      READY   STATUS    RESTARTS   AGE
nginxnp-9b49f4b8d-tkz6q   1/1     Running   0          36h

我创建了一个这样的busybox容器:

$ kubectl run busybox --image=busybox --restart=Never --labels=access=frontend -- sleep 3600

我可以看到它匹配选择器access=frontend:

$ kubectl get pods -l access=frontend
NAME      READY   STATUS    RESTARTS   AGE
busybox   1/1     Running   0          6m30s

但是,当我执行进入busybox pod并尝试获取nginx pod时,连接仍然被拒绝。

我还尝试设置一个允许流量反过来的出口规则,但这也没有做任何事情。据我了解网络策略:没有设置规则时,没有任何内容被阻止。因此,当我没有设置出口规则时,出口不应该被阻止。

如果我删除网络策略,它会起作用。任何指针都非常感谢。

【问题讨论】:

  • matchLabels 中有错字 => acces: frontend 是否正确?
  • 不,当然不是。 TLDR:如果你累了,就不要工作。我不确定我是否理解 NetworkPolicies,但是:我的理解肯定是错误的......
  • 您可以使用 Tufin 提供的一个不错的工具来可视化您的网络策略,然后再应用它们here

标签: nginx kubernetes kubernetes-networkpolicy


【解决方案1】:

NetworkPolicy 模板中有错字acces: frontend 应该是access: frontend

  ingress:
  - from:
    - podSelector:
        matchLabels:
          acces: frontend

【讨论】:

    猜你喜欢
    • 2021-10-19
    • 2020-03-18
    • 2012-06-14
    • 2014-11-15
    • 1970-01-01
    • 2012-07-02
    • 2011-09-07
    • 2013-03-03
    • 2015-05-18
    相关资源
    最近更新 更多