From 0cce90e74eb10ea4d15721d2b337cf10c974e428 Mon Sep 17 00:00:00 2001
From: Sheogorath <sheogorath@shivering-isles.com>
Date: Mon, 29 Jan 2024 01:15:20 +0100
Subject: [PATCH] chore(shared): Switch network policies to matchExpressions

This patch moves from labelSelectors to matchExpressions since they are
immune to kustomize commonLabels, which prevents them from being
overwritten by accident.

References:
https://github.com/kubernetes-sigs/kustomize/issues/157
https://github.com/kubernetes-sigs/kustomize/issues/1009
---
 .../networkpolicies/allow-from-database.yaml  | 21 +++++++++++++------
 .../networkpolicies/allow-from-ingress.yaml   |  2 ++
 .../allow-from-kube-system.yaml               |  2 --
 .../allow-from-monitoring.yaml                |  9 ++++++--
 shared/networkpolicies/allow-from-redis.yaml  | 14 +++++++++----
 shared/networkpolicies/allow-to-database.yaml | 14 +++++++++----
 shared/networkpolicies/allow-to-kubedns.yaml  | 19 ++++++++++-------
 .../networkpolicies/allow-to-mailbox-org.yaml |  9 ++++++--
 .../networkpolicies/allow-to-public-web.yaml  | 16 ++++++++++----
 9 files changed, 75 insertions(+), 31 deletions(-)

diff --git a/shared/networkpolicies/allow-from-database.yaml b/shared/networkpolicies/allow-from-database.yaml
index 3720a749a..e10a83f8a 100644
--- a/shared/networkpolicies/allow-from-database.yaml
+++ b/shared/networkpolicies/allow-from-database.yaml
@@ -11,8 +11,11 @@ spec:
         matchLabels:
           database.shivering-isles.com/network-access-required: "true"
       podSelector:
-        matchLabels:
-          app.kubernetes.io/name: postgres-operator
+        matchExpressions:
+          - key: app.kubernetes.io/name
+            operator: In
+            values:
+              - postgres-operator
     ports:
     - port: 8008
       protocol: TCP
@@ -25,13 +28,19 @@ spec:
         matchLabels:
           monitoring.shivering-isles.com/network-access-required: "true"
       podSelector:
-        matchLabels:
-          app.kubernetes.io/name: prometheus
+        matchExpressions:
+          - key: app.kubernetes.io/name
+            operator: In
+            values:
+              - prometheus
     ports:
     - port: 9187
       protocol: TCP
     - port: 8008
       protocol: TCP
   podSelector:
-    matchLabels:
-      application: spilo
+    matchExpressions:
+      - key: application
+        operator: In
+        values:
+          - spilo
diff --git a/shared/networkpolicies/allow-from-ingress.yaml b/shared/networkpolicies/allow-from-ingress.yaml
index afa5b0a75..0a0aaa1a1 100644
--- a/shared/networkpolicies/allow-from-ingress.yaml
+++ b/shared/networkpolicies/allow-from-ingress.yaml
@@ -9,3 +9,5 @@ spec:
     - namespaceSelector:
         matchLabels:
           ingress.shivering-isles.com/network-access-required: "true"
+  podSelector:
+    matchLabels: {}
\ No newline at end of file
diff --git a/shared/networkpolicies/allow-from-kube-system.yaml b/shared/networkpolicies/allow-from-kube-system.yaml
index 663d92dcd..476ceaee0 100644
--- a/shared/networkpolicies/allow-from-kube-system.yaml
+++ b/shared/networkpolicies/allow-from-kube-system.yaml
@@ -9,8 +9,6 @@ spec:
     - namespaceSelector:
         matchLabels:
           kubernetes.io/metadata.name: kube-system
-      podSelector:
-          matchLabels: {}
   - from:
     - ipBlock:
         cidr: 192.168.100.0/24 # Kubernetes hosts
diff --git a/shared/networkpolicies/allow-from-monitoring.yaml b/shared/networkpolicies/allow-from-monitoring.yaml
index ec8e45902..e083bdf31 100644
--- a/shared/networkpolicies/allow-from-monitoring.yaml
+++ b/shared/networkpolicies/allow-from-monitoring.yaml
@@ -11,5 +11,10 @@ spec:
         matchLabels:
           monitoring.shivering-isles.com/network-access-required: "true"
       podSelector:
-        matchLabels:
-          app.kubernetes.io/name: prometheus
+        matchExpressions:
+          - key: app.kubernetes.io/name
+            operator: In
+            values:
+              - prometheus
+  podSelector:
+    matchLabels: {}
\ No newline at end of file
diff --git a/shared/networkpolicies/allow-from-redis.yaml b/shared/networkpolicies/allow-from-redis.yaml
index 1a6a03984..df5fe15e3 100644
--- a/shared/networkpolicies/allow-from-redis.yaml
+++ b/shared/networkpolicies/allow-from-redis.yaml
@@ -12,13 +12,19 @@ spec:
         matchLabels:
           redis.shivering-isles.com/network-access-required: "true"
       podSelector:
