Czym jest NetworkPolicy w Kubernetes?¶
Jest to mechanizm ograniczania ruchu na konkretny Pod, dzieląc ruch wejściowy jako Ingress i wyjściowy jako Egress. Poprzez taki podział okreslany jest sposób komunikacji między Podami: - czy ruch na Ingress danego Poda może być dostępny z innego Poda - czy ruch na Egress (wyjście) może być dostępny do innego Poda.
NetworkPolicy doczepiane są do Podów z użyciem Selectorów, np.
W Podzie Labele:
I w Network Policy:
Definicja NetworkPolicy¶
Będzie to NetworkPolicy zezwalająca na ruch wchodzący na Pod z labelem role: db na port 3306/TCP. Dostęp ten będzie możliwy jedynie z Poda o labelu api.

Ingress¶
Manifest NetworkPolicy:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-net_policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: api
ports:
- protocol: TCP
port: 3306
Czyli, w sekcji spec.podSelector.matchLabels my wybieramy na którym Podzie będzie reguła zawierana (lub jakie Pody będzie obejmować).
Tutaj określany jest jaki typ ruchu jest możliwy: ruch wchodzący na Poda (ingress):
Jeżeli jest to ruch Ingress, tworzymy klucz ingress: z obiektami które mają mieć dostęp na konkretnie 3306 port TCP:
Warning
ALE: Po takim rozwiązaniu każdy Pod o labelu role: api, z każdego namespace będzie miał dostęp do tego Poda!
Definicja NetworkPolicy dla konkretnego namespace¶
Definicja będzie dla namespace lab:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-net_policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- podSelector:
matchLabels:
role: api
namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: lab # nazwa namespace
ports:
- protocol: TCP
port: 3306
NetworkPolicy z dostępem do Poda z konkretnego IP¶
Adres IP 10.1.1.26/32 będzie miał umożliwiony dostęp do Poda db:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-net_policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
ingress:
- from:
- ipBlock:
cidr: 10.1.1.26/32 # zezwalamy na dostęp do Poda z tego adresu
ports:
- protocol: TCP
port: 3306
Dostęp będzie możliwy tylko dla adresu 10.1.1.26/32.
Egress¶
Definicja NetworkPolicy z Ingressem i Egressem:
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: db-net_policy
spec:
podSelector:
matchLabels:
role: db
policyTypes:
- Ingress
- Egress
ingress:
- from:
- podSelector:
matchLabels:
role: api
namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: lab
- ipBlock:
cidr: 10.1.1.24/32
ports:
- protocol: TCP
port: 3306
egress:
- to:
- ipBlock:
cidr: 10.2.2.24/32 # adres docelowy
ports:
- protocol: TCP
port: 80 # docelowy port do Backup Servera (wyjście z db)