Kubernetes/Rancher:使用 Traefik 的网络策略

Kubernetes/Rancher: NetworkPolicy with Traefik

我们正在使用 Rancher 以 Canal 作为 CNI 来设置集群。我们决定使用 Traefik 作为 Ingress Controller,并希望创建一个 NetworkPolicy。我们禁用了 ProjectIsolation,Traefik 在 kube-system 命名空间的系统项目中 运行。

我制定了这个政策:

# deny all ingress traffic
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: default-deny-all
spec:
  podSelector: {}
  ingress:
  - from:
    - podSelector: {}

---
# allow traefik
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: ingress-allow-traefik
spec:
  podSelector: {}
  ingress:
    - from:
      - namespaceSelector:
          matchLabels:
            namespace: kube-system
        podSelector:
          matchLabels:
            app: traefik

---
# allow backnet
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: ingress-allow-backnet
spec:
  podSelector: {}
  ingress:
    - from:
      - ipBlock:
          cidr: 10.0.0.0/24
      - ipBlock:
          cidr: 10.1.0.0/24
      - ipBlock:
          cidr: 10.2.0.0/24
      - ipBlock:
          cidr: 192.168.0.0/24

但不知何故我们无法让它工作。连接超时,仅此而已。这个政策有什么大问题吗?我对 NetworkPolicies 有什么不了解的地方?

提前致谢

我解决了问题。这是一个普通的初学者错误:

- namespaceSelector:
    matchLabels:
      namespace: kube-system

我没有将 Label namespace: kube-system 添加到 Namespace kube-system

添加标签后立即生效。

根据 this from K8s docs,现在所有命名空间上都有一个名为 kubernetes.io/metadata.name 的标签,可用于 select 特定命名空间,例如:

- namespaceSelector:
    matchLabels:
      kubernetes.io/metadata.name: kube-system