netpol: zehn Arbeitslasten ohne Ausgang nach draussen (#0088)
Sie sprechen ausschliesslich cluster-intern: die drei nginx-Dienste, beide
Postgres, der ClamAV-Vorschalter, haproxy, die Wiki-Gruppenpruefung und die
beiden Matrix-Bots. Fuer sie faellt der pauschale 0.0.0.0/0-Satz weg; DNS und
Cluster-Netz bleiben.
⚠️ Der Ausschluss steht in egress-block-metadata selbst, nicht in einer neuen
strengen Policy. NetworkPolicies sind additiv - solange irgendeine Policy
0.0.0.0/0 fuer einen Pod erlaubt, aendert eine zweite, strengere nichts. Genau
dieser Fehler waere die naheliegende Umsetzung gewesen.
Zwei Dinge vorher gemessen statt angenommen:
- waehlt auch Pods, die das Label gar nicht tragen (29 Pods, 1 Treffer,
notin liefert 28). Ohne diese Gewissheit haetten drei Pods ohne
app.kubernetes.io/name ihren Metadaten-Schutz verloren.
- Die Selektoren gegen den laufenden Cluster geprueft: 20 behalten breiten
Ausgang, 9 laufende Pods werden eng - Summe 29, also genau die Gesamtzahl.
Zwei Policies, weil ein podSelector nicht ueber zwei Label-Schluessel odern kann;
drei Pods im Namespace fuehren nur .
Rollback: beide neuen Policies loeschen, Ausschluss zuruecknehmen.
This commit is contained in:
@@ -438,7 +438,34 @@ metadata:
|
||||
name: egress-block-metadata
|
||||
namespace: matrix
|
||||
spec:
|
||||
podSelector: {}
|
||||
# Waehlt alle Pods AUSSER denen, die gar keinen Ausgang brauchen (#0088).
|
||||
#
|
||||
# ⚠️ Der Ausschluss muss HIER stehen, nicht in einer zusaetzlichen engen Policy:
|
||||
# NetworkPolicies sind additiv. Solange diese Policy 0.0.0.0/0 fuer einen Pod
|
||||
# erlaubt, aendert eine zweite, strengere Regel fuer denselben Pod nichts.
|
||||
#
|
||||
# `NotIn` waehlt auch Pods, die das Label gar nicht tragen - am 2026-08-20 im
|
||||
# Cluster nachgemessen (29 Pods, 1 Treffer, notin liefert 28). Drei Pods im
|
||||
# Namespace fuehren kein app.kubernetes.io/name, deshalb der zweite Ausdruck
|
||||
# auf `app`. Beide Ausdruecke sind UND-verknuepft.
|
||||
podSelector:
|
||||
matchExpressions:
|
||||
- key: app.kubernetes.io/name
|
||||
operator: NotIn
|
||||
values:
|
||||
- element-web
|
||||
- element-admin
|
||||
- postgres
|
||||
- wikijs-postgres
|
||||
- clamav-http-scanner
|
||||
- wikijs-gruppenpruefung
|
||||
- haproxy
|
||||
- draupnir
|
||||
- key: app
|
||||
operator: NotIn
|
||||
values:
|
||||
- element-web-docs
|
||||
- concierge-bot
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
@@ -465,3 +492,86 @@ spec:
|
||||
cidr: 0.0.0.0/0
|
||||
except:
|
||||
- 169.254.0.0/16
|
||||
|
||||
---
|
||||
# Pods ohne jeden Bedarf an Ausgang nach draussen (#0088).
|
||||
#
|
||||
# Zehn Arbeitslasten sprechen ausschliesslich cluster-intern: die drei nginx-Dienste,
|
||||
# beide Postgres, der ClamAV-Vorschalter, haproxy, die Wiki-Gruppenpruefung und die
|
||||
# beiden Matrix-Bots (Foederation ist geschlossen, Draupnir holt keine fremden
|
||||
# Policy-Listen). Fuer sie faellt der pauschale 0.0.0.0/0-Satz weg; erlaubt bleibt
|
||||
# DNS und das Cluster-Netz.
|
||||
#
|
||||
# Zwei Policies, weil ein podSelector nicht ueber zwei Label-Schluessel odern kann -
|
||||
# die Vereinigung mehrerer Policies leistet genau das.
|
||||
#
|
||||
# Rollback: beide Policies loeschen und den Ausschluss in egress-block-metadata
|
||||
# zuruecknehmen.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: egress-nur-intern
|
||||
namespace: matrix
|
||||
spec:
|
||||
podSelector:
|
||||
matchExpressions:
|
||||
- key: app.kubernetes.io/name
|
||||
operator: In
|
||||
values:
|
||||
- element-web
|
||||
- element-admin
|
||||
- postgres
|
||||
- wikijs-postgres
|
||||
- clamav-http-scanner
|
||||
- wikijs-gruppenpruefung
|
||||
- haproxy
|
||||
- draupnir
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: kube-system
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
- protocol: TCP
|
||||
port: 53
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 10.42.0.0/16
|
||||
- ipBlock:
|
||||
cidr: 10.43.0.0/16
|
||||
---
|
||||
# Dieselben Regeln fuer die zwei Pods, die kein app.kubernetes.io/name fuehren.
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: NetworkPolicy
|
||||
metadata:
|
||||
name: egress-nur-intern-app-label
|
||||
namespace: matrix
|
||||
spec:
|
||||
podSelector:
|
||||
matchExpressions:
|
||||
- key: app
|
||||
operator: In
|
||||
values:
|
||||
- element-web-docs
|
||||
- concierge-bot
|
||||
policyTypes:
|
||||
- Egress
|
||||
egress:
|
||||
- to:
|
||||
- namespaceSelector:
|
||||
matchLabels:
|
||||
kubernetes.io/metadata.name: kube-system
|
||||
ports:
|
||||
- protocol: UDP
|
||||
port: 53
|
||||
- protocol: TCP
|
||||
port: 53
|
||||
- to:
|
||||
- ipBlock:
|
||||
cidr: 10.42.0.0/16
|
||||
- ipBlock:
|
||||
cidr: 10.43.0.0/16
|
||||
|
||||
Reference in New Issue
Block a user