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
我们正在使用 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