GNU/Linux >> Znalost Linux >  >> Ubuntu

Tajemství Kubernetes – Jak vytvářet, používat a přistupovat k tajemstvím

Úvod

Většina aplikací nasazených prostřednictvím Kubernetes vyžaduje přístup k databázím, službám a dalším zdrojům umístěným externě. Nejjednodušší způsob, jak spravovat přihlašovací údaje potřebné pro přístup k těmto zdrojům, je pomocí tajných klíčů Kubernetes. Tajemství pomáhají organizovat a distribuovat citlivé informace v rámci clusteru.

V tomto tutoriálu se dozvíte, co jsou tajemství Kubernetes a jak je vytvářet a používat ve vašem clusteru.

Předpoklady

  • Cluster Kubernetes (pro účely testování jej můžete vytvořit pomocí minikube)
  • Nástroj příkazového řádku Kubernetes kubectl

Co jsou tajemství Kubernetes?

Tajemství Kubernetes je objekt ukládající citlivá data, jako jsou uživatelská jména, hesla, tokeny a klíče. Tajemství vytváří systém během instalace aplikace nebo uživatelé, kdykoli potřebují uložit citlivé informace a zpřístupnit je pod.

Pokud by hesla, tokeny nebo klíče byly jednoduše součástí definice podu nebo obrazu kontejneru, mohly by být náhodně odhaleny během operací Kubernetes. Nejdůležitější funkcí tajemství je proto zabránit náhodnému odhalení informací v něm uložených a zároveň je zpřístupnit, kdekoli je uživatel potřebuje.

Typy tajných informací Kubernetes

Kubernetes obsahuje dvě kategorie tajemství:

  • Služební účty systému automaticky vytvářejí vestavěná tajemství a přidružit je ke kontejnerům spolu s přihlašovacími údaji API.
  • Můžete také vytvořit přizpůsobená tajemství pro přihlašovací údaje, které musíte zpřístupnit podům.

Vestavěná tajemství existují v několika typech, které odpovídají populárním scénářům použití:

Vestavěný typ Popis
Opaque Toto je výchozí typ tajného klíče. Všechny tajné klíče, jejichž konfigurační soubor neobsahuje příkaz typu, jsou považovány za tento typ. Neprůhledná tajemství jsou navržena k ukládání libovolných uživatelských dat.
kubernetes.io/service-account-token Tokeny tajných klíčů účtu služby ukládají tokeny identifikující účty služeb. Po vytvoření podu Kubernetes automaticky vytvoří toto tajemství a přidruží ho k podu, čímž umožní bezpečný přístup k rozhraní API. Toto chování lze zakázat.
kubernetes.io/dockercfg Přístup k registru Docker pro obrázky vyžaduje platná pověření Docker. Tento typ tajného klíče se používá k uložení serializovaného ~/.dockercfg starší formát pro konfiguraci příkazového řádku Docker. Obsahuje .dockercfg zakódovaný v base64 klíč.
kubernetes.io/dockerconfigjson Tento typ tajného klíče obsahuje .dockerconfigjson klíč, což je verze ~/.docker/config.json v kódování base64 soubor, novou verzi zastaralého .dockercfg .
kubernetes.io/basic-auth Tajemství pro ukládání základních autentizačních dat. Musí obsahovat dva klíče – username a password .
kubernetes.io/ssh-auth Pro ukládání dat nezbytných pro navázání připojení SSH použijte ssh-auth typ. Datové pole tohoto typu musí obsahovat ssh-privatekey pár klíč–hodnota.
kubernetes.io/tls Tento typ se používá k ukládání certifikátů a klíčů TLS. Nejběžnějším scénářem použití je ukončení zdroje Ingress, ale tls typ se také někdy používá s jinými zdroji.
bootstrap.kubernetes.io/token Tokeny používané během procesu bootstrap uzlu jsou uloženy pomocí tajného typu tokenu. Tento typ se obvykle vytváří v systému kube-system jmenný prostor.

Chcete-li definovat přizpůsobený typ tajného klíče, přiřaďte neprázdný řetězec jako hodnotu v type pole tajného souboru. Ponecháte-li pole prázdné, říkáte Kubernetes, aby převzal Opaque typ. Přizpůsobený typ osvobozuje od tajemství omezení, která představují vestavěné typy.

Používání Kubernetes Secrets

Když vytvoříte tajemství, musí na něj odkazovat modul, který jej bude používat. Zpřístupnění tajemství pro modul:

1. Připojte tajný klíč jako soubor ve svazku dostupném pro libovolný počet kontejnerů v modulu.

2. Importujte tajný klíč jako proměnnou prostředí do kontejneru.

3. Použijte kubelet a imagePullSecrets pole.

Následující části vysvětlují, jak vytvořit tajné klíče Kubernetes a také jak je dekódovat a přistupovat k nim.

Vytvořte tajemství Kubernetes

