Izolacja sieci Podman
Pracując z kontenerami uruchamianymi z pomocą Podmana czasami zachodzi potrzeba odizolowania możliwości komunikacji między nimi (np. kontener z reverse proxy ma przekierowywać ruch do aplikacji, ale ma nie mieć dostępu do bazy danych). Na szczęście korzystając z domyślnego sterownika (bridge network) to relatywnie proste - dla “dockerowców” jedyną przeszkodą będzie to, że działa to inaczej niż w Dockerze.
Domyślne sieci dockerowe są od siebie odizolowane. Podmanowe nie są - trzeba samodzielnie zadeklarować to poprzez isolate: true. Mając to ustawione wszystkie sieci z tą opcją tracą możliwość komunikacji z sobą (ale uwaga - domyślne sieci bez tej flagi wciąż mogą z nimi “gadać”), przy zachowaniu możliwości dostępu do “świata”.
Gdyby zaszła potrzeba kompletnie odizolowanej sieci z pomocą przychodzi opcja internal: true. Mając ją włączoną tracimy możliwość komunikacji z innymi sieciami.
Poniżej prosty plik compose umożliwiający pobawienie się tymi możliwościami:
name: pod-net-opts
services:
app1:
name: app1
image: jonlabelle/network-tools
command: tail -F anything
networks:
- app1-net
app2:
name: app2
image: jonlabelle/network-tools
command: tail -F anything
networks:
- app2-net
app3:
name: app3
image: jonlabelle/network-tools
command: tail -F anything
networks:
- app3-net
app4:
name: app4
image: jonlabelle/network-tools
command: tail -F anything
networks:
- app4-net
networks:
# can reach outside, can be reached
app1-net:
name: app1-net
driver: bridge
# can reach outside, can't be reached from other with isolate: true
# but watch out - regular bridged netw still can access it
# so app3 can't access app2 (and vice versa), but app1 can
app2-net:
name: app2-net
driver: bridge
driver_opts:
isolate: true
app3-net:
name: app3-net
driver: bridge
driver_opts:
isolate: true
# fully isolated, internal network
app4-net:
name: app4-net
internal: true
Te kontenery korzystają z obrazu, który ma podstawowe narzędzia sieciowe - wystarczy tylko uruchomić poprzez podman compose up, podpiąć się do terminala w kontenerze i spróbować np. ping-a :) .
Źródła:
https://docs.podman.io/en/v5.3.1/markdown/podman-network-create.1.html