Für mich klingt dies gerade so, dass jeder Namespace ein eigenes Netzwerksegment zugewiesen bekommt auf denen dann Routing, Loadbalanceing etc. stattfindet?
Das heißt jeder POD bekommt ein /16 LAN zugewiesen? innerhalb dieses POD's bekommen dann die einzelnen Container jeweils eine IP aus diesem /16?
Nein, die Trennung wird firewall-ähnlich durchgeführt. Du hast 2 virtuelle Töpfe und einen realen Topf an IP-Adressen:
- das Hostnet. Meistens schlicht die Gesamtheit aller IPs welche deinen VM's zugewiesen wurden aber du könntest für Ingress/Egress/Node-Assignation auch dem Cluster ein Netzwerksegment dedizieren
- das Service-Netz: Hier werden *clusterintern* IP-Adressen einem Service (zB: Namespace 'meinblog' , Service 'https' , ClusterPort 443) assigniert. Dieser Service wird dann in Echtzeit von Kubernetes mittels Selektoren auf tatsächlich laufende Pods zugewiesen. Im Beispiel sagen wir dass alle Container mit dem Tag "webserver" auf Port 8443 erreichbar sind.
Wenn mindestens 1 Pod mit Tag "webserver" alle Checks( startup + readiness + liveness) besteht und "ready" ist, dann ist er über die IP des Service erreichbar. Wenn mehrere Pods es sind, so wird zwischen den Pods loadbalanced. Falls kein POD es ist, so hängt die TCP-Verbindung einfach.
Dies ermöglicht es dass du zB eine neue Apache-Version ausspielen kannst. Der neue Server startet, wird "ready", der alte Pod wird non-ready und wird terminiert.
- das Pod-Netzwerk: Hier laufen die eigentlichen Container. (Mehrere Container eines Pods teilen sich eine IP)
Die IPs werden im Normalfall automatisch assigniert und ändern zwischen 2 Starts. Man kann es als grosses DHCP-Netz für die einzelnen Applikationen ansehen. Die Verkehrsssteuerung erfolgt auf SDN-Ebene und nicht auf CIDR-Ebene so dass Pods aus 2 Namespaces nebeneinanderliegende IPs haben können.
Wie genau meinst du dies? Das ich jedem einzelnem Worker Node ein /24 LAN Netz anhänge? oder das alle Worker Nodes in dem selben /24 LAN sind?
Nein Kubernetes will wissen wie das Hotnetzwerk aufgebaut ist. Bei einer manuellen Konfiguration vermutlich weniger relevant, OCD/OKD will aber zumindest dass alle Maschinen im gleichen Netzwerk sind. So kannst du nicht ein 192.168.1.x/24 haben und dann einen Worker mit 172.0.0.2 beisetzen.
SDN ist dann dies was ich bereits angesprochen hatte mit Flannel und co oder?
Genau, "software-defined networking". Also quasi Router, Switch, Firewall, Loadbalancer, ... nur halt in Software definiert statt fester Netzwerkkonfiguration.
Sehr interessant wird das Konzept wenn man Hardware- oder Cloudunterstützung hat, also dein Kubernetes dem Anbieter sagen kann was es braucht. Du willst einen Loadbalancer? Kein Problem, das System gibt den Router oder Loadbalancer bescheid dass TCP auf IP X Service Y nun round-robin auf 2 IP's verteilt werden soll. Diesen "network-Support" gibt es sowohl für enterprise on-premise (Vmware NSX, Juniper Contrail, Cisco ACI, ...) als auch für die grossen Cloud-Anbieter (Azure, AWS, ...)
und dies wird dann intern auf die IP's des /24 Netzes des Hosts geroutet und von da aus nach "außerhalb" verteilt?
Ich bin mir nicht sicher was du mit "nach ausserhalb" meinst. Du musst aber ein Kubernetes Cluster ansehen als ob es hinter einem NAT hängt; von aussen siehst du nur die Router (Hostmachinen), von innen musst du ausgehend über die Router fahren und reinkommen kann Verkehr nur über Portforwarding (hier NodePort)
Nehme ich aber nun testweise den ersten Masterplane server vom Netz tut sich garnichts mehr
Ins Blaue rein geraten; du hast eine Controlplane mit 2 Master was nicht unterstützt ist. Falls ein Master ausfällt ist der andere non-quorate und weigert zu arbeiten. Das sollte normalerweise in den Logs und in der Statusabfrage von ETCD bemängelt werden falls das so ist.
Erklärung: Nur beide Master zusammen sind quorate. Du brauchst entweder einen dritten Master (dann bleibt das Cluster quorate solange du 2 hast) oder einen Single-Node Master. Der Fall eines Two-Node Clusters mit externem Quorum (bspw corosync-qdevice) ist afaik nicht möglich für ETCD.