Chcete-li vytvořit tajný klíč Kubernetes, použijte jednu z následujících metod:

  • Použijte kubectl pro přístup založený na příkazovém řádku.
  • Vytvořte konfigurační soubor pro tajný klíč.
  • K vygenerování tajemství použijte generátor, jako je Kustomize.

Vytváření tajemství pomocí kubectl

1. Chcete-li začít vytvářet tajný klíč pomocí kubectl , nejprve vytvořte soubory pro uložení citlivých informací:

echo -n '[username]' > [file1]
echo -n '[password]' > [file2]

-n volba říká echo nepřidávat nový řádek na konec řetězce. S novým řádkem se také zachází jako se znakem, takže by byl zakódován společně se zbytkem znaků, čímž by vznikla jiná zakódovaná hodnota.

2. Nyní použijte kubectl k vytvoření tajného klíče pomocí souborů z předchozího kroku. Pomocí obecného dílčího příkazu vytvořte Opaque tajný. Přidejte také --from-file možnost pro každý ze souborů, které chcete zahrnout:

kubectl create secret generic [secret-name] \  
--from-file=[file1] \
--from-file=[file2]

Výstup potvrzuje vytvoření tajenky:

3. Chcete-li poskytnout klíče pro hodnoty uložené v tajném klíči, použijte následující syntaxi:

kubectl create secret generic [secret-name] \  
--from-file=[key1]=[file1] \  
--from-file=[key2]=[file2]

4. Zkontrolujte, zda byl tajný klíč úspěšně vytvořen zadáním:

kubectl get secrets

Příkaz zobrazí seznam dostupných tajných klíčů – jejich názvy, typy, počet datových hodnot, které obsahují, a jejich stáří:

Vytvoření tajných klíčů v konfiguračním souboru

1. Chcete-li vytvořit tajemství zadáním nezbytných informací v konfiguračním souboru, začněte kódováním hodnot, které chcete uložit:

echo -n '[value1]' | base64
echo -n '[value2]' | base64

2. Nyní vytvořte soubor yaml pomocí textového editoru. Soubor by měl vypadat takto:

apiVersion: v1
kind: Secret
metadata:  
  name: newsecret
type: Opaque
data:
  username: dXNlcg==
  password: NTRmNDFkMTJlOGZh

3. Uložte soubor a použijte kubectl apply příkaz k vytvoření tajného klíče:

kubectl apply -f [file]

Vytvořte Kubernetes Secret pomocí generátorů

Generátory, jako je Kustomize, pomáhají rychle generovat tajemství.

1. Chcete-li vytvořit tajemství pomocí Kustomize, vytvořte soubor s názvem kustomization.yaml a naformátujte jej následovně:

secretGenerator:
- name: db-credentials 
  files:
  - username.txt
  - password.txt

Výše uvedený příklad uvádí db-credentials jako název tajného klíče a používá dva dříve vytvořené soubory, username.txt a password.txt , jako datové hodnoty.

2. Chcete-li poskytnout nezašifrovanou doslovnou verzi hodnot dat, zahrňte literals sekce s páry klíč–hodnota, které chcete uložit:

secretGenerator:
- name: db-credentials
  literals:
  - username=user
  - password=54f41d12e8fa

3. Uložte soubor a použijte následující příkaz ve složce kustomization.yaml se nachází:

kubectl apply -k .

Výstup potvrzuje vytvoření tajenky:

K zobrazení vytvořených tajemství použijte kubectl description

kubectl describe zobrazuje základní informace o objektech Kubernetes. Použijte jej k zobrazení popisu tajemství.

kubectl describe secrets/[secret]

První příklad ukazuje tajemství vytvořené poskytnutím souborů jako datových hodnot:

Druhý příklad popisuje tajemství vytvořené pomocí řetězcových literálů. Všimněte si změny v Data sekce, která nyní zobrazuje názvy klíčů místo názvů souborů:

Dekódovat tajemství

1. Chcete-li dekódovat hodnoty v tajném klíči, otevřete je zadáním následujícího příkazu:

kubectl get secret [secret] -o jsonpath='{.data}'

Výstup zobrazuje zakódované páry klíč–hodnota uložené v datové sekci:

2. Pomocí příkazu echo zadejte kódovaný řetězec a výstup převeďte do base64 příkaz:

echo '[encoded-value]' | base64 --decode

Dekódované řetězce se zobrazí jako výstup:

Přístup k tajným informacím načteným ve svazku

1. Chcete-li získat přístup k tajným klíčům připojeným k modulu v samostatném svazku, upravte definici modulu tak, aby zahrnovala nový svazek. Vyberte libovolný název svazku, který chcete, ale ujistěte se, že je stejný jako název tajného objektu.

