ā¢ SÄciet darbu ar konteineriem un Kubernetes no pamatiem: tÄmas apguvei nav nepiecieÅ”ama Ä«paÅ”a pieredze. ā¢ Palaidiet savus klasterus vai izvÄlieties pÄrvaldÄ«tu Kubernetes pakalpojumu no Amazon, Google utt. ā¢ Izmantojiet Kubernetes, lai pÄrvaldÄ«tu konteinera dzÄ«ves ciklu un resursu patÄriÅu. ā¢ OptimizÄjiet klasterus, pamatojoties uz izmaksÄm, veiktspÄju, noturÄ«bu, jaudu un mÄrogojamÄ«bu. ā¢ ApgÅ«stiet labÄkos rÄ«kus lietojumprogrammu izstrÄdei, testÄÅ”anai un izvietoÅ”anai. ā¢ Izmantojiet paÅ”reizÄjo nozares praksi, lai nodroÅ”inÄtu droŔību un kontroli. ā¢ Ieviesiet DevOps principus visÄ uzÅÄmumÄ, lai izstrÄdes komandas varÄtu darboties elastÄ«gÄk, ÄtrÄk un efektÄ«vÄk.
Kam grÄmata ir paredzÄta?
GrÄmata visvairÄk attiecas uz administrÄcijas nodaļu darbiniekiem, kas atbild par serveriem, lietojumprogrammÄm un pakalpojumiem, kÄ arÄ« izstrÄdÄtÄjiem, kas iesaistÄ«ti jaunu mÄkoÅpakalpojumu veidoÅ”anÄ vai esoÅ”o lietojumprogrammu migrÄÅ”anÄ uz Kubernetes un mÄkoni. Neuztraucieties, jums nav jÄzina, kÄ strÄdÄt ar Kubernetes vai konteineriem - mÄs jums visu iemÄcÄ«sim.
PieredzÄjuÅ”i Kubernetes lietotÄji arÄ« atradÄ«s daudz vÄrtÄ«bas, padziļinÄti aptverot tÄdas tÄmas kÄ RBAC, nepÄrtraukta izvietoÅ”ana, sensitÄ«vu datu pÄrvaldÄ«ba un novÄrojamÄ«ba. MÄs ceram, ka grÄmatas lappusÄs noteikti bÅ«s kaut kas interesants jums, neatkarÄ«gi no jÅ«su prasmÄm un pieredzes.
Uz kÄdiem jautÄjumiem grÄmata sniedz atbildes?
PlÄnojot un rakstot grÄmatu, mÄs apspriedÄm mÄkoÅtehnoloÄ£iju un Kubernetes ar simtiem cilvÄku, runÄjot ar nozares lÄ«deriem un ekspertiem, kÄ arÄ« pilnÄ«giem iesÄcÄjiem. TÄlÄk ir atlasÄ«ti jautÄjumi, uz kuriem viÅi vÄlÄtos saÅemt atbildes Å”ajÄ publikÄcijÄ.
- āMani interesÄ, kÄpÄc jums vajadzÄtu veltÄ«t laiku Å”ai tehnoloÄ£ijai. KÄdas problÄmas tas palÄ«dzÄs atrisinÄt man un manai komandai?
- āKubernetes Ŕķiet interesanta, taÄu tai ir diezgan augsta barjera ienÄkÅ”anai. VienkÄrÅ”a piemÄra sagatavoÅ”ana nav grÅ«ta, taÄu turpmÄka administrÄÅ”ana un atkļūdoÅ”ana ir biedÄjoÅ”a. MÄs vÄlamies saÅemt uzticamus padomus par to, kÄ cilvÄki pÄrvalda Kubernetes klasterus reÄlajÄ pasaulÄ un ar kÄdÄm problÄmÄm mÄs varÄtu saskarties."
- āSubjektÄ«vs padoms noderÄtu. Kubernetes ekosistÄma dod jaunÄm komandÄm pÄrÄk daudz iespÄju izvÄlÄties. Ja ir vairÄki veidi, kÄ darÄ«t vienu un to paÅ”u, kÄ jÅ«s zinÄt, kurÅ” no tiem ir labÄkais? KÄ izdarÄ«t izvÄli?
Un, iespÄjams, vissvarÄ«gÄkais no visiem jautÄjumiem:
- "KÄ es varu izmantot Kubernetes, netraucÄjot manam uzÅÄmumam?"
Izvilkums. KonfigurÄcijas un slepenie objekti
Ä»oti noderÄ«ga ir iespÄja nodalÄ«t Kubernetes lietojumprogrammas loÄ£iku no tÄs konfigurÄcijas (tas ir, no jebkÄdÄm vÄrtÄ«bÄm vai iestatÄ«jumiem, kas laika gaitÄ var mainÄ«ties). KonfigurÄcijas vÄrtÄ«bas parasti ietver videi raksturÄ«gus iestatÄ«jumus, treÅ”Äs puses pakalpojumu DNS adreses un autentifikÄcijas akreditÄcijas datus.
Protams, to visu var ievietot tieÅ”i kodÄ, taÄu Ŕī pieeja nav pietiekami elastÄ«ga. PiemÄram, mainot konfigurÄcijas vÄrtÄ«bu, kods bÅ«s jÄizveido un jÄizvieto vÄlreiz. Daudz labÄks risinÄjums bÅ«tu atdalÄ«t konfigurÄciju no koda un nolasÄ«t to no faila vai vides mainÄ«gajiem.
Kubernetes nodroÅ”ina vairÄkus dažÄdus konfigurÄcijas pÄrvaldÄ«bas veidus. PirmkÄrt, varat nodot vÄrtÄ«bas lietojumprogrammai, izmantojot vides mainÄ«gos, kas norÄdÄ«ti aptvÄrÄja specifikÄcijÄ (skatiet āVides mainÄ«gieā 192. lpp.). OtrkÄrt, konfigurÄcijas datus var glabÄt tieÅ”i Kubernetes, izmantojot ConfigMap un Secret objektus.
Å ajÄ nodaÄ¼Ä mÄs detalizÄti izpÄtÄm Å”os objektus un aplÅ«kosim dažas praktiskas pieejas konfigurÄcijas un sensitÄ«vu datu pÄrvaldÄ«bai, izmantojot demonstrÄcijas lietojumprogrammu.
Notiek apvidu Äaulu atjauninÄÅ”ana, kad mainÄs konfigurÄcija
IedomÄjieties, ka jÅ«su klasterÄ« ir izvietoÅ”ana un vÄlaties mainÄ«t dažas vÄrtÄ«bas tÄs ConfigMap kartÄ. Ja izmantojat Helm diagrammu (skatiet sadaļu "Helm: Kubernetes pakotÅu pÄrvaldnieks" 102. lpp.), varat automÄtiski noteikt konfigurÄcijas izmaiÅas un atkÄrtoti ielÄdÄt pod apvalkus, veicot vienu glÄ«tu triku. Pievienojiet savai izvietoÅ”anas specifikÄcijai Å”Ädu anotÄciju:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
| sha256sum }}
IzvietoÅ”anas veidnÄ tagad ir konfigurÄcijas parametru kontrolsumma: ja parametri tiek mainÄ«ti, summa tiks atjauninÄta. Ja palaižat helm jauninÄÅ”anu, Helm noteiks, ka izvietoÅ”anas specifikÄcija ir mainÄ«jusies, un restartÄs visus pod Äaulas.
SensitÄ«vi dati pakalpojumÄ Kubernetes
MÄs jau zinÄm, ka ConfigMap objekts nodroÅ”ina elastÄ«gu mehÄnismu konfigurÄcijas datu glabÄÅ”anai un piekļuvei klasterÄ«. TomÄr lielÄkajai daļai lietojumprogrammu ir sensitÄ«va informÄcija, piemÄram, paroles vai API atslÄgas. To var saglabÄt arÄ« ConfigMap, taÄu Å”is risinÄjums nav ideÄls.
TÄ vietÄ Kubernetes piedÄvÄ Ä«paÅ”u objektu veidu, kas paredzÄts sensitÄ«vu datu glabÄÅ”anai: Secret. TÄlÄk apskatÄ«sim piemÄru, kÄ Å”o objektu var izmantot mÅ«su demonstrÄcijas lietojumprogrammÄ.
Lai sÄktu, apskatiet objekta Secret Kubernetes manifestu (skatiet hello-secret-env/k8s/secret.yaml):
apiVersion: v1
kind: Secret
metadata:
name: demo-secret
stringData:
magicWord: xyzzy
Å ajÄ piemÄrÄ magicWord privÄtÄ atslÄga ir xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). VÄrds xyzzy parasti ir ļoti noderÄ«gs datoru pasaulÄ. LÄ«dzÄ«gi kÄ ConfigMap, slepenajÄ objektÄ varat saglabÄt vairÄkas atslÄgas un vÄrtÄ«bas. Å eit vienkÄrŔības labad mÄs izmantojam tikai vienu atslÄgas vÄrtÄ«bu pÄri.
Slepeno objektu izmantoÅ”ana kÄ vides mainÄ«gie
TÄpat kÄ ConfigMap, slepeno objektu var padarÄ«t pieejamu konteinerÄ kÄ vides mainÄ«gos vai kÄ failu tÄ diskÄ. NÄkamajÄ piemÄrÄ vÄrtÄ«bai no Secret pieŔķirsim vides mainÄ«go:
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-secret-env
ports:
- containerPort: 8888
env:
- name: GREETING
valueFrom:
secretKeyRef:
name: demo-secret
key: magicWord
DemonstrÄcijas repozitorijÄ palaidiet Å”o komandu, lai lietotu manifestus:
kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created
TÄpat kÄ iepriekÅ”, pÄrsÅ«tiet vietÄjo portu uz izvietoÅ”anu, lai pÄrlÅ«kprogrammÄ redzÄtu rezultÄtu:
kubectl port-forward deploy/demo 9999:8888
Forwarding from 127.0.0.1:9999 -> 8888
Forwarding from [::1]:9999 -> 8888
Atverot adresi
The magic word is "xyzzy"
Slepeno objektu rakstīŔana failos
Å ajÄ piemÄrÄ mÄs pievienosim objektu Secret konteineram kÄ failu. Kods atrodas demonstrÄcijas repozitorijas mapÄ hello-secret-file.
Lai savienotu Secret kÄ failu, mÄs izmantosim Å”Ädu izvietoÅ”anu:
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-secret-file
ports:
- containerPort: 8888
volumeMounts:
- name: demo-secret-volume
mountPath: "/secrets/"
readOnly: true
volumes:
- name: demo-secret-volume
secret:
secretName: demo-secret
TÄpat kÄ apakÅ”sadaÄ¼Ä āKonfigurÄcijas failu izveide no ConfigMap objektiemā lpp. 240, mÄs izveidojam sÄjumu (Å”ajÄ gadÄ«jumÄ demo-secret-volume) un uzstÄdÄm to konteinerÄ specifikÄcijas sadaÄ¼Ä volumeMounts. mountPath lauks ir /secrets, tÄpÄc Kubernetes izveidos vienu failu Å”ajÄ mapÄ katram atslÄgas/vÄrtÄ«bas pÄrim, kas definÄts objektÄ Secret.
MÅ«su piemÄrÄ mÄs definÄjÄm tikai vienu atslÄgu-vÄrtÄ«bu pÄri ar nosaukumu magicWord, tÄpÄc manifests izveidos vienu tikai lasÄmu failu /secrets/magicWord ar sensitÄ«viem datiem konteinerÄ.
Ja lietojat Å”o manifestu tÄpat kÄ iepriekÅ”ÄjÄ piemÄrÄ, jums vajadzÄtu iegÅ«t tÄdu paÅ”u rezultÄtu:
The magic word is "xyzzy"
Slepeno objektu lasīŔana
IepriekÅ”ÄjÄ sadaÄ¼Ä mÄs izmantojÄm komandu kubectl description, lai parÄdÄ«tu ConfigMap saturu. Vai to paÅ”u var izdarÄ«t ar Secret?
kubectl describe secret/demo-secret
Name: demo-secret
Namespace: default
Labels: <none>
Annotations:
Type: Opaque
Data
====
magicWord: 5 bytes
LÅ«dzu, Åemiet vÄrÄ, ka paÅ”i dati netiek parÄdÄ«ti. Kubernetes slepenie objekti ir necaurspÄ«dÄ«gi, kas nozÄ«mÄ, ka to saturs netiek parÄdÄ«ts kubectl apraksta izvadÄ, žurnÄla ierakstos vai terminÄlÄ«, tÄdÄjÄdi nav iespÄjams nejauÅ”i atklÄt sensitÄ«vu informÄciju.
Lai skatÄ«tu sensitÄ«vo datu kodÄtu YAML versiju, izmantojiet komandu kubectl get:
kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque
base64
Kas ir eHl6enk=, kas pilnÄ«gi atŔķiras no mÅ«su sÄkotnÄjÄs vÄrtÄ«bas? Tas faktiski ir slepenais objekts, kas attÄlots base64 kodÄjumÄ. Base64 ir shÄma patvaļīgu binÄro datu kodÄÅ”anai kÄ rakstzÄ«mju virkne.
TÄ kÄ sensitÄ«va informÄcija var bÅ«t binÄra un netiek izvadÄ«ta (kÄ tas ir TLS Å”ifrÄÅ”anas atslÄgas gadÄ«jumÄ), slepenie objekti vienmÄr tiek glabÄti base64 formÄtÄ.
Teksts beHl6enk= ir mÅ«su slepenÄ vÄrda xyzzy base64 kodÄtÄ versija. To var pÄrbaudÄ«t, terminÄlÄ« izpildot komandu base64 ādecode:
echo "eHl6enk=" | base64 --decode
xyzzy
TÄtad, lai gan Kubernetes aizsargÄ jÅ«s no nejauÅ”as sensitÄ«vu datu izvadÄ«Å”anas terminÄļa vai žurnÄlfailos, ja jums ir lasÄ«Å”anas atļaujas slepenajiem objektiem noteiktÄ nosaukumvietÄ, Å”os datus var izmantot base64ed un pÄc tam atkodÄt.
Ja jums ir nepiecieÅ”ams base64 iekodÄt kÄdu tekstu (piemÄram, lai to ievietotu noslÄpumÄ), izmantojiet komandu base64 bez argumentiem:
echo xyzzy | base64
eHl6enkK
Piekļuve slepenajiem objektiem
Kas var lasÄ«t un rediÄ£Ät slepenos objektus? To nosaka piekļuves kontroles mehÄnisms RBAC (mÄs to sÄ«kÄk apspriedÄ«sim apakÅ”sadaÄ¼Ä āIevads uz lomu balstÄ«tÄ piekļuves kontrolÄā 258. lpp.). Ja izmantojat klasteru, kuram nav RBAC vai tas nav iespÄjots, visi jÅ«su slepenie objekti ir pieejami visiem lietotÄjiem un konteineriem (mÄs vÄlÄk paskaidrosim, ka bez RBAC jums nevajadzÄtu bÅ«t nevienai ražoÅ”anas klasterai).
PasÄ«vÄ datu Å”ifrÄÅ”ana
KÄ ir ar tiem, kuriem ir piekļuve etcd datubÄzei, kurÄ Kubernetes glabÄ visu savu informÄciju? Vai viÅi var lasÄ«t sensitÄ«vus datus, ja viÅiem nav atļaujas lasÄ«t slepenos objektus, izmantojot API?
KopÅ” versijas 1.7 Kubernetes atbalsta pasÄ«vo datu Å”ifrÄÅ”anu. Tas nozÄ«mÄ, ka sensitÄ«va informÄcija, kas atrodas etcd, tiek glabÄta diskÄ Å”ifrÄta, un to nevar nolasÄ«t pat tie, kuriem ir tieÅ”a piekļuve datubÄzei. Lai to atÅ”ifrÄtu, ir nepiecieÅ”ama atslÄga, kas ir pieejama tikai Kubernetes API serverim. Pareizi konfigurÄtÄ klasterÄ« ir jÄiespÄjo pasÄ«vÄ Å”ifrÄÅ”ana.
Varat pÄrbaudÄ«t, vai pasÄ«vÄ Å”ifrÄÅ”ana jÅ«su klasterÄ« darbojas Å”Ädi:
kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
--experimental-encryption-provider-config=...
Ja neredzat eksperimentÄlÄ-Å”ifrÄÅ”anas-provider-config karogu, pasÄ«vÄ Å”ifrÄÅ”ana nav iespÄjota. Izmantojot Google Kubernetes Engine vai citus Kubernetes pÄrvaldÄ«bas pakalpojumus, jÅ«su dati tiek Å”ifrÄti, izmantojot citu mehÄnismu, tÄpÄc karodziÅÅ” nebÅ«s redzams. Sazinieties ar savu Kubernetes pÄrdevÄju, lai noskaidrotu, vai etcd saturs ir Å”ifrÄts.
KonfidenciÄlu datu uzglabÄÅ”ana
Ir daži Kubernetes resursi, kurus nekad nevajadzÄtu noÅemt no klastera, piemÄram, ļoti jutÄ«gi slepenie objekti. Varat aizsargÄt resursu no dzÄÅ”anas, izmantojot Helm pÄrvaldnieka sniegto anotÄciju:
kind: Secret
metadata:
annotations:
"helm.sh/resource-policy": keep
Slepeno objektu pÄrvaldÄ«bas stratÄÄ£ijas
IepriekÅ”ÄjÄs sadaļas piemÄrÄ sensitÄ«vie dati tika aizsargÄti pret nesankcionÄtu piekļuvi tÅ«lÄ«t pÄc to saglabÄÅ”anas klasterÄ«. TaÄu manifesta failos tie tika saglabÄti kÄ vienkÄrÅ”s teksts.
Nekad nevajadzÄtu ievietot konfidenciÄlu informÄciju failos, kuriem ir versijas kontrole. KÄ jÅ«s varat droÅ”i pÄrvaldÄ«t un uzglabÄt Å”o informÄciju, pirms to lietojat savÄ Kubernetes klasterÄ«?
Varat izvÄlÄties jebkurus rÄ«kus vai stratÄÄ£ijas sensitÄ«vu datu apstrÄdei savÄs lietojumprogrammÄs, taÄu jums joprojÄm bÅ«s jÄatbild vismaz uz tÄlÄk norÄdÄ«tajiem jautÄjumiem.
- Kur jÄglabÄ sensitÄ«vie dati, lai tie bÅ«tu labi pieejami?
- KÄ padarÄ«t sensitÄ«vus datus pieejamus jÅ«su aktÄ«vajÄm lietojumprogrammÄm?
- Kam jÄnotiek ar jÅ«su lietojumprogrammÄm, aizstÄjot vai rediÄ£Äjot sensitÄ«vus datus?
Par autoriem
Džons Arundels ir konsultants ar 30 gadu pieredzi datoru industrijÄ. ViÅÅ” ir sarakstÄ«jis vairÄkas grÄmatas un strÄdÄ ar daudziem uzÅÄmumiem no dažÄdÄm valstÄ«m, konsultÄjot tos par mÄkoÅdatoÅ”anas infrastruktÅ«ru un Kubernetes. BrÄ«vajÄ laikÄ viÅÅ” aizraujas ar sÄrfoÅ”anu, ir labs pistoles Å”ÄvÄjs un spÄlÄ klavieres kÄ amatieris. DzÄ«vo pasaku kotedÅ¾Ä KornvolÄ, AnglijÄ.
Džastins Dominguss ā sistÄmu administrÄÅ”anas inženieris, kas strÄdÄ DevOps vidÄ ar Kubernetes un mÄkoÅtehnoloÄ£ijÄm. ViÅam patÄ«k pavadÄ«t laiku brÄ«vÄ dabÄ, dzert kafiju, kraboties un sÄdÄt pie datora. DzÄ«vo SietlÄ, VaÅ”ingtonÄ, kopÄ ar brÄ«niŔķīgu kaÄ·i un vÄl brÄ«niŔķīgÄku sievu un labÄko draudzeni Adriennu.
Ā» SÄ«kÄku informÄciju par grÄmatu var atrast vietnÄ
Ā»
Ā»
Par Khabrozhiteley 25% atlaide, izmantojot kuponu - Kubernetes
ApmaksÄjot grÄmatas papÄ«ra versiju, pa e-pastu tiks nosÅ«tÄ«ta elektroniskÄ grÄmata.
Avots: www.habr.com