7 doporučených postupů společnosti Google pro kontejnery

Poznámka. přel.: Autorem původního článku je Théo Chamley, Google Cloud Solutions Architect. V tomto příspěvku pro blog Google Cloud poskytuje shrnutí podrobnějšího průvodce své společnosti s názvem „Nejlepší postupy pro provoz kontejnerů" Experti Google v něm shromáždili osvědčené postupy pro provoz kontejnerů v kontextu používání Google Kubernetes Engine a dalších, které se dotýkají široké škály témat: od zabezpečení po monitorování a protokolování. Jaké jsou tedy podle Googlu nejdůležitější kontejnerové praktiky?

7 doporučených postupů společnosti Google pro kontejnery

Kubernetes Engine (Služba založená na Kubernetes pro spouštění kontejnerizovaných aplikací v Google Cloud – Cca. přel.) je jedním z nejlepších způsobů, jak spouštět úlohy, které je třeba škálovat. Kubernetes zajistí hladké fungování většiny aplikací, pokud jsou kontejnerovány. Pokud ale chcete, aby se vaše aplikace snadno spravovala a chcete naplno využívat Kubernetes, musíte dodržovat osvědčené postupy. Zjednoduší chod aplikace, její sledování a ladění a také zvýší bezpečnost.

V tomto článku si projdeme seznam věcí, které byste měli vědět a udělat pro efektivní provozování kontejnerů na Kubernetes. Ti, kteří chtějí jít hlouběji do detailů, by si měli materiál přečíst Nejlepší postupy pro provoz kontejnerů, a také věnovat pozornost našim dřívější příspěvek o montáži kontejnerů.

1. Používejte nativní mechanismy protokolování kontejnerů

Pokud aplikace běží na clusteru Kubernetes, není potřeba mnoho protokolů. Systém centralizovaného protokolování je pravděpodobně již zabudován do clusteru, který používáte. V případě použití Kubernetes Engine je to zodpovědné Protokolování Stackdriveru. (Poznámka. přel.: A pokud používáte vlastní instalaci Kubernetes, doporučujeme se blíže podívat na naše Open Source řešení - srub.) Udržujte svůj život jednoduchý a používejte nativní mechanismy protokolování kontejnerů. Zapisujte protokoly do stdout a stderr - budou automaticky přijaty, uloženy a indexovány.

Pokud chcete, můžete také zapisovat protokoly formát JSON. Tento přístup k nim usnadní přidávání metadat. A s nimi bude mít Stackdriver Logging možnost prohledávat protokoly pomocí těchto metadat.

2. Ujistěte se, že kontejnery jsou bezstavové a neměnné

Aby kontejnery správně fungovaly v clusteru Kubernetes, musí být bezstavové a neměnné. Jakmile jsou tyto podmínky splněny, může Kubernetes dělat svou práci, vytvářet a rušit entity aplikace, kdykoli a kdekoli to bude potřeba.

Bez státní příslušnosti znamená, že jakýkoli stav (trvalá data jakéhokoli druhu) jsou uloženy mimo kontejner. K tomu lze v závislosti na potřebách použít různé typy externích úložišť: Cloud Storage, Trvalé disky, Redestilát, CloudSQL nebo jiné spravované databáze. (Poznámka. přel.: Přečtěte si o tom více v našem článku “Operátoři pro Kubernetes: jak spouštět stavové aplikace. “)

Nemožné znamená, že kontejner nebude během své životnosti upravován: žádné aktualizace, záplaty, změny konfigurace. Pokud potřebujete aktualizovat kód aplikace nebo použít opravu, vytvořte nový obraz a nasaďte jej. Doporučuje se přesunout konfiguraci kontejneru (port naslouchání, možnosti runtime prostředí atd.) externě - do Tajemství и ConfigMaps. Lze je aktualizovat, aniž byste museli vytvářet nový obrázek kontejneru. Chcete-li snadno vytvořit potrubí pomocí sestavy obrazu, můžete použít Cloud Build. (Poznámka. přel.: Pro tyto účely používáme nástroj Open Source dapp.)

7 doporučených postupů společnosti Google pro kontejnery
Příklad aktualizace konfigurace nasazení v Kubernetes pomocí ConfigMap namontovaného v podech jako konfigurace

3. Vyhněte se privilegovaným kontejnerům

