Konfigurations- og hemmelighåndtering med Consul-skabelon på Kubernetes

Onur Yilmaz

Follow

23. mar, 2020 – 6 min read

Som platformsteam hos Trendyol Tech var et af vores mål at gøre applikationskonfiguration og hemmelig styring dynamisk, pålidelig, sikker og være abstraheret væk fra applikationer. Vi har brugt Kubernetes ConfigMaps og Secrets i lang tid, og de opfylder ikke helt vores krav. For eksempel; når vi ændrer en konfiguration på et ConfigMap, skal vi genstarte vores applikationspods for at ændringen kan træde i kraft. Nogle gange tager det flere minutter, før ændringen er afspejlet på alle applikationsinstanser. Et andet problem er, at Kubernetes-hemmeligheder ikke er sikre nok. Vi har brug for, at vores hemmeligheder er sikre og kan revideres.

Vores hovedkrav var;

  • Vi skal kunne ændre applikationskonfigurationer dynamisk uden at genstarte applikationsprocesser. Når vi ændrer en konfiguration, skal det påvirke alle applikationsinstanser øjeblikkeligt.
  • Vores applikationshemmeligheder skal være sikre og kunne revideres. Vi ønsker også at give rollebaseret adgangskontrol til hemmeligheder.
  • Vi har brug for at abstrahere konfigurationsstyring fra applikationer. Med andre ord skal programmerne ikke vide, hvor og hvordan hemmeligheder og konfigurationer opbevares og stilles til rådighed for dem.
  • Vores system til konfiguration og hemmelig forvaltning skal være højt tilgængeligt og skalerbart.

Efter en del research fandt vi frem til 2 programmer; envconsul og consul-template.

Vi vidste allerede, at Vault er industristandardværktøjet til opbevaring af hemmeligheder. Det opfylder alle vores krav og har funktioner som dynamiske hemmeligheder, hvilket kan være nyttigt for os i fremtiden. Du kan også bruge Consul som storage backend for Vault.

Consul er et distribueret, meget tilgængeligt og skalerbart værktøj til serviceopdagelse og konfiguration. I vores tilfælde vil vi kun bruge key-value store-funktionen i Consul til at opbevare ikke-hemmelige konfigurationer.

Vi kunne bruge envconsul eller consul-template primært til det tredje krav: at abstrahere konfigurationshåndtering fra applikationer.

Envconsul giver en måde at starte en underproces med miljøvariabler, der er udfyldt fra Consul og Vault.

Consul-template udfylder værdier fra Consul og Vault i filsystemet og holder værdierne synkroniseret, mens man arbejder i dæmontilstand.

En Tolv-faktor-app-regel er, gem konfigurationer i miljøet. Men problemet med Envconsul (eller miljøvariabler) er, at du ikke kan ændre en proces’ miljøvariabler uden at genstarte den. Dette går imod vores første krav. Vi ønsker at kunne ændre konfigurationer uden at genstarte applikationsprocesser. Derfor besluttede vi os for consul-template.

Basisarkitektur for applikationsproces og consul-template-dæmon, der kører sammen

I consul-template kan du bruge en skabelonfil til at gengive konfigurationsfiler. Dette giver os stor fleksibilitet. Her er en eksempelskabelonfil;

Consul-template læser denne skabelon, erstatter pladsholdere med værdier fra Consul, hvis du bruger nøgleordet “key”, og fra Vault, hvis du bruger nøgleordet “with secret”. Du kan få mere at vide om skabeloneringssprog her. Den renderede outputfil ville se således ud;

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

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.