2. Nezapomeňte zadat readOnly jako pravda. Definice pod může vypadat například takto:

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
  spec:
    containers:
      - name: test-pod
        image: redis
        volumeMounts:
        - name: newsecret
          mountPath: “/etc/newsecret”
          readOnly: true
    volumes:
    - name: newsecret
      secret:
        secretName: newsecret

2. Otevřete další instanci terminálu a použijte kubectl exec příkaz pro přístup k bash shellu modulu:

kubectl exec -it [pod] -- /bin/bash


3. cd do /etc/newsecret a najděte soubory obsažené v tajence:

cd /etc/newsecret

Projektujte tajemství do kontejneru pomocí proměnných prostředí

1. Dalším způsobem, jak získat přístup k tajným klíčům v podu Kubernetes, je importovat je jako proměnné prostředí úpravou definice podu tak, aby na ně obsahovala odkazy. Například:

apiVersion: v1 
kind: Pod 
metadata: 
  name: secret-env-pod 
spec: 
  containers: 
  - name: secret-env-pod
    image: redis 
    env: 
      - name: SECRET_USERNAME 
        valueFrom: 
          secretKeyRef: 
            name: newsecret 
            key: username 
      - name: SECRET_PASSWORD 
        valueFrom: 
          secretKeyRef: 
            name: newsecret 
            key: password 
  restartPolicy: Never

2. Použijte kubectl exec znovu udeřit do lusku.

3. Otestujte proměnnou prostředí pomocí echo příkaz:

echo $[VARIABLE]

Výstup příkazu zobrazuje hodnotu mapovanou do proměnné:

Použití tajných klíčů k stahování obrázků dockeru ze soukromých registrů dockeru

1. Chcete-li používat soukromé registry Docker, musíte se nejprve přihlásit do Docker:

docker login

2. Po zobrazení výzvy zadejte své přihlašovací údaje:

3. Pokud je přihlášení úspěšné, Docker aktualizuje config.json soubor s vašimi údaji. Pro zobrazení souboru použijte příkaz cat:

cat ~/.docker/config.json

auths sekce obsahuje auth klíč, což je zakódovaná verze přihlašovacích údajů Docker.

4. Použijte kubectl k vytvoření tajného klíče s uvedením umístění souboru config.json soubor a typ tajného klíče:

kubectl create secret generic [secret] \
--from-file=.dockerconfigjson=./.docker/config.json \
--type=kubernetes.io/dockerconfigjson

Případně proveďte všechny výše uvedené kroky, včetně přihlášení do Dockeru, na stejném řádku:

kubectl create secret docker-registry [secret] --docker-server:[address] --docker-username=[username] --docker-password=[password] --docker-email=[email]

5. Chcete-li vytvořit modul, který má přístup k tomuto tajemství, vytvořte yaml soubor, který jej definuje. Soubor by měl vypadat takto:

apiVersion: v1
kind: Pod
metadata:
  name: private-reg
spec: 
  containers:
  - name: private-reg-container
    image:   
  imagePullSecrets:  
  - name: regcred

6. Dokončete vytváření modulu jeho aktivací pomocí kubectl apply :

kubectl apply -f [file]

Úvahy o tajných službách Kubernetes

Tajemství Kubernetes jsou bezpečným způsobem ukládání citlivých informací. Než se však rozhodnete pro nejlepší metodu pro váš scénář použití, měli byste zvážit následující body:

  • Uživatelská jména a hesla v Tajemství jsou kódována pomocí base-64. Tato technika kódování textu zakrývá data a zabraňuje náhodnému odhalení, ale není zabezpečená proti škodlivým kybernetickým útokům.
  • Tajemství jsou dostupná pouze v clusteru, ve kterém se nacházejí.
  • Tajemství obvykle závisí na hlavním klíči, který se používá k jejich odemknutí. I když existují metody zabezpečení hlavního klíče, jejich použití vytváří pouze další scénář hlavního klíče.

Chcete-li tyto problémy zmírnit, použijte některá z níže uvedených řešení:

  • Integrujte nástroj pro správu tajemství, který používá účet Kubernetes Service k ověřování uživatelů, kteří potřebují přístup k tajnému trezoru.
  • Integrujte nástroj IAM (Identity and Access Management), který systému umožní používat tokeny ze služby Secure Token Service.
  • Integrujte do modulů správce tajemství třetí strany.

Ubuntu
  1. Jak nainstalovat a používat TensorFlow na CentOS 7

  2. Jak vytvořit a používat subdomény

  3. Jak vytvořit alias a používat příkaz Alias ​​v Linuxu

  1. Co je Umask a jak jej používat

  2. NFS Docker Volumes:Jak vytvořit a používat

  3. Jenkins Shared Library:Jak vytvářet, konfigurovat a používat

  1. Co je Kubernetes DaemonSet a jak jej používat?

  2. Jak nainstalovat a používat Wine na Ubuntu 20.04

  3. Jak nainstalovat a používat FFmpeg na Ubuntu 18.04