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

Sam*_*Sam 4 kubernetes google-kubernetes-engine

我在 Google Kubernetes Engine 上有一个集群,它使用 Calico 启用了网络策略。
到目前为止,我已经编写了 12 个网络策略作为 YAML 文件的形式。
我似乎无法弄清楚的一件事是,这些网络策略的创建顺序是否重要。
例如,假设我有这两个策略:
Pol#1- 拒绝所有入口连接

apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: deny-all-ingress
  namespace: default
spec:
  podSelector: {}
  policyTypes:
  - Ingress
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如果我先应用 Pol#1,然后应用 Pol#2,与先应用 Pol#2,然后应用 Pol#1 相比,我会得到不同的结果吗?

小智 7

不,您应用规则的顺序无关紧要。在您的情况下,Pol#2 规则无论如何都会起作用。

另一个 NetworkPolicy 示例:假设您有 2 个策略:第一个规则拒绝所有流量,第二个规则允许流量流向所选应用。无论您选择何种规则顺序 - 入口流量都将被允许进入具有标签app: web洞察力的 Podnamespace: default

拒绝-all.yaml:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: default-deny-all
  namespace: default
spec:
  podSelector: {}
  ingress: []
Run Code Online (Sandbox Code Playgroud)

应用-nginx-app.yaml:

kind: NetworkPolicy
apiVersion: networking.k8s.io/v1
metadata:
  name: web-allow-all
  namespace: default
spec:
  podSelector:
    matchLabels:
      app: web
  ingress:
  - {}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,你可以找到很多的networkPolicies例子有一步一步的解释这里

希望有帮助。