Může být obtížné spravovat stupeň oprávnění, která jsou poskytována každému podu a kontejneru v kontejneru Kubernetes. Můžeme využít funkce Kubernetes SecurityContext k přidání nebo odstranění možností Linuxu z podu a kontejneru, abychom zvýšili zabezpečení kontejneru. Tento článek se zaměřuje na použití securityContext k implementaci jednoduchého příkladu přidávání a odstraňování funkcí. Konfigurace souboru yaml pro odstranění všech schopností a přidání pouze jedné schopnosti do kontejneru je uvedena v ukázkovém příkladu. V tomto článku se k zobrazení možností kontejneru používají příkazy proc a capsh.
Krok 1: Spusťte server Minikube
Nejprve spusťte server minikube, abyste mohli spustit aplikaci a používat pokyny kubectl. Své uzly, pody a dokonce i cluster můžete nasadit pomocí serveru minikube v prostředí Kubernetes. Pro udržení minikube v aktivním režimu je nutné použít následující příkaz:
> spustit minikube
Tím se minikube server zapne a prostředí Kubernetes je připraveno k použití.
Krok 2: Vytvořte soubor Kubernetes YAML
Ve druhém kroku vytvořte soubor YAML pro nasazení pod.
Chcete-li vytvořit soubor yaml pomocí nano, postupujte takto:
- Přejděte na cestu k adresáři, kde chcete vytvořit soubor nebo upravit existující soubor.
- Zadejte příkaz nano následovaný názvem souboru.
Spusťte následující příkaz nano. Vytvoří konfigurační soubor YAML s názvem „nano podsample.yaml“.
> nano podsample.yamlPřejděme k dalšímu kroku, který vám pomůže zjistit, jak nakonfigurovat soubor podsample.yaml.
Krok 3: Nakonfigurujte soubor YAML
V předchozím kroku přidáme nástroj capsh, abychom viděli možnosti našeho kontejneru.
Všimněte si, že žádný z těchto parametrů není nakonfigurován pro sekci securityContext pro tento kontejner. Všechny jsou tedy nastaveny na výchozí hodnoty systému. Vezměte v úvahu skutečnost, že tento kontejner funguje jako výchozí uživatel, který je dodán v souboru Dockerfile, ze kterého je sestaven, pokud pro něj není v Kubernetes definován žádný uživatel. U mnoha kontejnerů je tímto výchozím uživatelem root.
Krok 4: Vytvořte pod
V tomto kroku vytvoříme podsample.yaml s následujícím připojeným příkazem:
> kubectl aplikovat -F podsample.yaml
Krok 5: Zkontrolujte schopnosti
V předchozím kroku je vytvořen a spuštěn pod.
Nyní, když máme uvnitř shell, můžeme použít capsh k ověření jeho schopností pomocí následujícího příkazu:
> $ kubectl exec - -stdin - -tty čepice - - popelPomocí příkazu capsh je možné zobrazit výchozí kapacity kontejneru, které jsou uvedeny následovně:
Z daného výstupu můžeme pozorovat, že kontejner má mnoho výchozích schopností, které jsou kontejneru dány za běhu.
Krok 6: Pusťte Singl Schopnost Y v Kubernetes SecurityContext
V tomto kroku vynecháme jedinou schopnost kontejneru.
Pojďme nakonfigurovat soubor yaml pomocí následujícího příkazu:
> nano dropod.yamlPoté přejděte ke konfiguraci souboru droppod.yaml pomocí následujícího příkazu:
> kubectl aplikovat -F droppod.yaml
Krok 7 : Nakonfigurujte přidání jediné schopnosti do souboru YAML
V tomto kroku otevřete soubor yaml (dropped.yaml), který byl vytvořen v kroku 6. Poté nastavte kontejner tak, aby již neměl přístup ke schopnosti CAP_MKNOD, což odebere možnost vytvářet nové uzly systému souborů.
Nakonfigurovaný soubor vypadá takto:
Krok 8 : Zkontrolujte schopnosti
Soubor yaml je nakonfigurován tak, aby zrušil schopnost CAP_MKNOD.
V tomto kroku spusťte a spusťte soubor dropcaps.yaml a zkontrolujte možnosti kontejneru pomocí následujícího příkazu:
> $ kubectl exec - -stdin - -tty kapky - - popelKapacity lze zkontrolovat spuštěním souboru dropcaps:
> # capsh - -print
Můžeme pozorovat, že tento modul ztratil schopnost CAP_MKNOD ve srovnání s prvním modulem.
Krok 9 : Zrušte všechny schopnosti v Kubernetes SecurityContext
Vzhledem k tomu, že Kubernetes může zrušit jednu funkci, může také zrušit všechny funkce prostřednictvím securityContext. V tomto kroku zrušte všechny schopnosti kontejneru implikováním daného příkazu:
> nano samplenocap.yamlPoté nakonfigurujte soubor samplenocap.yaml pomocí následujícího příkazu:
> kubectl vytvořit -F samplenocap.yaml
Nyní přejděme k dalšímu kroku a vynecháme všechny kapacity v nastavení securityContext.
Krok 10: Nakonfigurujte všechny možnosti v souboru YAML
V tomto kroku otevřete soubor yaml, který byl vytvořen v kroku 9. Poté nakonfigurujte uvnitř kontejneru.securityContext a zrušte všechny možnosti kontejneru.
Nakonfigurovaný soubor vypadá takto:
Krok jedenáct : Zkontrolujte schopnosti
Spuštěním nocaps v caph zobrazíte informace o schopnostech. V tomto kroku použijte následující příkaz a zobrazte všechny možnosti kontejneru:
> kubectl exec - -stdin - -tty nocaps -- popelKapacity lze zkontrolovat na následujícím obrázku spuštěním souboru samplenocaps yaml ve formátu capsh:
> # capsh - -print
Předchozí výstup ukazuje, že aktuální=”” a ohraničující sada=”” jsou nyní prázdné. Schopnosti byly úspěšně odstraněny.
Krok 1 2 : Nainstalujte Bash
V tomto kroku nainstalujte Bash prostřednictvím apk, protože některé systémové funkce nebudou fungovat, pokud nebudeme mít vůbec žádné možnosti. I když náš kontejner funguje jako root, instalace balíčku Bash se nezdaří.
> # apk přidat bash
Krok 1 3 : Zkontrolujte informace o schopnostech
Existuje několik způsobů, jak zobrazit možnosti našeho kontejneru, například pomocí příkazů capsh a proc. V tomto kroku zobrazíme kapacity kontejneru pomocí příkazu proc a proc zobrazí kapacity jako bitmapu. Ačkoli to není tak čitelné jako výsledek z capsh, každý bit, který je zde definován, představuje určitou schopnost.
> # cd /proc/1/
Zde vidíme, že tento konkrétní kontejner nemá žádné povolené funkce; všechny tyto hodnoty jsou nulové.
Krok 1 4 : Přidání jedné funkce v Kubernetes SecurityContext
V předchozích krocích jsme zrušili jedinou schopnost, která je CAP_MKNOD, a zrušili všechny schopnosti. Ale v tomto kroku můžeme přidat schopnosti zpět.
Pro vytvoření souboru yAML spusťte následující příkaz:
> nano sampleadd.yamlPoté nakonfigurujte soubor sampleadd.yaml.
> kubectl vytvořit -F sampleadd.yaml
Nyní vyzkoušíme soubor sampleadd.yaml a přidáme jednu kapacitu do našich nastavení securityContext.
Krok 1 5 : Nakonfigurujte Single Capability v souboru YAML
Nyní nakonfigurujme soubor přidáním schopnosti v spec.container.securityContext do options.add [“MKNOD”].
Schopnost je zobrazena v souboru YAML.
Krok 16 : Zkontrolujte schopnosti
V tomto kroku spusťte addcaps a zkontrolujte možnosti pomocí následujícího příkazu:
> kubectl exec - -stdin - -tty addcaps -- tak jakoPřidanou kapacitu lze vidět na následujícím daném výstupu:
proud = cap_mknod+ep
Ohraničující sada = cap_mknod
> # capsh - -print
Závěr
Nejprve jste se z implementovaného příkladu dozvěděli o výchozích schopnostech kontejneru, které jsou přiřazeny za běhu, který je zobrazen pomocí příkazu capsh. Dále jste se naučili vypustit jednu schopnost v kontejneru s názvem CAP_MKNOD. Poté jste se také naučili, jak zrušit všechny možnosti kontejneru pomocí konfigurace //drop: –all. Poté jsme použili dva způsoby, jak zobrazit schopnosti kontejnerů – pomocí příkazů capsh a proc.