Raamat „Kubernetes DevOpsile“

Raamat „Kubernetes DevOpsile“ Tere, Hubrijad! Kubernetes on ĂŒks peamisi elemente tĂ€napĂ€eva pilveökosĂŒsteemis. See tehnoloogia tagab konteinerite virtualiseerimise usaldusvÀÀrsuse, skaleeritavuse ja vastupidavuse. John Arundel ja Justin Domingus rÀÀgivad Kubernetes'e ökosĂŒsteemist ja tutvustavad tĂ”estatud lahendusi igapĂ€evaste probleemide lahendamiseks. Samm-sammult ehitate oma pilvepĂ”hise rakenduse ja loote selle toetamiseks infrastruktuuri, seadistate arenduskeskkonna ja pideva juurutamise toru, mis on kasulik jĂ€rgmiste rakenduste loomisel.

‱ Alustate tööga konteinerite ja Kubernetes'ega nullist: teema Ă”ppimiseks ei ole vajalik eriteadmisi. ‱ KĂ€ivitate oma klastreid vĂ”i valite Amazon, Google jms hallatava Kubernetes'e teenuse. ‱ Rakendate Kubernetes'e konteineri elutsĂŒkli ja ressursside haldamiseks. ‱ Optimeerite klastreid kulude, jĂ”udluse, vastupidavuse, jĂ”udluse ja skaleeritavuse nĂ€itajate jĂ€rgi. ‱ Uurite parimaid vahendeid oma rakenduste arendamiseks, testimiseks ja juurutamiseks. ‱ Kasutate aktuaalseid tööstusharu praktikaid turvalisuse ja kontrolli tagamiseks. ‱ Rakendate ettevĂ”ttes DevOpsi pĂ”himĂ”tteid, et arendusteamid saaksid tegutseda paindlikumalt, kiiremini ja tĂ”husamalt.

Kellele raamat on mÔeldud

Raamat on eriti asjakohane administraatorite osakondade töötajatele, kes vastutavad serverite, rakenduste ja teenuste eest, samuti arendajatele, kes tegelevad kas uute pilveteenuste loomise vĂ”i olemasolevate rakenduste migratsiooniga Kubernetes'e ja pilve. Ärge muretsege, Kubernetes'e ja konteineritega töötamise oskusi ei nĂ”uta – me Ă”petame teid kĂ”ike.

Kogemustega Kubernetes'e kasutajad leiavad samuti palju kasulikku: siin kĂ€sitletakse pĂ”hjalikult selliseid teemasid nagu RBAC, pidev juurutamine, konfidentsiaalsete andmete haldamine ja jĂ€lgitavus. Loodame, et raamatu lehekĂŒlgedelt leiate kindlasti midagi huvitavat, sĂ”ltumata teie oskustest ja kogemustest.

Millistele kĂŒsimustele raamat vastab

Raamatute kavandamise ja kirjutamise kĂ€igus arutasime pilvetehnoloogiaid ja Kubernetes't sadade inimestega, vesteldes nii valdkonna juhtide ja ekspertidega kui ka absoluutsete algajatega. Allpool on eraldi kĂŒsimused, millele nad tahaksid nĂ€hes vastuseid selles vĂ€ljaandes.

  • „Mind huvitab, miks peaksime selle tehnoloogiaga aega veetma. Milliseid probleeme see aitab mul ja mu meeskonnal lahendada?“
  • „Kubernetes tundub huvitav, kuid sellel on ĂŒsna kĂ”rge sisenemispiir. Lihtsa nĂ€ite koostamine ei valmista probleeme, kuid edasine haldamine ja silumine on hirmutav. Sooviksime saada usaldusvÀÀrseid nĂ”uandeid selle kohta, kuidas inimesed haldavad Kubernetes klastreid reaalses maailmas ja millega me tĂ”enĂ€oliselt silmitsi seisame.“
  • „Subjektiivne nĂ”uanne oleks kasulik. Kubernetes'e ökosĂŒsteem pakub algajatele meeskondadele liiga palju valikuvariante. Kui sama asja saab teha mitmel viisil, kuidas mĂ”ista, milline neist on parim? Kuidas teha valik?“

Ja vĂ”ib-olla kĂ”ige olulisem kĂŒsimus kĂ”igist:

  • „Kuidas kasutada Kubernetes't, rikkumata oma ettevĂ”tte tegevust?“

LÔik. Konfiguratsioon ja Secret objektid

