Abstract: Minikube mit KVM2: Was muss man tun, damit minikube eine feste IP-Addresse erhält und Pods z.B. die Datenbank auf dem Host erreichen können?
Minikube mit KVM2
Der Standard-Treiber für minikube unter Linux ist VirtualBox. Vermutlich mit dem Update auf VirtualBox 6 hat sich leider ein Fehler eingeschlichen, der dafür sorgt, dass minikube bei jedem minikube start
eine neue IP-Adresse erhält.
Feste IP-Adresse zuordnen
Die Installation nach Anleitung geht einfach. Allerdings erhält minikube standardmäßig mit diesem Treiber mit jedem minikube start
ebenfalls eine neue IP-Adresse. Dieses lässt sich jedoch leicht ändern, indem man minikube ein festes DHCP-Lease zuordnet. Dazu muss zunächst die MAC-Adresse ermittelt werden:
$ sudo virsh net-dhcp-leases minikube-net
Expiry Time MAC-Adresse Protocol IP address Hostname Client ID or DUID
-------------------------------------------------------------------------------------------------------------------------------------------
2019-02-06 09:48:11 38:4c:4f:93:20:0f ipv4 192.168.39.3/24 minikube ff:e2:34:3f:3e:00:02:00:00:ab:11:81:b2:71:94:04:68:23:5c
Die MAC-Adresse ist über Neustarts stabil. Für diese MAC-Adresse kann man nun in virsh ein festes DHCP-Lease erstellen. Der Befehl
sudo virsh net-edit minikube-net
öffnet die Konfiguration im $EDITOR
. Im Abschnitt <dhcp>
wird dann das Lease für diese MAC-Adresse in einem <host>
-Element eingetragen:
<network>
<name>minikube-net</name>
<uuid>46170500-4617-45ef-bf4c-f5645667bf4e</uuid>
<bridge name='virbr1' stp='on' delay='0'/>
<mac address='52:54:00:16:ba:29'></mac>
<dns enable='no'></dns>
<ip address='192.168.39.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.39.2' end='192.168.39.254'></range>
<host mac='38:4c:4f:93:20:0f' ip='192.168.39.3'></host>
</dhcp>
</ip>
</network>
Falls zum Beispiel die Datenbank auf dem eigenen Rechner außerhalb des Clusters läuft, muss jetzt noch der Endpoint des DB-Services angepasst werden, damit die Pods die Datenbank auf dem Host erreichen. Die alte Host-IP-Adresse von VirtualBox muss durch die von virsh ersetzt werden.
Die Host-Adresse lässt sich z.B. so ermitteln:
$ minikube ssh
$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default monge 0.0.0.0 UG 1024 0 0 eth0
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
192.168.39.0 * 255.255.255.0 U 0 0 0 eth1
192.168.122.0 * 255.255.255.0 U 0 0 0 eth0
192.168.122.1 * 255.255.255.255 UH 1024 0 0 eth0
Die 192.168.122.1
muss nun in die Enpoint-Definition eingetragen werden:
kind: Endpoints
apiVersion: v1
metadata:
name: dev-postgres
subsets:
- addresses:
- ip: *[.line-through]#192.168.99.1# 192.168.122.1*
ports:
- port: 5432
Fertig. Jetzt funktioniert wieder alles wie vorher. Nur cooler.