Na bun, înainte să mă apuc de experimente direct în docker-ul din Prod, mi-am tras un Raspi pe post de Dev acasă, cu raspbian buster, docker și portainer, și hai să vedem ce și cum.
Obiectiv: să rulez pe un Raspi containere care să aibă porturi ce se suprapun și pe care nu le pot modifica fiindcă altfel nu mai merge treaba. Case in point - UniFi Controller-ul care trebuie să aibă niște porturi accesibile fiindcă așa le caută echipamentele din rețea, și OpenHAB care și ăla vrea o parte din aceleași porturi fiindcă alea le caută aplicația OpenHAB de pe mobil.
Varianta 1: să adaug interfețe virtuale de rețea, cu IP-uri diferite, în ideea că fac binding la un container la un IP și la alt container la alt IP. După îndelungi căutări, am aflat că metoda găsită peste tot pe net de modificat un fișier interfaces este deprecated în Buster și va fi scoasă în viitor, deci iar e netul plin de gunoi expirat și nici măcar nu specifică „acest tutorial se aplică la X”. Am dibuit soluția folosind comanda ip, cu care pot adăuga din mers adrese IP noi la o interfață de rețea existentă, iar ca să fie persistentă treaba trebuie doar să pun comanda în scripturile de startup (de fapt cel mai simplu e în dhcpcd care caută asemenea scripturi și le execută).
Problemă - docker se pare că e tâmpit și, deși își definește 3 rețele virtuale proprii, cea intitulată „host” se conectează la TOATE adresele IP disponibile (public). Dacă încerc să definesc o anumită adresă IP la un container când îi specific porturile de rețea, face scandal cum că opțiunea nu e disponibilă pentru rețeaua host ci doar pentru custom networks.
Mbeneeeee... Sap să înțeleg custom networks, doesn't help. Alea-s un fel de rețele private pentru ca mai multe containere conectate la o rețea custom să poată comunica între ele pe bază de IP SAU hostname (că în mod normal nu face IP lookup dacă specifici hostname), da' pentru conectat o asemenea rețea la o anumită adresă IP a interfeței de rețea, ciuciu.
Deci varianta 2: rămânem la o singură adresă IP, pe care voi expune pe rețeaua host un container cu reverse proxy (probabil traefik), și care apoi să se conecteze la containerele din backend pe o rețea internă. Sucks că va face networking virtual în software de-a pixu' dar dacă altfel nu se poate, cu fericire înainte. Acuma tot ce-mi mai trebuie e un tutorial beton despre configurat traefik.
Dilema rămâne - dacă io n-am server DNS propriu-zis în rețeaua locală, de unde știe un calculator să rezolve „subdomenii” diferite pentru același nume de gazdă? Gen unifi.raspberrypi sau openhab.raspberrypi . Afaik dacă vede vreun punct acolo, întreabă DNS-ul în loc să facă lookup în rețea, și DNS-ul va zice că nu știe ce-i aia că nu e FQDN. Parcă văd acuma că trebuie să îmi rulez și propriul DNS.
Obiectiv: să rulez pe un Raspi containere care să aibă porturi ce se suprapun și pe care nu le pot modifica fiindcă altfel nu mai merge treaba. Case in point - UniFi Controller-ul care trebuie să aibă niște porturi accesibile fiindcă așa le caută echipamentele din rețea, și OpenHAB care și ăla vrea o parte din aceleași porturi fiindcă alea le caută aplicația OpenHAB de pe mobil.
Varianta 1: să adaug interfețe virtuale de rețea, cu IP-uri diferite, în ideea că fac binding la un container la un IP și la alt container la alt IP. După îndelungi căutări, am aflat că metoda găsită peste tot pe net de modificat un fișier interfaces este deprecated în Buster și va fi scoasă în viitor, deci iar e netul plin de gunoi expirat și nici măcar nu specifică „acest tutorial se aplică la X”. Am dibuit soluția folosind comanda ip, cu care pot adăuga din mers adrese IP noi la o interfață de rețea existentă, iar ca să fie persistentă treaba trebuie doar să pun comanda în scripturile de startup (de fapt cel mai simplu e în dhcpcd care caută asemenea scripturi și le execută).
Problemă - docker se pare că e tâmpit și, deși își definește 3 rețele virtuale proprii, cea intitulată „host” se conectează la TOATE adresele IP disponibile (public). Dacă încerc să definesc o anumită adresă IP la un container când îi specific porturile de rețea, face scandal cum că opțiunea nu e disponibilă pentru rețeaua host ci doar pentru custom networks.
Mbeneeeee... Sap să înțeleg custom networks, doesn't help. Alea-s un fel de rețele private pentru ca mai multe containere conectate la o rețea custom să poată comunica între ele pe bază de IP SAU hostname (că în mod normal nu face IP lookup dacă specifici hostname), da' pentru conectat o asemenea rețea la o anumită adresă IP a interfeței de rețea, ciuciu.
Deci varianta 2: rămânem la o singură adresă IP, pe care voi expune pe rețeaua host un container cu reverse proxy (probabil traefik), și care apoi să se conecteze la containerele din backend pe o rețea internă. Sucks că va face networking virtual în software de-a pixu' dar dacă altfel nu se poate, cu fericire înainte. Acuma tot ce-mi mai trebuie e un tutorial beton despre configurat traefik.
Dilema rămâne - dacă io n-am server DNS propriu-zis în rețeaua locală, de unde știe un calculator să rezolve „subdomenii” diferite pentru același nume de gazdă? Gen unifi.raspberrypi sau openhab.raspberrypi . Afaik dacă vede vreun punct acolo, întreabă DNS-ul în loc să facă lookup în rețea, și DNS-ul va zice că nu știe ce-i aia că nu e FQDN. Parcă văd acuma că trebuie să îmi rulez și propriul DNS.