Architektura appliance

IAM appliance je postavena na volně dostupném Linuxovém operačním systému CentOS. V tomto systému běží několik služeb instalovaných lokálně (administrační konzole, kontejnerový démon, monitoring, firewall, apod.) a pak kontejnerizované služby (CzechIdM, access manager CAS, LDAP, atd.).

Veškeré služby dostupné z appliance pro použití klienty jsou kontejnerizovány. Služby sloužící ke konfiguraci appliance samotné jsou na ní instalovány lokálně.

Základním způsobem distribuce software do appliance jsou RPM balíčky a Docker kontejnerové image.

Lokální služby

Služby lokálně instalované na appliance nejsou dostupné běžným uživatelům a klientským aplikacím.

Jde o služby sloužící ke správě a provoznímu monitoringu celého prostředí, jsou používány administrátory appliance - ale ne správci jednotlivých aplikací běžících v rámci appliance!

Jde o SSHd démona, Cockpit, provozní monitoring, systémy pro agregaci logů, Docker démona, firewall, apod.

Služby jsou instalované a konfigurované opět pomocí RPM balíčků. Tyto služby nejsou kontejnerizovány.

Kontejnerizované služby

Každá služba má svůj vlastní RPM balíček, pomocí nejž je instalována do systému. Názvy těchto balíčků začínají na iam-app-.

Obsahem RPM balíčku je zpravidla:

  1. Seznam lokálních adresářů na disku appliance, které jsou mountovány do Docker kontejneru s aplikací.

  2. Docker Compose YAML soubor s konfigurací konkrétní služby.

  3. Tajemství, certifikáty a obecně všechny informace, které jsou potřeba pro běh služby. Tyto informace nebývají pevnou součástí balíčku, ale generují se při jeho instalaci na dané prostředí. Tím je zajištěna unikátnost jednotlivých tajemství.

  4. Další soubory jako moduly, grafika, branding, apod. Na disku appliance jsou vždy chápány jako statické soubory a záleží na kontejnerové aplikaci, jak přesně je použije.

  5. Dodatečná konfigurace pro usazení služby do appliance - systemd unity, přesměrování a rotace logů, ap.

Cílem RPM balíčku je připravit pro kontejnerizovanou aplikaci vše potřebné, aby mohla běžet. Pokud například dva kontejnery potřebují stejné tajemství, RPM balíček při své instalaci zařídí přenos tajemství mezi konfiguracemi kontejnerů.

Balíček zajišťuje i regitraci konkrétního kontejneru jako služby do operačního systému. Služba je pak ovladatelná standardním způsobem přes systemctl.

Spuštění kontejnerizované služby

Po instalaci RPM balíčku je služba připravena ke startu. Některé služby může být před prvním startem potřeba dokonfigurovat, například kvůli hostnamům.

Nakonfigurovanou službu lze spustit příkazem systemctl start SLUŽBA. Po zavolání tohoto příkazu dojde k nasazení konkrétního docker-compose-SLUŽBA.yml konfiguračního souboru do Docker démona.

  1. Pokud není kontejnerový image lokálně dostupný, dojde automaticky k jeho stažení. Stažení image může trvat i několik minut.

  2. Když je image lokálně dostupný, dojde k instanciaci kontejneru a jeho spuštění. Doba spuštění služby závisí na aplikaci a její konkrétní konfiguraci a pohybuje se v řádu sekund až minut.

Provoz kontejnerizované služby

Pravidla a postupy pro provoz služby se řídí konkrétní službou.

Služba vs. kontejner vs. kontejnerový image

Tyto pojmy by se mohly zdát záměnné, ale není tomu tak. Seznam níže vystihuje základní rozdíly.

  • Kontejnerový image

    • Způsob distribuce software v IAM appliance.

    • Statický binární obraz, jeho instanciací (doplnění nastavení) vzniká kontejner.

    • Z jednoho image lze instanciovat více kontejnerů.

  • Kontejner

    • Instance image, ve kterém běží konkrétní aplikace (např. CzechIdM).

    • Kontejner lze kdykoliv smazat a vyrobit znovu z image. Veškerá perzistentní data kontejneru zůstávají na disku appliance a jsou do něj mountována.

    • Kontejner tvoří hlavní část služby, ale ne celou službu.

  • Služba

    • Je distribuována v rámci RPM balíčku.

    • Obsahuje referenci na kontejnerový image a další konfiguraci - tyto informace jsou použity při startu služby k instanciaci kontejneru.

    • Obsahuje další data - programové moduly, branding, atd. - které jsou předány kontejneru skrze mount.

    • Obsahuje další podpůrné konfigurace.

      • Přesměrování logů kontejneru na disk appliance.

      • Rotaci logů.

      • Naplánované úlohy (např. zálohy, pokud v kontejneru běží databáze).

      • Sdílené adresáře, pokud služba předává/očekává data od jiné služby.

Volitelné služby

Appliance umožňuje instalovat volitelné služby - konektor server, datové výměníky, atd. S těmito službami se pracuje stejně jako s ostatními kontejnerizovanými službami.

Volitelné služby nejsou v appliance nainstalovány od začátku, ale je možné si je doinstalovat přes RPM balíček. Po instalaci RPM balíčku už operační systém sleduje dostupné aktualizace balíčku svými standardními prostředky.

Volitelné služby mohou mít definované závislosti na verzi appliance nebo jejích komponent. Povinné služby appliance nikdy nemají závislost na volitelných službách.