Docker Networking ist für die meisten relativ mystisch. De facto legt Docker ein eigenes SDN (Software Defined Network) für jeden Stack und jeden Container an.
Das bedeutet auch, dass man, sollte man mit docker-compose arbeiten, für ein übergreifendes Networking zwischen den Containern ein eigense Netzwerk definieren muss / sollte.
Ich lege in solchen Fällen meistens ein Netzwerk "internalnet" an. Dies wird bei Restart des Hosts wieder angelegt:
docker network create internalnet
Anschließend baue ich einen docker-compose Stack mit HaProxy, Nginx oder apache als Reverse Proxy. Damit braucht keiner der Container direkt in das Internet exposed sein.
Nun hat das ganze aber ein paar kleine Probleme, die nicht in der oben genannten Konfiguration, sondern am firewalld liegen.
Hier der Effekt:
Man kann vom Container aus den Host auf dem der Container läuft zwar pingen, bekommt aber keinen Connect. Das verhindert die Firewall.
Sollte der Rechner im Internet stehen und die firewalld Zone "public" verwendet werden, hier die Config Änderung:
In der XML Datei /etc/firewalld/zones/public.xml
folgendes in den <zone></zone>
Bereich einfügen:
<rule family="ipv4">
<source address="172.16.0.0/12"/>
<accept/>
</rule>
Anschliessend mit systemctl restart firewalld
die Firewall neu starten. Fertig!
Der Vorteil dieser Lösung:
Man muss in der Konfiguration der Container nicht mehr unbedingt die internen IP Names der Container Struktur eintragen, sondern kann auch über die externen Gateways des Hosts gehen.
Share on Twitter Share on Facebook
Comments
There are currently no comments
New Comment