Na svých serverech nespouštíte aplikace jako root, že? Pokud se útočník dostane do aplikace, získá root přístup. Stejné úvahy platí pro nespouštění privilegovaných kontejnerů. Pokud potřebujete změnit nastavení na hostiteli, můžete zadat konkrétní kontejner schopnosti pomocí možnosti securityContext v Kubernetes. Pokud potřebujete změnit sysctls, Kubernetes má samostatný abstrakt pro tohle. Obecně se snažte využít co nejvíce init- a kontejnery postranních vozíků k provádění podobných privilegovaných operací. Nemusí být přístupné ani internímu ani externímu provozu.

Pokud spravujete cluster, můžete použít Zásady zabezpečení pod pro omezení používání privilegovaných kontejnerů.

4. Vyhněte se spuštění jako root

O privilegovaných kontejnerech již byla řeč, ale bude ještě lepší, když kromě toho nebudete v kontejneru spouštět aplikace jako root. Pokud útočník nalezne vzdálenou zranitelnost v aplikaci s právy root, která umožňuje spuštění kódu, po kterém je schopen opustit kontejner prostřednictvím dosud neznámé zranitelnosti, získá root na hostiteli.

Nejlepší způsob, jak se tomu vyhnout, je nespouštět nic jako root. K tomu můžete použít směrnici USER в Dockerfile nebo runAsUser v Kubernetes. Správce clusteru může také nakonfigurovat chování vynucení pomocí Zásady zabezpečení pod.

5. Usnadněte sledování aplikace

Stejně jako protokolování je i monitorování nedílnou součástí správy aplikací. Oblíbené monitorovací řešení v komunitě Kubernetes je Prometheus - systém, který automaticky detekuje moduly a služby, které vyžadují monitorování. (Poznámka. přel.: Viz také naše podrobná zpráva na téma monitorování pomocí Prometheus a Kubernetes.) Stackdriver je schopen monitorovat clustery Kubernetes a obsahuje vlastní verzi Prometheus pro monitorování aplikací.

7 doporučených postupů společnosti Google pro kontejnery
Kubernetes Dashboard na Stackdriveru

Prometheus očekává, že aplikace přepošle metriky do koncového bodu HTTP. K dispozici pro toto Klientské knihovny Prometheus. Stejný formát používají další nástroje, jako např OpenCensus и Stejný.

6. Zpřístupněte zdravotní stav aplikace

Řízení aplikací v produkci napomáhá její schopnost sdělovat svůj stav celému systému. Je aplikace spuštěna? Je to v pořádku? Jste připraveni přijímat provoz? jak se chová? Nejběžnějším způsobem, jak tento problém vyřešit, je implementace zdravotních kontrol (zdravotní prohlídky). Kubernetes má dva typy: sondy živosti a připravenosti.

Pro sondu živosti (kontroly vitality) aplikace musí mít koncový bod HTTP, který vrátí odpověď "200 OK", pokud je funkční a jsou splněny její základní závislosti. Pro sondu připravenosti (kontroly servisní připravenosti) aplikace musí mít jiný koncový bod HTTP, který vrátí odpověď "200 OK", pokud je aplikace ve zdravém stavu, byly dokončeny inicializační kroky a žádný platný požadavek nevede k chybě. Kubernetes bude směrovat provoz do kontejneru pouze v případě, že je aplikace připravena podle těchto kontrol. Dva koncové body lze sloučit, pokud není žádný rozdíl mezi stavem živosti a připravenosti.

Více si o tom můžete přečíst v souvisejícím článku od Sandeep Dinesh, Developer Advocate od Google: “Osvědčené postupy Kubernetes: Nastavení zdravotních kontrol se sondami připravenosti a živosti".

7. Pečlivě vybírejte verzi obrázku

Většina veřejných a soukromých obrázků používá systém označování podobný tomu popsanému v Nejlepší postupy pro stavbu kontejnerů. Pokud obrázek používá systém blízký sémantické verzování, je nutné vzít v úvahu specifika tagování. Například tag latest může se často přesouvat z obrázku do obrázku - nelze se na něj spolehnout, pokud potřebujete předvídatelné a opakovatelné sestavení a instalace.

Můžete použít značku X.Y.Z (téměř vždy se nemění), ale v tomto případě sledujte všechny opravy a aktualizace obrazu. Pokud má obrázek, který používáte, značku X.Y, je to dobrá volba pro zlatou střední cestu. Jeho výběrem automaticky dostáváte záplaty a zároveň se spoléháte na stabilní verzi aplikace.

PS od překladatele

Přečtěte si také na našem blogu:

Zdroj: www.habr.com

Přidat komentář