11.02.2019 von Olaf Sebelin

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.

Der Autor

Olaf Sebelin
ist vorwiegend in der Backend-Entwicklung zu finden. Das liegt neben der Blindheit auf dem Design-Auge auch an der Vorliebe für statisch getypte Sprachen, Terminals und Themen wie Spring, DDD, Kubernetes, Security, PKIs usw.