OPNsense Firewall

Die Open Source Firewall OPNsense ist eine sinnvolle Lösung für die folgenden Aufgaben:

  • Firewall zwischen Außenwelt und Kubernetes Cluster
  • DHCP Server für Kubernetes Nodes
  • Haproxy für Kubernetes Control-Planes
  • BGP4 Router für Calico oder MetalLB

Firewall

Für diesen Demo Aufbau wurde ein Port "kube" für das Kubernetes Netz definiert.

 

Hier noch die in den Firewall Regeln verwendeten Aliases:

 

DHCP Server

Für das Kubernetes Netz wird ein DHCP Server konfiguriert. Der dynmische Pool wurde hier nur für neue Nodes eingerichtet, damit man diese nach dem erstmaligen Boot mit ssh weiter einrichten kann. Es wird empfohlen, mit statischen DHCP Zuweisungen zu arbeiten. Das macht die BGP4 Anbindung einfacher.

Mit den statischen Zuweisungen hat man auch gleichen einen Überblick darüber, welche Nodes im Kubernetes Netz sein sollten.

Falls in diesem Szenario dynamische Zuweisungen erfolgt sind, dann sind das evtl. Nodes, die noch nicht konfiguriert sind.

Haproxy

In dem Haproxy werden die die Control Planes als "Real Servers" angegeben. In diesen Beispielen befindet sich das Kubernetes Control-Plane Netz im Netz 10.67.0.0/16.

Hier ein Beispiel für eine der Control-Planes, die anderen Control-Planes unterscheiden sich nur in der IP-Adresse.

Im nächsten Dialog wird der Backend Pool festgelegt, dort werden die Real-Server verwendet.

In dem Backend Pool werden die 3 Control-Planes zu einem Backend zusammengefasst.

Die anderen, hier nicht gezeigten Parameter bleiben auf ihren Default Werten, bzw. werden nicht angegeben. Im letzten Schritt wird das Frontend konfiguriert.

Der Public Service ist das, was als Control-Plane im Kubernetes Cluster sichtbar wird.

Die Control-Plane soll einmal in der Admin-DMZ und natürlich im Kubernetes Netz sichtbar sein. An dieser Stelle wird der Backend Pool verwendet.

Unter Rules & Checks wird noch ein Health Montor gesetzt, der ist von zentraler Bedeutung, damit der Haproxy merkt, wenn eine der Control Planes nicht verfügbar ist.

Der Health-Monitor prüft einfach nur, ob der Port 6443 auf dem Backend offen ist. Die Health Monitor Defintion wird im Backend Pool verwendet.

Statistiken

Die haproxy Statistiken sind sehr nützlich, um evtl. Probleme im Control Plane Cluster zu ermitteln. Diese sollte in der Haproxy Konfiguration ebenfalls aktiviert werden. Wichtig: Unbedingt einen User/Passwort setzen, damit der Zugang zu den Statistiken nur über eine Authentifizierung möglich ist.

Nachdem 3 Control Planes laufen sollte die haproxy Statistik folgendes Resultat liefern:

 

In diesem Beispiel sind alle 3 Knoten Online.

BGP4 Router

Für das BGP4 Routing wird zunächst das interne Kubernetes Netz aufgenommen.

Als Neigbor werden dann die Kubernetes Nodes eingetragen, in diesem Beispiel ist das die 192.168.47.16.

Grundsätzlich kann die Firewall ihre Routing Informationen auch an andere Peers weitergeben, hier wurde als Backend ein Virtualbox Host verwendet, so dass man bei Änderungen nich jedes Mal eine statische Route anpassen muss. Sofern die BGP4 Konfiguration richtig ist, sollten in der OPNsense Diagnose die Peers zu sehen sein.

Vom Kubernetes MetalLB hat der BGP4 Routing Prozess hier ein Prefix erhalten.