VÔime eraldada Kubernetes'i rakenduse loogika selle konfiguratsioonist (st kÔik vÀÀrtused vÔi seaded, mis aja jooksul vÔivad muutuda) on vÀga kasulik. KonfiguratsioonivÀÀrtuste alla kuuluvad tavaliselt keskkonnaparametrid, kolmandate osapoolte teenuste DNS-aadressid ja autentimiseks vajalikudCredentials.

Muidugi saab kĂ”ik selle koodi sisse panna, kuid selline lĂ€henemine ei ole piisavalt paindlik. NĂ€iteks juhul, kui konfiguratsioonivÀÀrtust tuleb muuta, tuleb teie kood uuesti ĂŒles ehitada ja juurutada. Tunduvalt parem lahendus oleks eraldada konfiguratsioon koodist ja lugeda seda failist vĂ”i keskkonnamuutujatest.

Kubernetes pakub mitmeid erinevaid viise konfiguratsiooni haldamiseks. Esiteks saate edastada vÀÀrtusi rakendusele keskkonnamuutujate kaudu, mis on mÀÀratud pod-koreade spetsifikatsioonis (vt alajaotust „Keskkonnamuutujad“ lk 192). Teiseks, konfiguratsioonid saab salvestada otse Kubernetes's, kasutades ConfigMap ja Secret objekte.

Selles peatĂŒkis uurime neid objekte pĂ”hjalikult ja vaatleme mĂ”ningaid praktilisi lĂ€henemisviise konfiguratsiooni ja konfidentsiaalsete andmete haldamiseks nĂ€idisrakenduse nĂ€itel.

Pod-ĂŒmbriste vĂ€rskendamine konfiguratsiooni muutmisel

Kujutage ette, et teie klastris on rakendus ja te soovite muuta mĂ”ned vÀÀrtused selle ConfigMap'is. Kui kasutate Helm'i chart'i (vt peatĂŒkki "Helm: Kubernetes'i paketihaldur" lk 102), saate automaatselt tuvastada konfiguratsiooni muutuse ja oma pod-ĂŒmbrised uuesti kĂ€ivitada elegantse nippiga. Lisage jĂ€rgmine annotatsioon oma rakenduse spetsifikatsiooni:

checksum/config: {{ include (print $.Template.BasePath "\/configmap.yaml") .
       | sha256sum }}

NĂŒĂŒd sisaldab rakenduse mall konfiguratsiooniparametrite rikka summat: parametrite muutmisel vĂ€rskendatakse summat. Helm'i uuendamise korral tuvastab Helm, et rakenduse spetsifikatsioon on muutunud ja kĂ€ivitab kĂ”ik pod-ĂŒmbrised uuesti.

Konfidentsiaalsed andmed Kuberneteses

Me juba teame, et ConfigMap'i objekt pakub paindlikku mehhanismi konfiguratsioonandmete salvestamiseks ja neile juurdepÀÀsuks klastris. Kuid enamikul rakendustel on teave, mis on salajane ja konfidentsiaalne: nÀiteks paroolid vÔi API vÔtmed. Seda saab salvestada ka ConfigMap'i, kuid selline lahendus ei ole ideaalne.

Selle asemel pakub Kubernetes spetsiaalse tĂŒĂŒbi objekti, mis on ette nĂ€htud konfidentsiaalsete andmete salvestamiseks: Secret. JĂ€rgnevalt vaatleme nĂ€idisrakenduse kontekstis, kuidas seda objekti rakendada.

Alustuseks vaatame Kubernetes'e manifesti Secret objektile (vt hello-secret-env/k8s/secret.yaml):

apiVersion: v1
kind: Secret
metadata:
    name: demo-secret
stringData:
    magicWord: xyzzy

Selles nĂ€ites on salajase vĂ”tme magicWord vÀÀrtus xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). SĂ”na xyzzy on arvutite maailmas tĂ”eliselt kasulik. Sarnaselt ConfigMap'iga saab Secret objektis hoida palju vĂ”tmeid ja vÀÀrtusi. Siin kasutame lihtsuse huvides vaid ĂŒhte "vĂ”ti - vÀÀrtus" paari.

Secret objektide kasutamine keskkonnamuutujatena

Nagu ConfigMap, saab ka Secret objekti teha konteineris kergesti kÀttesaadavaks keskkonnamuutujate vÔi failina tema ketas. JÀrgmises nÀites mÀÀrame keskkonnamuutujale vÀÀrtuse Secret'ist:

