Konfiguráció és titokkezelés a Consul sablon segítségével Kubernetes-en

Onur Yilmaz

Follow

márc. 23, 2020 – 6 min read

A Trendyol Tech platform csapataként az egyik célunk az volt, hogy az alkalmazások konfigurációja és titokkezelése dinamikus, megbízható, biztonságos és az alkalmazásoktól elvont legyen. Hosszú ideje használjuk a Kubernetes ConfigMaps-t és Secrets-t, de ezek nem elégítik ki teljesen az igényeinket. Például; amikor megváltoztatunk egy konfigurációt egy ConfigMap-en, újra kell indítanunk az alkalmazás podjainkat, hogy a módosítás hatályba lépjen. Néha több percbe is beletelik, mire a módosítás az összes alkalmazáspéldányon megjelenik. Egy másik probléma, hogy a Kubernetes titkai nem elég biztonságosak. A titkainknak biztonságosnak és ellenőrizhetőnek kell lenniük.

A fő követelményeink a következők voltak;

  • Az alkalmazások konfigurációit dinamikusan kell tudnunk módosítani az alkalmazásfolyamatok újraindítása nélkül. Ha megváltoztatunk egy konfigurációt, annak azonnal ki kell hatnia az összes alkalmazáspéldányra.
  • Az alkalmazástitkainknak biztonságosnak és ellenőrizhetőnek kell lenniük. Szerepalapú hozzáférés-szabályozást is szeretnénk biztosítani a titkokhoz.
  • A konfigurációkezelést el kell vonnunk az alkalmazásoktól. Más szóval az alkalmazásoknak nem szabad tudniuk, hogy hol és hogyan tárolják és biztosítják számukra a titkokat és konfigurációkat.
  • A konfiguráció- és titokkezelő rendszerünknek magas rendelkezésre állásúnak és skálázhatónak kell lennie.

Egy kis kutatás után 2 alkalmazással álltunk elő; envconsul és consul-template.

Azt már tudtuk, hogy a Vault a titkok tárolásának ipari szabványos eszköze. Minden követelményünket kielégíti, és olyan funkciókkal rendelkezik, mint a dinamikus titkok, ami a jövőben hasznos lehet számunkra. A Consul-t is használhatjuk a Vault tárolási háttértáraként.

A Consul egy elosztott, nagy rendelkezésre állású és skálázható eszköz a szolgáltatások felderítésére és konfigurálására. A mi esetünkben csak a Consul kulcs-érték tároló funkcióját fogjuk használni a nem titkos konfigurációk tárolására.

Az envconsult vagy a consul-template-t elsősorban a 3. követelményre használhatjuk: a konfigurációkezelés absztrahálására az alkalmazásoktól.

Az envconsul lehetőséget biztosít egy alfolyamat indítására a Consulból és a Vaultból feltöltött környezeti változókkal.

A consul-template a Consulból és a Vaultból feltölti az értékeket a fájlrendszerbe, és szinkronban tartja az értékeket, miközben démon üzemmódban dolgozik.

A tizenkét faktoros alkalmazás szabálya, hogy a konfigurációkat a környezetben tároljuk. Az Envconsul (vagy a környezeti változókkal) azonban az a probléma, hogy egy folyamat környezeti változóit nem lehet megváltoztatni anélkül, hogy újra ne indítanánk. Ez ellenkezik az első követelményünkkel. Azt akarjuk, hogy a konfigurációkat az alkalmazásfolyamatok újraindítása nélkül tudjuk megváltoztatni. Ezért döntöttünk a consul-template mellett.

Az alkalmazási folyamat és a consul-template démon együtt futó alaparchitektúrája

A consul-template-ben egy template fájlt használhatunk a konfigurációs fájlok megjelenítéséhez. Ez nagy rugalmasságot biztosít számunkra. Íme egy minta sablonfájl;

A consul-template beolvassa ezt a sablont, a “key” kulcsszó használata esetén a Consulból, a “with secret” kulcsszó használata esetén pedig a Vaultból származó értékekkel helyettesíti a helyőrzőket. A sablonnyelvről bővebben itt olvashat. A renderelt kimeneti fájl így nézne ki;

server:
port: "8080"
toggles:
fooEnabled: true
database:
username: "username"
password: "password"

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.