Work in Progress
Kubernetes ist sehr viel mehr, als nur Container. Eine sorgfältige Auswahl der Plattform ist maßgeblich für den Erfolg des Projektes. Die Installation von Kubernetes ist aufgrund ihrer Komplexität auf mehreren Seiten beschrieben. Zum Vorgehen wird diese Reihenfolge empfohlen:
Die Beiträge dieser und der folgenden Seiten zu Kubernetes beziehen sich auf die Version v1.25+
Man kann man sehr schön Kubernetes Controller und Worker bauen, aber ohne eine weitere Infrastruktur bringt das nicht sehr viel. Die Backends für Kubernetes müssen alle redundant ausgeführt werden, sonst bringt Kubernetes mit seiner Redundanz nichts.
Die grüne Wiese hat man selten, meist gibt es irgendwelche Altlasten (z.B. Windows Server), die auch noch laufen sollen. Die alte Perimeter Infrastruktur hat also noch lange nicht ausgedient und ist immer noch gut als weitere Verteidigungslinie geeignet. Container sind selbst stateless, dennoch müssen irgendwo Daten noch persistent gespeichert werden. Zwischen Kubernetes Netz und der restlichen Welt ist eine Firewall sinnvoll, damit es einen single Point of Contact gibt und auch im K-Fall schneller reagieren kann.
Zwischen der alten Welt und Kubernetes sollte auf jeden Fall eine Firewall laufen, alleine schon deswegen, damit man an einer zentralen Stelle suchen und eingreifen kann, falls etwas passiert ist.
Eine Datenbank sollte klassisch aufgebaut werden, da die Platzhirsche MariaDB und Postgres verteilt noch nicht so optimal funktionieren. Im Falle von Postgres sollten für die Authentifizierung X.509 Client Zertifikate verwendet werden. Weiterhin sollten die Tabellen verschlüsselt werden im SInn von Shit happens. Wenn man der Datenbank noch die freie Wahl hat, dann sollte man sich Apache Ignite ansehen.
Ceph ist das passende Gegenstück von Kubernetes für persistente Objekte, sofern diese nicht in die SQL Datenbank sollen. Notfalls geht auch NFS4, allerdings kann das schnell zum Flaschenhals werden, wenn man mehrere hundert Worker Nodes mit einigen tausend Containern hat von denen einige persistente Files benötigen. Für erste Gehversuche mit Kubernetes ist NFS4 aber ok.
Kubernetes hat zwar seine eigene PKI, diese sollte aber ausschließlich nur für Kubernetes verwendet werden. Für die Authentifizierung von Anwendungen/Services untereinander sollte eine eigene PKI Lösung aufgebaut werden.
Das Kubernetes Netz sollte über eine leistungsfähige Firewall vom Rest des Legacy Netzes getrennt sein. Die Firewall sollte zumindest Rulesets enthalten, die folgende Zugriffe von und nach außen regelt:
Kubernetes ist von Hause aus nicht mandantenfähig. Es gibt jedoch Module, mit denen das möglich ist.
Dazu meine Meinung: Es ist keine gute Idee, Kubernetes in diese Richtung zu vergewaltigen, denn innerhalb von Kubernetes hat ein ein weitgehend offenes Netzwerk. Einschränkungen in der Kommunikation sind zwar über Namespaces und Policies möglich, aber schon ein kleiner Fehler ermöglicht unerwünschte Kommunikationsbeziehungen. Innerhalb eines Mandanten ist das zwar eine Schwachstelle, muss aber nicht gleich eskalieren. Wenn dagegen interne Services unterschiedlicher Kunden Kontakt haben, dann kann so etwas fatal sein.
Mandanten sollte über getrennte Kubernetes Instanzen implementiert werden. Mit Kubernetes Nodes auf virtuellen Maschinen ist das leicht möglich, wenn sich die VMs in unterschiedlichen V(x)LANs befinden, dann ist das Risiko deutlich geringer.
Für Kubernetes entstehen Anleitungen für die einzelnen Aspekte von Kubernetes
OPNsense | Installation Firewall/Loadbalancer für Control Planes |
Linux Distribution | Anmerkungen zur Auswahl einer Linux Distribution für Kubernetes |
Host | Einrichtung des Hosts |
Installation Control Plane | Einrichtung der Control Planes |
installation Worker | Einrichtung der Worker |
Calico | Network Provider mit BGP4 Unterstützung als Alternative zu Weave |
Deployment | Beispiel Deployment "Hello World" mit Anbindung Ingress Nginx |
Ingress Nginx | Installation Nginx als Ingress |
MetalLB | Einrichtung MetalLB Load-Balancer Lösung mit BGP4 Unterstützung |
Namespaces | Verwendung von Namespaces mit Network Policies |
Security | Überlegungen zur Sicherheit |
Troubleshooting | Wenn mal etwas nicht klappt |
Image Server | Lösungen für Image Registries |
Routing | BGP4 und Kubernetes |
Storage | Persistenter Storage für den Kubernetes Cluster |
HowTo |