spec:
   containers:
       - name: demo
          image: cloudnatived/demo:hello-secret-env
          ports:
             - containerPort: 8888
          env:
             - name: GREETING
               valueFrom:
               secretKeyRef:
                  name: demo-secret
                  key: magicWord

KÀivitage jÀrgmine kÀsk demo hoidlas, et manustada manifestid:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" konfigureeritud
secret "demo-secret" loodud

Nagu ennegi, suunake kohalik port rakendusele, et nÀha tulemust oma brauseris:

kubectl port-forward deploy/demo 9999:8888
Suunamine 127.0.0.1:9999 -> 8888
Suunamine [::1]:9999 -> 8888

Avades aadressi localhost:9999/ peaksite nÀgema jÀrgmist:

Salajane sÔna on "xyzzy"

Salajaste objektide salvestamine failidesse

Selles nĂ€ites ĂŒhendame salajase objekti konteineriga failina. Kood on demo hoidla hello-secret-file kaustas.

Salajase faili ĂŒhendamiseks kasutame jĂ€rgmist rakendust:

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

Nagu jaotises „Konfiguratsioonifailide loomine ConfigMap objektidest” lehekĂŒljel 240, loome mahu (antud juhul demo-secret-volume) ja ĂŒhendame selle konteineriga mahtude mÀÀratlemise sektsioonis. mountPath vĂ€ljale on mÀÀratud /secrets, seega loob Kubernetes selle kaustas ĂŒhe faili iga „vĂ”ti- vÀÀrtus” paari kohta, mis on mÀÀratletud salajases objekti.

Meie nĂ€ites oleme mÀÀranud ainult ĂŒhe „vĂ”ti- vÀÀrtus” paari nimega magicWord, seega loob manifest konteineris ĂŒhe faili /secrets/magicWord salajaste andmetega, mis on saadaval ainult lugemiseks.

Kui manustada see manifest samamoodi nagu eelmises nÀites, peaks tulemus olema sama:

Salajane sÔna on "xyzzy"

Salajaste objektide lugemine

Eelmisel lehekĂŒljel kasutasime kĂ€sku kubectl describe ConfigMap sisu kuvamiseks. Kas on vĂ”imalik sama teha salajase objektiga?

kubectl describe secret/demo-secret
Name:          demo-secret

Namespace:      default
Labels:             <none>
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

MĂ€rkus: andmed endid ei kuvata. Salajased objektid Kuberneteses on tĂŒĂŒbilt Opaque: see tĂ€hendab, et nende sisu ei kuvata kubectl describe vĂ€ljundis, logides ja terminalis, takistades seega salajase teabe tahtlikku avalikustamist.

YAML-formaadis salajaste andmete kodeeritud versiooni vaatamiseks kasutage kÀsku kubectl get:

kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
   magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaque

base64

Mis on eHl6enk=, mis ei nĂ€e vĂ€lja nagu meie algne vÀÀrtus? Tegelikult on see Secret objekt, esitatud base64 kodeeringus. Base64 on skeem, mis kodeerib juhuslikke binaarandmeid sĂŒmbolite stringiks.

Kuna konfidentsiaalne teave vĂ”ib olla binaarne ja ei pruugi olla vĂ€ljundiks kergesti saadaval (nt TLS krĂŒptimise vĂ”tme puhul), siis hoitakse Secret objekte alati base64 formaadis.

Tekst beHl6enk= on meie salajase sĂ”na xyzzy base64 kodeeritud versioon. Seda saab kontrollida, kui terminalis kĂ€ivitada kĂ€sk base64 —decode:

echo "eHl6enk=" | base64 --decode
xyzzy

Seega, kuigi Kubernetes kaitseb teid juhusliku konfidentsiaalsete andmete vÀljundist terminalis vÔi logifailides, on olemasolevate Ôiguste korral vÔimalik neid base64 formaadis saada ja hiljem dekodeerida.

Kui peate kodeerima mÔne teksti base64 (nt selle paigutamiseks Secretisse), kasutage kÀsku base64 ilma argumentideta:

echo xyzzy | base64
eHl6enkK

PÀÀs Secret objektidele

Kes saab lugeda ja redigeerida Secret objekte? See mÀÀratakse RBAC — juurdepÀÀsu kontrolli mehhanismiga (mille ĂŒle arutame ĂŒksikasjalikult jaotises "Sissejuhatus rollipĂ”hisesse juurdepÀÀsu haldamisse" lk 258). Kui kasutate klastrit, kus RBAC sĂŒsteem puudub vĂ”i ei ole lubatud, on kĂ”ik teie Secret objektid kĂ”igile kasutajatele ja konteineritele kergesti kĂ€ttesaadavad (hiljem selgitame, miks ei tohiks teil olla ĂŒhtegi tööstuslikku klastrit ilma RBAC-ta).

