Work in Progress
Kubernetes Namespaces sind ein effektives Mittel, um Anwendungen voneinander zu trennen. Als Default für einen Namesapce sollte "deny any any" gesetzt sein, d.h. nichts geht rein oder raus. Die Datei network-policy-deny.yaml sollte folgenden Inalt haben:
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: default-deny-all spec: podSelector: {} policyTypes: - Ingress - Egress
Mit kubectl apply -f ./network-policy-deny.yaml -n=<namespace> wird diese "deny all" Policy zunächst jedem Namespace zugewiesen.So bald ein Namespace neu erstellt wird, sollte auch diese Policy angewendet werden. So wird sichergestellt, dass keine Zugriffe von außen stattfinden, sofern diese nicht explizit gewünscht sind.
Wie auf der Seite Deployment angekündigt, hier nun die Policy für den Namespace hello-zone, die einen Zugriff von dem Ingress-Nginx auf Port 8080 der Anwendung zulässt.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: hello-network-policy
namespace: hello-zone
spec:
podSelector:
matchLabels:
role: hellolbl
policyTypes:
- Ingress
ingress:
- from:
- namespaceSelector:
matchLabels:
name: nginx-ingress-zone
- podSelector:
matchLabels:
app.kubernetes.io/instance: my-nginx-release
ports:
- protocol: TCP
port: 8080
Diese Policy macht jetzt folgendes:
Mit kubectl apply -n hello-zone -f hello-policy.yaml wird die Policy aktiviert. Zum Beweis kann man die Gegenprobe machen, in dem in der Policy der Port auf 8081 gesetzt wird. Der Nginx läuft dann bei einem Zugriff auf den Service auf ein Timeout. Bei Port 8080 sollte der Service dagegen normal funktionieren.
https://github.com/ahmetb/kubernetes-network-policy-recipes
https://kubernetes.io/docs/concepts/services-networking/network-policies/
https://kubernetes.io/blog/2016/08/kubernetes-namespaces-use-cases-insights/