-        matchLabels:
-          app.kubernetes.io/name: redis-operator
+        matchExpressions:
+          - key: app.kubernetes.io/name
+            operator: In
+            values:
+              - redis-operator
     ports:
     - port: 26379
       protocol: TCP
     - port: 6379
       protocol: TCP
   podSelector:
-    matchLabels:
-      app.kubernetes.io/part-of: redis-failover
+    matchExpressions:
+      - key: app.kubernetes.io/part-of
+        operator: In
+        values:
+          - redis-failover
diff --git a/shared/networkpolicies/allow-to-database.yaml b/shared/networkpolicies/allow-to-database.yaml
index 53a142d6c..8e86c16cd 100644
--- a/shared/networkpolicies/allow-to-database.yaml
+++ b/shared/networkpolicies/allow-to-database.yaml
@@ -18,10 +18,16 @@ spec:
         port: 9000
   - to:
       - podSelector:
-          matchLabels:
-            application: spilo
+          matchExpressions:
+          - key: application
+            operator: In
+            values:
+              - spilo
   podSelector:
-    matchLabels:
-      application: spilo
+    matchExpressions:
+      - key: application
+        operator: In
+        values:
+          - spilo
   policyTypes:
   - Egress
diff --git a/shared/networkpolicies/allow-to-kubedns.yaml b/shared/networkpolicies/allow-to-kubedns.yaml
index 0edb8bfb4..3b8d0e8d8 100644
--- a/shared/networkpolicies/allow-to-kubedns.yaml
+++ b/shared/networkpolicies/allow-to-kubedns.yaml
@@ -6,16 +6,21 @@ metadata:
 spec:
   egress:
     - to:
-        - namespaceSelector:
-            matchLabels:
-              kubernetes.io/metadata.name: kube-system
-          podSelector:
-            matchLabels:
-              k8s-app: kube-dns
+      - namespaceSelector:
+          matchLabels:
+            kubernetes.io/metadata.name: kube-system
+        podSelector:
+          matchExpressions:
+            - key: k8s-app
+              operator: In
+              values:
+                - kube-dns
       ports:
         - port: 53
           protocol: UDP
         - port: 53
           protocol: TCP
   policyTypes:
-    - Egress
\ No newline at end of file
+    - Egress
+  podSelector:
+    matchLabels: {}
\ No newline at end of file
diff --git a/shared/networkpolicies/allow-to-mailbox-org.yaml b/shared/networkpolicies/allow-to-mailbox-org.yaml
index f302e1d83..6741df6ab 100644
--- a/shared/networkpolicies/allow-to-mailbox-org.yaml
+++ b/shared/networkpolicies/allow-to-mailbox-org.yaml
@@ -18,12 +18,17 @@ spec:
         matchLabels:
           kubernetes.io/metadata.name: kube-system
       podSelector:
-        matchLabels:
-          k8s-app: kube-dns
+        matchExpressions:
+          - key: k8s-app
+            operator: In
+            values:
+              - kube-dns
       ports:
         - port: 53
           protocol: UDP
         - port: 53
           protocol: TCP
+  podSelector:
+    matchLabels: {}
   policyTypes:
   - Egress
diff --git a/shared/networkpolicies/allow-to-public-web.yaml b/shared/networkpolicies/allow-to-public-web.yaml
index b1f260c72..1a0793758 100644
--- a/shared/networkpolicies/allow-to-public-web.yaml
+++ b/shared/networkpolicies/allow-to-public-web.yaml
@@ -10,8 +10,11 @@ spec:
         matchLabels:
           kubernetes.io/metadata.name: nginx-system
       podSelector:
-        matchLabels:
-          app.kubernetes.io/name: haproxy
+        matchExpressions:
+          - key: app.kubernetes.io/name
+            operator: In
+            values:
+              - haproxy
     ports:
       - protocol: TCP
         port: 80
@@ -36,12 +39,17 @@ spec:
         matchLabels:
           kubernetes.io/metadata.name: kube-system
       podSelector:
-        matchLabels:
-          k8s-app: kube-dns
+        matchExpressions:
+          - key: k8s-app
+            operator: In
+            values:
+              - kube-dns
       ports:
         - port: 53
           protocol: UDP
         - port: 53
           protocol: TCP
+  podSelector:
+    matchLabels: {}
   policyTypes:
   - Egress
\ No newline at end of file
-- 
GitLab