A Kubernetes Secrets lehetővé teszi a bizalmas információk biztonságos tárolását. A Secret használatával nincs szükség arra, hogy a bizalmas adatokat manifeszt definíciókba vagy egyszerű tároló képekbe sütjük.
A titkok első osztályú erőforrástípusok, amelyek bármelyik Pod-tól függetlenül léteznek. A Pods-nak megadod a Titkaidra vonatkozó hivatkozásokat. Az architektúra lehetővé teszi a titkokhoz való hozzáférés korlátozását csak azokhoz a Podokhoz, amelyeknek valóban szükségük van az adatokra.
A Titkokat általában olyan érzékeny állandókra használja, amelyekre a Podjainak szüksége lehet. Ideálisak hitelesítési kulcsok, adatbázis-hitelesítő adatok és API-tokenek tárolására.
Titok létrehozása
A titkok ugyanúgy készülnek, mint bármely más Kubernetes API-erőforrás. Te tudod használni Kubectl parancsok vagy egy YAML-jegyzék, amelyet azután a fürtjére alkalmaz. Ebben az oktatóanyagban példákat adunk a YAML fájlokra.
Itt van, hogyan definiálhat egy felhasználó által létrehozott titkot:
apiVersion: v1 kind: Secret type: Opaque metadata: name: demo-secret data: SECRET_USERNAME: dXNlcm5hbWUK SECRET_PASSWORD: cGFzc3dvcmQK
A titkok a kind
és egyszerű tárgya data
. A titkos példa két külön adatmezőt határoz meg, SECRET_USERNAME
és SECRET_PASSWORD
. Az értékeknek Base64-kódolásúnak kell lenniük – a fenti értékek eredetileg voltak username
és password
.
Ha Helm-sablonnal dolgozik, akkor a a-ban megadhatja titkos értékeit values.yaml
fájl. Vezesse át őket b64enc
a manifesztben, hogy Helm Base64-ként kódolja őket.
apiVersion: v1 kind: Secret type: Opaque metadata: name: demo-secret data: SECRET_PASSWORD: {{ .Values.SecretPassword | b64enc }}
Ha nem szeretné, hogy az Base64 kódolja az értékeket, használhatja a stringData
mező helyett. Tetszik data
, stringData
egy kulcs-érték párok térképe, de az értékeket szó szerint, kódolás nélkül dolgozzuk fel.
Titkos típusok
Az Opaque
titkos típust kell használni önkényes adatokhoz, amelyeket Ön határoz meg. A Kubernetes meghatároz még néhány beépítettet titkos típusok meghatározott felhasználási szcenáriókhoz.
A rendelkezésre álló típusok a következők: service-account-token
(Kubernetes szolgáltatás token), dockerconfigjson
(egy sorosított Docker config.json
fájl, a Docker hitelesítő adatok megadásához) és ssh-auth
(adja meg az SSH hitelesítő adatokat). Ezen típusok mellett vannak megoldások a HTTP alaphitelesítéshez és a TLS tanúsítvány adatokhoz.
Minden titkos típus képes meghatározni saját extra mezőket és érvényesítési korlátozásokat. A titkos típushoz szükséges adatok biztosításához általában további megjegyzéseket kell beállítania a titkában.
Saját titkos típusazonosítókat hozhat létre, ha saját karakterláncot ad meg a type
terület. A kapott titok funkcionálisan egyenértékű lesz a Opaque
típus.
Titkok biztosítása a hüvelyeknek
Miután létrehoztál egy Titkot, elérhetővé kell tenni a podjaid számára. Titkos adatokat injektálhat környezeti változókként vagy kötetbe illesztett fájlként.
Itt van egy Pod-jegyzék, amely a titok adatait környezeti változókba vonja be:
apiVersion: v1 kind: Pod metadata: name: pod-with-secret spec: containers: - name: demo-container image: my-image:latest envFrom: - secretRef: name: demo-secret
Használva envFrom
, az összes kulcs-érték pár, amelyet a titokban definiáltak data
tároló környezeti változókká lesz konvertálva. A korábbi titok titkával a tárolója lenne SECRET_USERNAME
és SECRET_PASSWORD
injektált környezeti változók. Az értékeket automatikusan a Base64 dekódolja.
Néha a környezeti változók helyett fájlokkal kell dolgozni. Így lehet titkot csatolni egy Kubernetes-kötetbe.
apiVersion: v1 kind: Pod metadata: name: pod-with-secret spec: containers: - name: demo-container image: my-image:latest volumeMounts: - name: secret-volume mountPath: /secrets volumes: - name: secret-volume secret: secretName: demo-secret
Hozzáférés a /secrets
könyvtárban a titkos adatok megtekintéséhez. Minden adatkulcsnak saját fájlja lesz. A fájl tartalma a kulcs Base64-dekódolt értéke lesz. Példánk titka írna /secrets/SECRET_USERNAME
és /secrets/SECRET_PASSWORD
fájlokat.
A megközelítés úgy működik, hogy Kubernetes-kötetet hoz létre a secret
forrás. Ez a forrás feltölti a kötetet egy megnevezett titok adataival. A kötet ezután a konténerbe kerül az itt meghatározott úton volumeMounts
.
Biztonsági szempontok
Az adatok titokban tartása nem teszi automatikusan biztonságossá. A Base64-kódolás felszínes homályt nyújt, de nem tévedés: ez az kódolás és nem Titkosítás. Bármi, amely hozzáfér a fürtjéhez, legyen az emberi felhasználó vagy egy megfelelően engedélyezett alkalmazás, lekérheti a sima szövegű titkos értékeket.
A titkok lényege, hogy csökkentsék a véletlenszerű adatok expozíciójának kockázatát a hüvelyek létrehozásakor és megtekintésekor. Csak titkokat adunk hogy Pods – és a Nodes-hez – amelyek valójában megkövetelik őket. A Node megsemmisíti a titkok helyi példányait, amikor az őket használó Pod megszűnik.
A Kubernetes vezérlősík titkos értékeket tárol az stb. Példányában. Ez egy kulcsérték-tároló, amely a Kubernetes-fürt adatait támogatja. Ha maximalizálni szeretné a biztonságot, meg kell tennie állítsa be a titkosítást nyugalomban az etcd áruházához. Ez titkosítja titkait az etcd-n belül.
Fel kell mérnie azt is, hogy az alkalmazásrétege hogyan kezeli a titkokat. Még a nyugalmi állapotú titkosítás engedélyezése esetén is a tárolók akaratlanul is kiszivárogtathatják a titkokat, ha munkanaplókba küldik őket, vagy külsõ szolgálatoknak küldenek. A Kubernetes titkok használata nem zárja ki a bizalmas adatok körültekintő kezelésének szükségességét a tárolóban.
Összegzés
A Kubernetes titkok segítségével bizalmas adatokat tárolhat és hozzáférhet a Kubernetes fürtön belül. A titkok használatával jobban szabályozhatja az információk expozícióját. Azt is egyértelművé teszi, hogy potenciálisan érzékeny értékeket kezel. Ez figyelmeztetésként szolgálhat a fürt felhasználói és rendszergazdái számára.
A hüvelyek titkokat fogyasztanak környezeti változóként vagy kötetre illesztett fájlként. A Kubernetes kezeli a titkok konténerekbe juttatását. A munkaterhelések a meglévő konfigurációs mechanizmusaik segítségével férhetnek hozzá az adatokhoz. A titkok alapértelmezés szerint nem teljesen biztonságosak, de a fürt szintű titkosítás aktiválásával növelheti a védelmüket.