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.
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"