DevUPs avagy botlásaim a konténerekkel

Bocs a szerkesztettségért, de wordpress-ben írtam eredetileg, de nem akaorm elárasztani a blogot IT tartalommal, most viszont gondolkozni szeretnék, meghallgatni másoktól miért gondolom rosszul, és természetesen tippeket, tapasztalatokat is várok.

 

Pár évvel ez előtt összehoztam egy kis reverse proxy-t. Sajnos egy weboldal fejlesztő nem értette a domain-ek és a tanúsítványok összefüggését.

Erről írtam is. Most egyik nap a linuxos cikkeimmel traktáltam a chatgpt-t és beszélgettünk, rájöttem, ideje foglalkozni ezzel a projekttel. Ha újrarakom és újra tervezem nem utolsó sorban olcsóbb is lesz, ha nem is sokkal, de vannak már a piacon érdekes kezdeményezések, és amit annak idején összeraktam, azt most már lehet akár konténerizáltam is.

 

Docker kényszer?

Számtalanszor meghallgattam már, másoktól, hogy kéne használni a konténerizáció technológiát (bár alapvetően mindegyik szolgáltatás, amihez így közünk van az VM szinten van izolálva, megfelelő helyre rakva, megfelelő tűzfalakkal védve.) Ez viszont most egy különálló eset, egy különálló, felhőben futtatott VM, más projekt, más scope, és ha még kicsi is, pakoljunk bele mindent.

Minden alatt, pedig minden olyat szeretnék (vagy szerettem volna) használni, amit gondoltam, hogy akarok. Az nginx mellett még HAPROXY, a hoston futó webszerver, de mindez akkor jól kihasználható, ha mondjuk vannak mindenféle connection és egyéb limitáló tényezők, és mondjuk egy jól definiált GEOIP alapú szabályozás is. Természetesen nem ennyire tiszta a kép az induláskor, de vannak bajok az érkezési oldalon is.

Network mode-ok

Az elsődleges flusztráció az volt, hogy a 81-es portot nem tudtam UFW-fel bezárni. (tudom, hátulgombolós probléma) Rövid olvasgatás és hosszas chatGPT után kiderült, hogy az UFW és a docker alapértelmezett bridge network nem barátok, de megoldottam. a 81-es port localhost-ra került, és így nekem elérhető marad kényelmesen SSH port forward-al, a funkció pedig megy(en). És akkor nézzük meg, hogy hogy lehet egy HAPROXY-t telepíteni, természetesen akkor már ez is konténerben.

HOL A CONFIG

Egyre jobban szeretem ezt a világot. Kapok egy szoftvert, amit akár fel is tehetnék a host-ra, ahogy eddig, és akkor szállítja a konfigját, itt viszont akkor most nincs konfigurációs fájlom. Nem baj, túlélem az eddigieknek megfelelően. A management felületet ráeresztettem a proxy managerre, és ez is megy. De egyre inkább az az érzésem, hogy sajtreszelővel rejszolok.

Mentés

chatgpt-vel projektet tolni az olyan, mintha melletted lenne egy alapvetően elfogadó Sheldon Cooper, aki ugyan mindenhez pozitívan áll hozzá, de véletlenül sem azt fogja mondani, ami előre viszi a projektet. Ő csak válaszol a kérdésedre, és ha véletlenül már hibázott, akkor ez a hiba csak többszöröződni fog. Mindenesetre meglett a mentő script, is, hurrá. 20-30 domain-t nem akarok egyesével belekrampácsolni a proxy-ba vissza. (Maga a felvétel is több óra volt a domain címek átírásával és élesztésével).

Hoszt szervízek

Most itt vagyok bajban. Hova rakjam és hogy érjem el a localhost-on futtató webszervert, ami alapfeltétele a nagiosnak, mert arra már nem vagyok hajlandó hogy ezt is bekonténerizáljam. Akármerre és megyek eddig is, nem vagyok róla meggyőződve, hogy a nagios belevaló ebbe a szép új világba. Túlságosan összetett, túlságosan szerteágazó ahhoz, hogy így leegyszerűsítsük.

Docker host vagy bridge network

Itt tartok most. Hova tegyem a reverse proxy-t. Vannak érvek a host és vannak érvek a bridge mellett is, bevallom én a host fele húzok. Egyszerűbbnek érzem a további szolgáltatások elérését (bár nem vagyok meggyűzűdve arról, hogy rendesen elérem-e a konténerizált funkciókat), a host tűzfala egyértelműen és egyszerűen kezelné a bejövő portokat, viszont a bridge network mellett van egy olyan érv, amivel nehezen tudok mit kezdeni, de vitatkozni is. A szeparáció. Mert ha megb@sszák a konténert, akkor könnyebb menni a hostra illetve a további szolgáltatásra, DE!

Akkor most nem bízhatom a konténerizált szervízben, vagy nem? Vagy alapvetően semmiben sem kellene bíznom, mert most már ZERO TRUST van, a szép új világ. De ha semmiben nem bízom, akkor miért bízzam a dockerben és a docker hálózatban, vagy akor mennyivel biztonságosabb/egyszerűbb/hatékonyabb ez a szolgáltatás csoport úgy, ahogy van a hostra telepített funkciók szempontjából? Mondjuk a proxy managert nem szeretném elengedni, mert kurva kényelmes, és ez az igazi baj.... .

