我在 Google Kubernetes Engine 上有一个集群,它使用 Calico 启用了网络策略。
到目前为止,我已经以 YAML 文件的形式编写了 12 个网络策略。
有一件事我似乎无法弄清楚,即这些网络策略的创建顺序是否重要。
例如,假设我有以下两个策略:
策略#1- 拒绝所有入口连接
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: deny-all-ingress
namespace: default
spec:
podSelector: {}
policyTypes:
- Ingress
Pol#2- 允许后端访问数据库:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: allow-db-to-be-accessed-by-backend
namespace: default
spec:
podSelector:
matchLabels:
app: mysql
release: production
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
app: backend
release: production
ports:
- protocol: TCP
port: 3306
如果我先应用 Pol#1,然后再应用 Pol#2,与先应用 Pol#2,然后再应用 Pol#1 相比,我会得到不同的结果吗?
答案1
不,你应用规则的顺序无关紧要。对于你的情况,Pol#2 规则无论如何都会起作用。
再举一个 NetworkPolicy 示例:假设您有 2 个策略:1 个规则用于拒绝所有流量,第 2 个规则用于允许流量流向所选应用。无论您选择哪种规则顺序 - 入口流量都将被允许流向带有标签app: web
insight 的 podnamespace: default
拒绝所有.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: default-deny-all
namespace: default
spec:
podSelector: {}
ingress: []
应用-nginx-app.yaml:
kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
name: web-allow-all
namespace: default
spec:
podSelector:
matchLabels:
app: web
ingress:
- {}
顺便说一句,你可以找到很多带有分步说明的网络策略示例这里。
希望有帮助。