HTTP-Rules (L7)
L7-Regeln hängen unter toPorts.rules.http:
method, path, host als
POSIX-Regex. Header nie per Regex: headers prüft
Präsenz, als "Name: Wert" den exakten Wert;
headerMatches vergleicht exakt (Wert auch aus Secret,
mismatch steuert die Reaktion). Durchsetzung via
node-lokalem Envoy; Verstoß liefert
HTTP 403 statt Paket-Drop.
Weiterer L7-Typ: dns. Kafka- und proxylib-Regeln
(kafka, l7, l7proto) sind
seit 1.20 entfernt und müssen vor dem Upgrade aus den
Policies raus.
spec:
endpointSelector:
matchLabels: {app: api}
ingress:
- fromEndpoints:
- matchLabels: {app: frontend}
toPorts:
- ports:
- {port: "80", protocol: TCP}
rules:
http:
- method: GET
path: /v1/.*
toFQDNs (Egress nach Namen)
matchName exakt, matchPattern mit
Wildcard.
Pflicht-Voraussetzung: eine
rules.dns-Regel schaltet den DNS-Proxy ein,
ohne DNS-Sichtbarkeit kann Cilium FQDNs nicht auf IPs mappen und
die Policy läuft leer. Selektoren ohne Namespace-Label gelten
in einer CNP nur im eigenen Namespace, kube-dns also mit Namespace
selektieren.
egress:
- toEndpoints:
- matchLabels:
k8s:io.kubernetes.pod.namespace: kube-system
k8s-app: kube-dns
toPorts:
- ports: [{port: "53", protocol: ANY}]
rules:
dns: [{matchPattern: "*"}]
- toFQDNs:
- matchName: api.example.com
- matchPattern: "*.storage.example.com"
toPorts:
- ports: [{port: "443", protocol: TCP}]