Itt tartok most, és meg is álltam egy kicsit. Úgy érzem kell egy kis levegő ahhoz, hogy tovább menjek a gondolkodásban és a felismerésekben. Egyszerűen több információ és tapasztalat kell, és nem feltétlenül a chatGPT-től.

Hozzászólások

  1. nézegesd még ezt a "docker világot" mert úgy látom van még mit megérteni belőle. Rajzoltass a chatgpt-vel diagramokat, hátha segít. Mindenképpen megéri 100% megérteni mert ez adja a jó alapot a kuberneteshez.
  2. az xy szoftver a konténerében "default konfiggal fut és nincs konfig fileom": van rá parancs / paraméter amivel ezt a konfigot "ki lehet húzni" belőle és akkor már ki tudod rakni filerendszerbe, megszerkeszted és "visszamountolod" bele. Vagy van a konténernek doksija és akkor meg tudod nézni hogy környezeti változót elég-e beállítani - konténerek nagyon sokszor így paraméterezendőek
  3. docker networkinget tessék megérteni, az esetek 99.9%-ban felesleges a host network. Akkor szokott kelleni (és akkor se mindig) ha ilyen mDNS és/vagy UDP portot kell kifele adni hogy mondjuk az okostévé megtalálja a dockerizált médialejátszót.
  4. revproxy-t ne írjál, nézd meg ezt: https://hub.docker.com/r/jwilder/nginx-proxy - nem fogsz tudni jobbat csinálni

Még egy dolog: én a prod cuccaimat úgy futtatom hogy csinálok neki egy külön vm-et, abba docker és a docker-compose. Látszólag ez így sok de nagyon jól lehet automatizálni és a konzisztens mentése is így a legegyszerűbb. 

Nekem meg nem sikerult chatgpt-vel ertelmes abrat/diagramot csinalni. Kb. mind elvi hibas (foleg kapcoslasi rajzoknal). O

lyan van, hogy pontosan tudom mit kene rajzolni, en leskiccelem, feltoltom, es o felturbozza.

Van valami titok?

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

ja igen és a zero trust networkinget egyáltalán ne keverd ebbe bele, az egy teljesen más kávéház.

azt még bőven ráérsz megérteni, sok-sok leckével odébb van.

En a fenti problemakort ugy oldottam meg, hogy beraktam egy "traefik"-t ami egy sajat docker network-t hasznal.

A kulonbozo egyeb szerviceket amiket meg ki akarok ajanlani traefik-n keresztul, mind hozzacsapom a traefik network-hoz.

 

A szolgaltatasok amik meg dockeren kivul futnak siman elerhetoek traefik szamara, vagy FQDN hasznalataval, vagy ugy, hogy a docker compose file-ban (ezt hasznalom, mert igy konnyebb az eletem) az extra host alatt felveszek egy custom domain-t ami a host-gateway-re mutat.  Igy a host-n futo szervizt siman elerem  "gw" neven.

 

services:
  reverse-proxy:
	image: traefik:v3.6.1    
    ports:
      # The HTTP port
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.yml:/etc/traefik/traefik.yml
      - ./conf.d:/conf.d:rw
      - ./certs:/certs
      - ./logs:/logs
    networks:
      - shared
    restart: always
    extra_hosts:
      - gw:host-gateway  

networks:
  shared:
    external: true

Conf reszlet:
 

http:
  services:
    local-dotnet-test-api:
      loadBalancer:
        servers:
          - url: http://gw:5000

Support Slackware: https://paypal.me/volkerdi

én openresty szoktam, gyors mint a fene, egy csomó dolog benne van

 

a trafek nagyágyú

No rainbow, no sugar

pass docker hubról szedtem le,

 

van benne lua támogatás így a domainek, portok, kulcsok már a proxyn eldőlnek egy lua szkriptben bent meg minden 80:as porton muzsikál a belső hálón, ami piszok gyors 

 

mondjuk én nekem a podman docker compose up kombó jött be, ufw egyébként se javasolt docker alá mer nem véd

No rainbow, no sugar

Benne volt az eredeti felvetésben. Ha az alapértelmezett bridge módot használod és a docker-ben nem kapcsolod ki az iptables-t, akkor új chaint hoz létre magának, és ez az új chain nem illeszkedik az ufw struktúrájába.

Ez host módban egyébként nem igaz, az viszont a ne használd dolog.

Megoldásnak leginkább az tűnik, hogy a dockertől elvesszük az iptables-t és egy firewalld-vel szépen betűzfalattuk az egészet.

Ah, értem. Mondjuk ez ízlés kérdése azon meg nem érdemes vitatkozni.

  • docker host-ot sose teszek ki a netre direktben, csak revproxyval és/vagy tűzfallal
  • portot már a host felé expose-olni is csak amit feltétlenül muszáj, belül anélkül is elérik egymást a konténerek