Správa konfigurace a tajemství pomocí šablony Consul na Kubernetes

Onur Yilmaz

Sledovat

23. března, 2020 – 6 minut čtení

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.

Základní architektura aplikačního procesu a démona consul-template běžícího společně

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"

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.