网络策略的顺序在 kubernetes 中重要吗?

网络策略的顺序在 kubernetes 中重要吗?

我在 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: webinsight 的 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:
  - {}

顺便说一句,你可以找到很多带有分步说明的网络策略示例这里

希望有帮助。

相关内容