Namespaces

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.

Hello World Namespace

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:

  • Alle Pods mit dem Label role=hellolbl bekommen diese Ingress Policy.
  • Die Policy betrifft nur Zugriffe von Pods im Namespace nginx-ingress-zone und mit dem Label app.kubernetes.io/instance=my-nginx-release
  • Erlaubt wird der Zugriff auf Port 8080/tcp

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.

 

Quellen

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/