• ú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í
    RUDOLF
    RUDOLF --- ---
    RUDOLF: nakonec to bylo easy

    for task in $(docker stack services -q web); do docker service update $task; done
    RUDOLF
    RUDOLF --- ---
    každopádně.. docker stack deploy má jednu vtipnou vlastnost, pokud jsem teda něco nepřehlédl: nezajistí, že deploynutá služba skutečně běží..

    je nějaká možnost jak elegantně zkontrolovat, že daná služba běží? Procházel jsem API, ale nic mě netrklo.

    Můžu například kontrolovat jesli neběží něco v replicas 0/1. Nebo inspected projít všechny služby ve stacku, jestli mají UpdateStatus.state na paused. Ale to se mi to zdá všecko takové čudné..

    Když použiji docker service create/update, tak mi services vrátí exit code 1, když tasky v services nenaběhnou.. Žel stack deploy nemá žádný attach mode. Takže při deploymentu, pokud nezkontroluji že nějaký task nevysí, tak vím prd.. Ještě horší situace když nastavím rollback, tak ani pořádně nevím, že služba byla failed. Služba prostě běží v předchozí verzi.
    RUDOLF
    RUDOLF --- ---
    RUDOLF: už jsem dávno pořešil, tak jen zpětně: řešení je v Launch configuration pro daný node připravil skript, který metadata zapíše do prostředí.
    RUDOLF
    RUDOLF --- ---
    Zdar! Opět docker swarm na aws, už se s tím docela zžívám ale na tomhle si furt lámu zuby.

    Deployuju přes docker stack deploy compose3.4.yaml a potřeboval bych, abych consul propagoval veřejnou IP danýho node. Use case je, že consul servery a spoustu další havěti žije mimo AWS a consul propaguje ven interní IP. Takže nody na AWS se spojej, zbytek ne.

    Možnosti jsou:
    a.) Otvírát vnitřní IP se mi nezdá jako dobrý řešení (ani nevím, jestli by mi to AWS dovolilo).

    b.) Asi by nejsprávnější cesta by byla, udělat si ve swarm vlastní consul DC a na jednom manager node udělat vlastní server, takže na jedné adresy si povídat s nody ve swarm a po druhé adrese s nody mimo swar -- ale to bych si nechal na jindy.

    No a mě by stačilo:
    Mám už pořešený, že nody v docker swarm propagují consul porty mimo ingress a sami za sebe. Jen bych jim potřeboval definovat veřejnou IP. Defakto jen advertise_addr=$(curl http://169.254.169.254/latest/meta-data/public-ipv4) per node. Ale nějak vůbec netuším jak na to. V v compose/service command to definovat nejde, nebo jsem nepochopil jak, na $(command) mi to vrátí že mám použít $$(command) - ale k expanzi na konečném nodu vůbec nedojde, mám pocit, že ta expanze navíc probíhá na mém hostu, z kterýho pouštím docker stack deploy.. Tj. nejsem schopen vytvořit service tak, abych použila tamní prostředí. Asi jsem něco přehlédl.

    Pak jsme si všiml konstrukce přes config:
    kde někdo používá: "advertise_addr" : {{ GetInterfaceIP "eth2" }}, -- ale to mi nějak neklaplo..
    RUDOLF
    RUDOLF --- ---
    RUDOLF: tak moje idiocie - ofiko přístup:

    $ ssh -i <path-to-ssh-key> -NL localhost:2374:/var/run/docker.sock docker@<ssh-host> &
    $ docker -H localhost:2374 info
    ADMIX
    ADMIX --- ---
    RUDOLF: No, koukam do jejich dokumentace a uprimne mi pripada divny, ze sekce "Deploy your app" neobsahuje jinej postup nez prave ssh do ty remote instance, bych cekal ze takovej deployment exposne nejaky API ... Sorry, nepomuzu :D
    RUDOLF
    RUDOLF --- ---
    ADMIX: TLS -- Aspoň tipuju, Docker for AWS je Cloudformation template od Dockeru co používá vlastní distro. Ale není k tomu moc dokumentace a není mi jasný, jaký klíče ta manager instance použila. Ale nechci ji předkládat svoji - rád bych fungoval, aby to jelo default.
    ADMIX
    ADMIX --- ---
    RUDOLF: Jak presne to mas zabezpeceny, resp. jakou authentication potrebujes? Tohle? https://docs.docker.com/engine/security/https/#secure-by-default

    Co jsem zbezne kouknul do dokumentace SDK, tak tam zadnej login na socket samotnej neni, takze predpokladam ze to API je pak akorat o certifikatu?
    RUDOLF
    RUDOLF --- ---
    RUDOLF: ale i to api běží vůči socket nebo https -- a mě furt neklape ta autentifikace..
    RUDOLF
    RUDOLF --- ---
    ADMIX: ale jo, docker remote api je vončo
    RUDOLF
    RUDOLF --- ---
    ADMIX: teď jsem na to zběžně juknul a jestli jsem to správně pochopil, tak swarm API k tomu primárně neslouží. Možná to jde, ale netváří se to jako standardní cesta. Ale na týhle úrovni si s tím hraju poprvé. Jinak ten docker-for-aws/swarm zatím působí příjemně, kdybych měl jenkinse na aws, tak by to asi šlapalo jak po drátkách.
    ADMIX
    ADMIX --- ---
    RUDOLF: S dockerem jsem se tak daleko nedostal, ale nema to nahodou nejaky API do kteryho bys ten deployment poslal?
    RUDOLF
    RUDOLF --- ---
    jedete někdo v docker for aws?

    Potřeboval bych z jenkinsu co běží mimo cílový swarm, poslat deploy do swarmu.

    Napadá mě:
    a.) připojit docker co běží na tom jenkins serveru přes join-token do swarmu jako manager, tj. jenkins by mohlo posílat joby přímo do swarmu

    b.) připojit docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2376 version (ta version se mi nezdá), nebo to vložit do env. prostě dělat docker service update --image -- ale nějak jsem zmatený, jaký klíče ten docker manager vlastně použil.. takže je neumím vytvořit: https://docs.docker.com/engine/security/https/

    c.) nejšíleněnšjí mi přide ssh na daný management stroj a tam prostě docker service update --image pustit lokálně..

    díky
    MARASAN
    MARASAN --- ---
    mam problem s LXC na Debian Stretch, pri lxc-create mi na serveru vzdycky skonci kvuli GPG overeni image:
    $ lxc-create -n testerka -t download
    Setting up the GPG keyring
    ERROR: Unable to fetch GPG key from keyserver.
    lxc-create: lxccontainer.c: create_run_template: 1297 container creation template for testerka failed
    lxc-create: tools/lxc_create.c: main: 318 Error creating container testerka

    Pridam-li parametr --no-validate, vsechno probehne ok. Nez jsem zacal konfigurovat server, rozjel jsem si LXC doma ve virtualu taky na Debian Stretch ve VirtualBoxu, kde mi lxc-create chodi bez problemu. Cili pokud pristupuje na stejny key-server (predpokladam, ze ano), tak nekde bude problem, ale absoilutne nemam tucha kde a v cem. Virtual doma je za NATem od UPC a dalsim NATem myho routeru a dalsim NATem pro VirtualBox, server je primo v siti s pevnou IP.

    Firewall je off, resp. je tam nejaky nastaveni pro lxc-net (asi dnsmasq):
    # iptables -L -v -n
    Chain INPUT (policy ACCEPT 15505 packets, 34M bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 ACCEPT     tcp  --  lxcbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
        0     0 ACCEPT     udp  --  lxcbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
        0     0 ACCEPT     tcp  --  lxcbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
        0     0 ACCEPT     udp  --  lxcbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 ACCEPT     all  --  *      lxcbr0  0.0.0.0/0            0.0.0.0/0           
        0     0 ACCEPT     all  --  lxcbr0 *       0.0.0.0/0            0.0.0.0/0           
    
    Chain OUTPUT (policy ACCEPT 10847 packets, 6737K bytes)
     pkts bytes target     prot opt in     out     source               destination         
    



    Popravde jsem fakt zmatenej, nic jinyho nez uvedeny --no-validate se mi vygooglit nepodarilo. Nenapada vas neco?
    ADMIX
    ADMIX --- ---
    ADM: To je jednoduchej bind mount, abys moh pustit vedle svy aplikace nakej filebeat nebo podobne - Nomad jako takovej nejaky sofistikovany logovani neresi (umyslne).
    Ale tusim ze to ted v poslednich verzich umi ty logy premigrovat, pokud treba drainujes ten node - nejsem si jistej :)
    ADM
    ADM --- ---
    ADMIX: nj, ale jak pak nomad resi kdyz to bezi na ruznych nodech (za loadbalancerem)?
    ADMIX
    ADMIX --- ---
    ADM: Uf, nemam ted kam se podivat, ale pokud se nepletu, tak nomad si pro kazdej taskgroup vytvori adresar na hostovi pod --data-dir, a ten pak bindem mountuje dovnitr tech rkt kontejneru jako rw volumes.
    ADM
    ADM --- ---
    ADMIX: kdyz uz zminujes ten nomad, tak ty sdileny adresare jsou nejaky glusterfs, nebo jak tam maji tohle vyreseny? me cekaji ty logy vyresit na openshiftu (kubernetes), ale jeste jsem se tak daleko nedostal, zatim me nenapada jak to pak centralne sjenotit pokud repliky stejneho service loguji do stejnyho filename

    opet me prekvapil docker, ze neni mozne z parent image zbavit se EXPOSE, ENTRYPOINT apod., ale porad nechapu odkud to z te vysledne image vycte, vzdyt to musi byt ulozeny nekde uvnitr prece
    BEZDA
    BEZDA --- ---
    Zkousel nekdo neprivilegovany LXC kontejner a host networking? Nejsem si jistej jestli to vubec jde, pada mi to a dokumentace je skoupa, tak jen jestli nahodou nekdo netestoval
    ADMIX
    ADMIX --- ---
    DWICH: Nevim jak to ma kubernetes (nebo jakou orchestraci pouzivas), ale Nomad ma koncept taskgroups, kde vsechny tasky v jedny grupe maji namapovanej sdilenej adresar, kterej se da pouzit prave na ten socket.
    Typickej usecase pro to je logshipper - nechas hlavni task logovat do toho sdilenyho adresare, a logshipper task z nej sosa, posila upstream a rotuje.

    Jinak vic procesu v kontejneru tragedie neni, IMHO je to hlavne o tom udrzet si nejakej rozumnej deployment (aby clovek nedelal application container, ve kterym mu pojede celej jeho predchozi monolith :D )
    Kliknutím sem můžete změnit nastavení reklam