Passiivne andmete krĂŒpteerimine

Aga kuidas on nende kohta, kes pÀÀsevad juurde andmebaasile etcd, kus Kubernetes salvestab kogu oma teabe? Kas nad saavad lugeda konfidentsiaalseid andmeid, ilma et oleksid Ôigusi lugeda Secret objekte API kaudu?

Alates versioonist 1.7 toetab Kubernetes passiivset andmete krĂŒpteerimist. See tĂ€hendab, et tundlik teave etcd-s hoitakse kettal krĂŒpteeritud kujul ja seda ei saa lugeda isegi neil, kellel on otsene juurdepÀÀs andmebaasile. Selle dekrĂŒpteerimiseks on vajalik vĂ”ti, mis on ainult Kubernetes API serveril. Õigesti konfigureeritud klastris peaks passiivne krĂŒpteerimine olema lubatud.

Kontrollida, kas passiivne krĂŒpteerimine teie klastris töötab, saab jĂ€rgmiselt:

kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
        --experimental-encryption-provider-config=...

Kui te ei nĂ€e lippu experimental-encryption-provider-config, siis passiivne krĂŒpteerimine ei ole lubatud. Google Kubernetes Engine'i vĂ”i muude Kubernetes'i haldusteenuste kasutamisel on teie andmed krĂŒpteeritud muude mehhanismide abil, seetĂ”ttu see lipp puudub. KĂŒsige oma Kubernetes'i teenusepakkujalt, kas etcd sisu on krĂŒpteeritud.

Tundlike andmete haldamine

On Kubernetes'i ressursse, mida ei tohiks kunagi klastrist kustutada: nÀiteks eriti olulised Secret objektid. Saate ressursi kustutamise eest kaitsta annotatsiooni abil, mida pakub Helm haldur:

kind: Secret
metadata:
    annotations:
        "helm.sh/resource-policy": keep

Secret objektide haldamise strateegiad

Eelnevas jaotises kaitsti tundlikud andmed volitamata juurdepÀÀsu eest kohe pÀrast klastrisse salvestamist. Kuid manifestifailides salvestati need tavalise tekstina.

Te ei tohi kunagi paigutada tundlikku teavet failidesse, mis on versioonihaldussĂŒsteemis. Kuidas ohutult hallata ja hoida sellist teavet enne selle rakendamist Kubernetes klastrisse?

Saate valida mis tahes tööriistad vĂ”i strateegiad tundlike andmete haldamiseks oma rakendustes, kuid peate siiski vĂ€hemalt neile kĂŒsimustele vastama.

  • Kus hoida tundlikke andmeid, et need oleksid suure kĂ€ttesaadavusega?
  • Kuidas teha tundlikud andmed teie aktiivsetele rakendustele kĂ€ttesaadavaks?
  • Mis peaks juhtuma teie rakendustega, kui asendate vĂ”i muudate tundlikke andmeid?

Autoritest

John Arundel on konsultant 30-aastase kogemusega arvutustööstuses. Ta on kirjutanud mitu raamatut ja teeb koostööd paljude ettevĂ”tetega erinevatest maadest, nĂ”ustades neid pilvepĂ”histe infrastruktuuri ja Kubernetes'i kĂŒsimustes. Vabas osas naudib ta surfamist, on hea relvakasutaja ja mĂ€ngib hobi korras klaverit. Elab muinasjutulises suvekohas Cornwallis, Inglismaal.

Justin Domingus on sĂŒsteemihalduse insener, kes töötab DevOps keskkonnas Kubernetes'i ja pilvetehnoloogiatega. Talle meeldib veeta aega vĂ€rskes Ă”hus, juua kohvi, kraabe pĂŒĂŒda ja arvuti taga aega veeta. Elab Seattle'is, Washingtonis, koos oma imelise kassi ja veelgi imelisema naisega, kes on tema parim sĂ”ber, Adrienne.

» Raamatuga saab lÀhemalt tutvuda kirjastuse veebisaidil
» Sisukord
» LÔik

Habr kasutajatele on 25% allahindlus kupongi abil — Kubernetes

Paberkoopia eest maksmise korral saadetakse elektrooniline raamat e-posti teel.

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster