• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    ALMADDocker a kontejnery
    Docker aneb přístupný provoz kontejnerizovaných aplikací
    Docker(Hub), Compose, Swarm, boot2docker, DevOps, LXC, ECS, TumTum a jiné buzzwordy
    Bezpečnost v prostředí kontejnerů
    Related: automatizace [ Centralizovaná správa stanic a ostatních prvků v síti konfigurace/inventarizace/instalace/aktualizace/zalohovani ]
    rozbalit záhlaví
    MLEKAR_STEIN
    MLEKAR_STEIN --- ---
    SPACEANGEL:
    jak pise MARTEN, extra hosts...

    mam to v praci, protoze je pozadavek mit db "na železe" aby byla db "stejně jako na produkci".

    v compose to je pro
    services:
        servicename:
            extra_hosts:
                - "jmenoserveru:10.20.30.40"
            hromadadlasichparametru....
    

    pro samotny docker parametr:
    --add-host [Hostname]:[IPAddress]
    
    MARTEN
    MARTEN --- ---
    SPACEANGEL: moznosti by bylo vic. docke ma virtualni sitovku, lze se tedy pripojovat pres ip hosta (v configu daemona), nebo pridat additional hosts a delat to pak pres name.
    pripadne by mohlo jit zmenit network na host.
    nebo asi skoro nejlepe rozbehnout mysql taky v dockeru. kdyz uz v nem bezi zbytek, pro neco mit mimo nej.
    SH_PANDA
    SH_PANDA --- ---
    SPACEANGEL: asi mam lepsi google fu. Nezkousel jsem, ale tohle vypada jako to co hledas https://forums.docker.com/t/accessing-host-machine-from-within-docker-container/14248
    SPACEANGEL
    SPACEANGEL --- ---
    ahoj, debilni dotaz, ale je mozny nejakej port v kontejneru presmerovat ven na hosta (proste obracene)?

    Konkretni situace: na hostitelskem pocitaci bezi mysql, a nekolik kontejneru s php. A me jde o to, aby skripty v tom kontejneru proste se pripojovali na localhost:1234 (cislo portu libivolne) a to bylo protunelovany na 3306 na tom hostilteskem.

    Jo, zkousel jsem googlit, ale moc jsem toho nevygooglil a jsem z toho takovej nemoudrej :)
    MISO
    MISO --- ---
    JON: ahoj, je to skutocne tak, jak vravis, vlastnik musi byt nastaveny na root:root. Skusal som i ine distra, tam sa to chovalo rovnako, tzn. nefungovalo. Dakujem tebe i ostatnym za vas cas.

    Riesenie pre docker compose je vlastny Dockerfile, kde sa spravne nastavia permissions.
    
    FROM alpine:latest
    COPY --chown=root:root ../etc/crontabs/root /etc/crontabs
    ENTRYPOINT crond -f -L /var/log/crond.log
    
    JON
    JON --- ---
    MISO:
    tl;dr; zkontrolovat ls -la /etc/crontabs/root uvnitr kontejneru, jestli patri rootovi a jestli ma prava 644

    Jak jsem si s tim hral:

    dovolil jsem si zmenit command v docker-compose na
    command: crond -f -d0
    abych pro cronlog nemusel lezt do kontejneru a logovalo to vic

    takhle vypadaj crontabs v cistym alpinu
    
    / # ls -la /etc/crontabs/root 
    -rw-------    1 root     root           318 Nov  5 21:58 /etc/crontabs/root
    


    takhle vypada obsah crontabu s namountovanym volume z docker-compose.yml (pote co jsem souboru ./etc/crontabs/root na host machine zmenil opravneni na 644 - na to je cron haklivej)
    
    / # ls -la /etc/crontabs/root
    -rw-r--r--    1 1000     1000            41 Nov  5 22:03 /etc/crontabs/root
    

    takze problem bude v tom, ze se do kontejneru neprevedl majitel souboru jako root, takze ho cron vyignoruje

    Kdyz jsem pak uvnitr kontejneru smazal /etc/crontabs/root a vytvoril si novej s tvym obsahem, tak zapisuje.
    Kdyz jsem na host machine chownul ./etc/crontabs/root na root a pak spustil docker-compose up, tak to zapisovalo.
    Kdyz jsem chownul v kontejneru /etc/crontabs/root na root pred prvnim wakeupem cronu, tak to zapisovalo.
    ALE! Kdyz jsem chownul v kontejneru /etc/crontabs/root na root az po prvnim wakupu cronu, tak uz si ho pamatoval jako vyignorovanej a nic neprobehlo. To je ale zdokumentovana vlastnost (nekterych) cronu.
    MISO
    MISO --- ---
    JON, MARTEN: cron bezi pod rootom, aj to echo som uz skusal :-/ skuste si to spustit, skutocne by mali stacit tie 2 subory. Subor z /etc/crontabs/root sa nalinkuje do /var/spool/cron, crontab -l vypise spravne nastavenie, len to proste neseje :)

    # ps aux
    PID   USER     TIME  COMMAND
        1 root      0:00 crond -f -L /var/log/crond.log
        6 root      0:00 sh
       18 root      0:00 ps aux
    
    MARTEN
    MARTEN --- ---
    v base containerech zadny cron vetsinou nebezi. takze bych kouknul, jestli tam je, dost bych se divil
    JON
    JON --- ---
    MISO: zkusil bych misto nejakyho commandu jen echo "prdel" >> /date.txt
    a problem muze byt v tom, ze cron nebude mit prava zapisu skoro nikam. Tak bych to daval do /pokus/date,txt a pripadne tomu /pokus menil prava.
    MISO
    MISO --- ---
    DANIELSOFT: diky za tip, bohuzial to nepomohlo :-/ skor asi nahradim distro alpine za nieco ine

    
    / # crontab -l
    * * * * * /bin/date >> /date.txt
    
    DANIELSOFT
    DANIELSOFT --- ---
    DANIELSOFT: u cronu to někdy tak je, že nemá "dobře" nasetované některé proměnné prostředí, důvod jsem teď línej hledat (bezpečnost?)
    DANIELSOFT
    DANIELSOFT --- ---
    MISO: možná date není v $PATH - co dát plnou cestu, např. /bin/date >> /foo.txt
    MISO
    MISO --- ---
    Ahoj, prosim o nakopnutie. Kde robim chybu? Spustim docker-compose up, kontajner sa spusti, z /var/log/crond.log i ps aux je zrejme, ze crond bezi, akurat /foo.txt sa vobec nevytvori. Vopred dakujem za vas cas.

    docker-compose.yml
    version: '2'
    
    services:
    
      cron:
          image: alpine:latest
          volumes:
              - ./etc/crontabs:/etc/crontabs
          command: crond -f -L /var/log/crond.log
    


    /etc/crontabs/root
    
    * * * * * date >> /foo.txt
    
    RUDOLF
    RUDOLF --- ---
    ADM: jo srry, nezareagoval. Pak jsem si ráno uvědomil, že s RUN service crond start v Dockerfile není řešení;-) Tak jak říkáš to udělám. Prostě použiji ten postgres jako s image s vlastním CMD nebo entrypointem a tu zálehu provede.
    ADM
    ADM --- ---
    RUDOLF: proto jsem se ptal jak spoustis v postresi imagi ten crond, protoze na to musis prece ten entrypoint nejak upravit ...
    jinak my cron resili tak, ze byla jedna image (byla tam nejaka php aplikace, doinstaloval se cron, na entrypoint se nesahalo) a spustili jsme ze stejne image 2 sluzby, v docker compose nebo kubernetes je mozny externe predefinovat entrypoint, takze to php se spustilo normalne s default entrypointem z image a pro cron se jako entrypoint dalo spusteni crond
    RUDOLF
    RUDOLF --- ---
    Nevím kam s tím, nejdřív jsem přemýšlel o cloud auditku ale nakonec sem.

    Řeším, že bych rád použil AWS Fargate pro streamování z S3. Ale ještě jsem si to neošahal.

    Hlavní trabl je, že necheme použít ALB ani jiný druh load balancingu, kvůli pricingu (půjde tím tuna GB)

    Požadavek je:
    - zákoš dostane https spojení s friendly hostname (naše.doména.com)

    friendly hostname bych pořešil propagací fargate init/terminate eventu do SNS a lambda funkcí na úpravu route53.

    Ale nevím, jak naložit s TLS. Naše obyklá kombinace na serverech je nginx-proxy+nginx-proxy-companion. Ale teď bych musel řešit Let's encrypt per task a mít tak v kontejneru ještě paralelní let's encrypt, což vypadá na tunu trablů.
    RUDOLF
    RUDOLF --- ---
    ADM: jj, ale na ten entrypoint jsem nechtěl šahat.. Aby kdyby se změnil v uprestreamu, nemusel jsem ho u sebe pokaždé měnit..
    ADM
    ADM --- ---
    cron cte taky /etc/environment (bud ten z debianu nebo apline, uz nevim), takze se da udelat na zacatku entrypointu printenv do toho souboru
    HVJ3R
    HVJ3R --- ---
    RUDOLF: ale i klasickej cron ti skripty bude poustet s cistym envem. Ja si vzdycky zasourcuju soubor s promennejma pro cron pred behem.
    RUDOLF
    RUDOLF --- ---
    RUDOLF: aha, ale iniciační skripty postgres nepustí, pokud není data dir prazdnz;-) .. takže prostě udělám vedlejší side kontejner, co to bude řešit a basta.. tak brou..
    RUDOLF
    RUDOLF --- ---
    RUDOLF: asi je čas jít spát, vůbec mi nedošlo že RUN service cron start mi cron nenastartuje;-) Ale postgres má nějaké inciační skripty, takže to bude v cajku;-) ale radši se na to vyspát..

    srry za samomluvu..
    RUDOLF
    RUDOLF --- ---
    RUDOLF: jo, fachá to.. udělat jsem ze secret shell script, kterej mi vyexportuje prostředí pro cron..

    zase trochu trablík, jak jsou ty secrets immutable.. od compose 3.5 je větší flexibility v pojmenování secrets.. tak asi napíšu něco na porovní hashe secretu a přidám to do pipeline..
    RUDOLF
    RUDOLF --- ---
    ADM: jo v tom image běží postgres + cron

    not good, not bad;-)
    Kliknutím sem můžete změnit nastavení reklam