Grāmata ā€œKubernetes for DevOpsā€

Grāmata ā€œKubernetes for DevOpsā€ Sveiki, Khabro iedzÄ«votāji! Kubernetes ir viens no galvenajiem mÅ«sdienu mākoņu ekosistēmas elementiem. Å Ä« tehnoloÄ£ija nodroÅ”ina konteineru virtualizācijas uzticamÄ«bu, mērogojamÄ«bu un noturÄ«bu. Džons Arundels un Džastins Dominguss stāsta par Kubernetes ekosistēmu un iepazÄ«stina ar pārbaudÄ«tiem ikdienas problēmu risinājumiem. Soli pa solim jÅ«s izveidosit savu mākoņa lietojumprogrammu un izveidosit infrastruktÅ«ru tās atbalstam, izveidosit izstrādes vidi un nepārtrauktu izvietoÅ”anas konveijeru, kas jums palÄ«dzēs, strādājot pie nākamajām lietojumprogrammām.

ā€¢ 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 localhost:9999/ jums vajadzētu redzēt sekojoÅ”o:

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ē izdevēja vietne
Ā» Satura
Ā» Izraksts

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

Pievieno komentāru