Jako tým platformy v Trendyol Tech bylo jedním z našich cílů, aby správa konfigurace a tajemství aplikací byla dynamická, spolehlivá, bezpečná a byla abstrahována od aplikací. Konfigurační mapy a tajemství Kubernetes používáme již dlouho a naše požadavky zcela nesplňují. Například; když změníme konfiguraci v ConfigMap, musíme restartovat naše aplikační pody, aby se tato změna projevila. Někdy trvá i několik minut, než se změna projeví ve všech instancích aplikace. Dalším problémem je, že tajemství Kubernetes nejsou dostatečně bezpečná. Potřebujeme, aby naše tajemství byla bezpečná a auditovatelná.
Naše hlavní požadavky byly;
- Měli bychom být schopni dynamicky měnit konfigurace aplikací bez restartování aplikačních procesů. Když změníme konfiguraci, mělo by se to okamžitě projevit ve všech instancích aplikace.
- Naše aplikační tajemství musí být bezpečné a auditovatelné. Chceme také zajistit řízení přístupu k tajemstvím na základě rolí.
- Potřebujeme abstrahovat správu konfigurace od aplikací. Jinými slovy, aplikace by neměly vědět, kde a jak jsou pro ně uchovávány a poskytovány tajemství a konfigurace.
- Náš systém správy konfigurací a tajemství musí být vysoce dostupný a škálovatelný.
Po určitém výzkumu jsme přišli na 2 aplikace: envconsul a consul-template.
Již jsme věděli, že Vault je standardní nástroj pro ukládání tajemství. Splňuje všechny naše požadavky a má funkce jako dynamické tajemství, které by se nám v budoucnu mohly hodit. Jako backend úložiště pro Vault můžete použít také Consul.
Consul je distribuovaný, vysoce dostupný a škálovatelný nástroj pro zjišťování a konfiguraci služeb. V našem případě budeme pro uchovávání netajných konfigurací používat pouze funkci úložiště klíč-hodnota systému Consul.
Mohli bychom použít envconsul nebo consul-template hlavně pro 3. požadavek: abstrahování správy konfigurace od aplikací.
Envconsul poskytuje způsob, jak spustit podproces s proměnnými prostředí naplněnými z Consulu a Vaultu.
Consul-template naplňuje hodnoty z Consulu a Vaultu do souborového systému a udržuje hodnoty synchronizované při práci v režimu démona.
Dvanáctifaktorovým pravidlem aplikace je, ukládat konfigurace do prostředí. Problém s Envconsul (nebo proměnnými prostředí) však spočívá v tom, že proměnné prostředí procesu nemůžete změnit, aniž byste jej restartovali. To je v rozporu s naším prvním požadavkem. Chceme mít možnost měnit konfigurace bez restartování procesů aplikace. Proto jsme se rozhodli pro consul-template.
V consul-template můžete použít soubor šablony pro vykreslení konfiguračních souborů. To nám dává velkou flexibilitu. Zde je ukázkový soubor šablony;
Consul-template načte tuto šablonu, nahradí zástupné symboly hodnotami z Consulu, pokud použijete klíčové slovo „key“, a z Trezoru, pokud použijete klíčové slovo „with secret“. Více informací o šablonovacím jazyce najdete zde. Vykreslený výstupní soubor by vypadal takto;
server:
port: "8080"
toggles:
fooEnabled: true
database:
username: "username"
password: "password"