Raamat „Kubernetes Ă”petus DevOps'ile“

Raamat „Kubernetes Ă”petus DevOps'ile“ Tere, Habrikate! Kubernetes on ĂŒks kaasaegse pilveökosĂŒsteemi vĂ”tmeelemente. 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 loote oma pilvepĂ”hise rakenduse ja loote selle toetamiseks infrastruktuuri, seadistate arenduskeskkonna ja pideva juurutamise torujuhtme, mis tuleb teile kasuks jĂ€rgmiste rakenduste arendamisel.

‱ Alustage konteinerite ja Kubernetesega tutvumist algusest: teema Ă”ppimiseks ei ole vajalikke erilisi teadmisi. ‱ KĂ€itage oma klastreid vĂ”i valige Amazonilt, Google'ilt jt hallatav Kubernetes teenus. ‱ Kasutage Kubernetes'i konteinerite elutsĂŒkli ja ressursikasutuse haldamiseks. ‱ Optimeerige klastreid kulude, jĂ”udluse, stabiilsuse, vĂ”imsuse ja skaleeritavuse nĂ€itajate jĂ€rgi. ‱ Uurige parimaid tööriistu oma rakenduste arendamiseks, testimiseks ja juurutamiseks. ‱ Kasutage praeguseid tööstusstandardeid turvalisuse ja kontrolli tagamiseks. ‱ Rakendage ettevĂ”ttes DevOps pĂ”himĂ”tteid, et arendustiimid saaksid töötada paindlikumalt, kiiremini ja tĂ”husamalt.

Kellele raamat on mÔeldud

Raamat on kĂ”ige asjakohasem serverite, rakenduste ja teenuste haldamise osakondade töötajatele ning arendajatele, kes tegelevad kas uute pilveteenuste loomise vĂ”i olemasolevate rakenduste migratsiooniga Kubernetesisse ja pilve. Ärge muretsege, et Kubernetesega ja konteineritega töötamine on vajalik — me Ă”petame teile kĂ”ike.

Kubernetes'i kogen kasutajad leiavad siit ka palju kasulikku: kĂ€sitleme sĂŒvitsi selliseid teemasid nagu RBAC, pidev juurutamine, tundlike andmete haldamine ja jĂ€lgimine. Loodame, et raamatu lehtedel on midagi huvitavat ka teile, sĂ”ltumata teie oskustest ja kogemustest.

Millistele kĂŒsimustele raamat vastab

Raamatu planeerimise ja kirjutamise kĂ€igus arutasime pilvetehnoloogiaid ja Kubernetes'i sadade inimestega, rÀÀkides nii juhtide ja valdkonna ekspertidega kui ka absoluutselt algajatega. Allpool on eraldi kĂŒsimused, millele nad sooviksid nĂ€ha vastuseid selles vĂ€ljaandes.

  • «Mind huvitab, miks peaks investeerima aega sellesse tehnoloogiasse. Milliseid probleeme see aitab mul ja mu meeskonnal lahendada?»
  • «Kubernetes tundub huvitav, kuid sellel on ĂŒsna kĂ”rge sisenemiskĂŒnnis. Lihtsa nĂ€ite koostamine pole keeruline, kuid edasine haldamine ja tĂ”rkeotsing hirmutavad. Soovime saada usaldusvÀÀrseid nĂ”uandeid selle kohta, kuidas inimesed haldavad Kubernetes'i klastreid reaalsetes tingimustes ning millega me tĂ”enĂ€oliselt silmitsi seisame.»
  • „Subjektiivne nĂ”uanne oleks kindlasti kasulik. Kubernetes'e ökosĂŒsteem pakub alustavate meeskondade jaoks liiga palju valikuvĂ”imalusi. Kui sama asja saab teha mitmel moel, kuidas mĂ”ista, milline on parem? Kuidas valida?”

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

  • „Kuidas kasutada Kubernetes'e, ilma et see rikuks minu ettevĂ”tte toimimist?”

LÔik. Konfiguratsioon ja Secret objektid

VÔime eraldada Kubernetes'e rakenduse loogika selle konfiguratsioonist (st igasugustest vÀÀrtustest vÔi seadetest, mis aja jooksul vÔivad muutuda) on vÀga kasulik. Konfiguratsiooni vÀÀrtuste alla kuuluvad tavaliselt keskkonnapÔhised parameetrid, kolmandate osapoole teenuste DNS-aadressid ja autentimiseks vajalikud mandaadid.

Muidugi, kÔik need saab otse koodi sisse panna, kuid selline lÀhenemine pole piisavalt paindlik. NÀiteks konfiguratsiooni vÀÀrtuse muutmiseks tuleb teie kood uuesti kokku panna ja juurutada. Palju parem lahendus oleks eraldada konfiguratsioon koodist ja lugeda see failist vÔi keskkonnamuutujatest.

Kubernetes pakub mitmeid erinevaid viise konfiguratsiooni haldamiseks. Esiteks saate vÀÀrtusi rakendusele edastada keskkonnamuutujate kaudu, mis on mÀÀratletud pod-i spetsifikatsioonis (vt jaotist "Keskkonnamuutujad" lk 192). Teiseks saab konfiguratsioonikandmeid salvestada otse Kubernetesesse, kasutades ConfigMap ja Secret objekte.

Selles peatĂŒkis uurime neid objekte sĂŒvitsi ja arutame mĂ”ningaid praktilisi lĂ€henemisviise konfiguratsiooni ja konfidentsiaalsete andmete haldamiseks nĂ€idiserakenduse nĂ€itel.

Pod-ĂŒmbrikute vĂ€rskendamine konfiguratsiooni muutumisel

Kujutage ette, et teie klastris on juurutamine ja soovite muuta mĂ”ningaid vÀÀrtusi selle ConfigMap-is. Kui kasutate Helm'i chart'i (vt jaotist "Helm: Kubernetes'e pakihaldur" lk 102), saate konfiguratsiooni muutuse avastada ja oma pod-ĂŒmbrikutesse automaatselt taaskĂ€ivitada, kasutades ĂŒhte elegantset nippi. Lisage jĂ€rgmine annotatsioon oma juurutamise spetsifikatsiooni:

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

NĂŒĂŒd sisaldab juurutuse mall konfiguratsiooni parameetrite kontrollsummat: parameetrite muutmisel uuendatakse summat. Kui kĂ€itada kĂ€sk helm upgrade, tuvastab Helm, et juurutuse spetsifikatsioon on muutunud, ja taaskĂ€ivitab kĂ”ik pod-kestad.

Kuberneetes konfidentsiaalsed andmed

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

Selle asemel pakub Kuberneetes erilist tĂŒĂŒpi objekti, mis on mĂ”eldud konfidentsiaalsete andmete salvestamiseks: Secret. JĂ€rgmises vaatame nĂ€idet, kuidas seda objekti meie demonstreerimisrakenduses kasutada.

Alustuseks vaadake Kuberneetes'i manifesti Secret objekti jaoks (vt hello-secret-env/k8s/secret.yaml):

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

Selles nĂ€ites on magicWord privaatvĂ”ti, mille vÀÀrtus on xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). SĂ”na xyzzy on arvutite maailmas ÀÀrmiselt kasulik. Nagu ConfigMapis, vĂ”ib ka Secret-objektis olla mitu vĂ”tme-vÀÀrtuse paari. Siin kasutame lihtsuse huvides vaid ĂŒhte "vĂ”ti — vÀÀrtus" paari.

Secret-objektide kasutamine keskkonnamuutujatena

Nagu ConfigMap, saab ka Secret-objekti kergesti konteineris kÀttesaadavaks teha keskkonnamuutujatena vÔi failina selle kettale. 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Àivita jÀrgmine kÀsk demo hoidlas, et rakendada manifestid:

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

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

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

Aadressi avamisel localhost:9999/ peaksite nÀgema jÀrgmist:

Salajane sÔna on "xyzzy"

Secret-objektide salvestamine failidesse

Selles nĂ€ites ĂŒhendame objekti Secret konteineriga faili kujul. Kood asub demo repi hello-secret-file kaustas.

Selleks, et ĂŒhendada Secret faili kujul, kasutame jĂ€rgmisi juurutusi:

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 alajaotises "Konfiguratsioonifailide loomine ConfigMapi objektidest" lk 240, loome mahu (antud juhul demo-secret-volume) ja ĂŒhendame selle konteineriga volumeMounts spetsifikatsiooni osas. MountPath vĂ€ljas on mÀÀratud "/secrets", mistĂ”ttu Kubernetes loob selles kaustas iga "vĂ”ti - vÀÀrtus" paari jaoks, mis on mÀÀratud objekti Secret.

Meie nĂ€ites oleme mÀÀranud ainult ĂŒhe "vĂ”ti - vÀÀrtus" paari nimega magicWord, seega loob manifakt konteineris ĂŒhe faili "/secrets/magicWord" konfidentsiaalsete andmetega, mis on ainult lugemise jaoks kĂ€ttesaadavad.

Kui kÀitada seda manifeeti samamoodi nagu eelnevas nÀites, peaks olema sama tulemus:

Salajane sÔna on "xyzzy"

Secret objektide lugemine

Eelmises jaotises kasutasime kÀsku kubectl describe ConfigMap'i sisu kuvamiseks. Kas sama saab teha Secret'iga?

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

Namespace:      default
Labels:             
Annotations:
Type:               Opaque

Data
====
magicWord: 5   bytes

Pange tĂ€hele, et andmeid ennast ei kuvata. Kubernetes'is on Secret objektid tĂŒĂŒpi Opaque: see tĂ€hendab, et nende sisu ei kuvata kubectl describe vĂ€ljundis, logides ega terminalis, mis takistab konfidentsiaalse teabe juhuslikku avalikustamist.

Salajaoleva teabe kodeeritud versiooni YAML formaadis 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=, see ei sarnane meie algvÀÀrtusega? Tegelikult esindab see Secret objekti base64 kodeeringus. Base64 on ĂŒldiste binaarandmete kodeerimise skeem, mis konverteerib need sĂŒmbolide stringiks.

Kuna konfidentsiaalne teave vÔib olla binaarne ja vÀljundiks kÀttesaamatu (nÀiteks TLS ƥifreerimisvÔtme korral), hoitakse Secret objekte alati base64 formaadis.

Tekst beHl6enk= on meie salajase sĂ”na xyzzy versioon, mis on kodeeritud base64 vormingus. Seda saab kinnitada, kui kĂ€itada terminalis kĂ€sku base64 —decode:

echo "eHl6enk=" | base64 --decode
xyzzy

Seega, kuigi Kubernetes kaitseb teid tundlike andmete juhusliku vĂ€ljatrĂŒki eest terminalis vĂ”i logifailides, on vĂ”imalus neid andmeid saada base64 formaadis, kui on lugemisĂ”igused Secret objektidele teatud nimede ruumis ja hiljem dekrĂŒpteerida.

Kui peate kodeerima mÔne teksti base64 formaati (nÀiteks et paigutada see Secret'i), kasutage kÀsku base64 argumentideta:

echo xyzzy | base64
eHl6enkK

JuurdepÀÀs Secret objektidele

Kes vĂ”ib lugeda ja redigeerida Secret objekte? Seda mÀÀrab RBAC — juurdepÀÀsukontrolli mehhanism (arutame seda pĂ”hjalikumalt peatĂŒkis „Sissejuhatus rollipĂ”hisesse juurdepÀÀsu haldamisse“ lk 258). Kui kasutate klastrit, kus RBAC sĂŒsteem puudub vĂ”i ei ole sisse lĂŒlitatud, on kĂ”ik teie Secret objektid kĂ”ikide kasutajate ja konteinerite jaoks kergesti ligipÀÀsetavad (hiljem selgitame, et teil ei peaks olema ĂŒhtegi tööstuslikku klastrit ilma RBAC-ta).

Passiivne andmete krĂŒptimine

Aga mis saab olema nende inimeste puhul, kes pÀÀsevad etcd andmebaasi, kus Kubernetes salvestab kogu oma teabe? Kas nad saavad lugeda konfidentsiaalseid andmeid, kui neil ei ole API kaudu Object Secret lugemisÔigust?

Alates versioonist 1.7 toetab Kubernetes passiivset andmete krĂŒpteerimist. See tĂ€hendab, et konfidentsiaalne teave etcd sees salvestatakse kettale krĂŒptitud kujul ja ei saa olla isegi nende poolt loetav, kes pÀÀsevad andmebaasile otse ligi. Selle dekrĂŒpteerimiseks on vajalik vĂ”ti, mis on ainult Kubernetes API serveril. Õigesti konfigureeritud klastris peaks passiivne krĂŒpteerimine olema sisse lĂŒlitatud.

Kontrollimiseks, kas passiivne krĂŒpteerimine töötab teie klastris, saate teha jĂ€rgmist:

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 sisse lĂŒlitatud. Google Kubernetes Engine'i vĂ”i muude Kubernetes-i haldusteenuste kasutamisel krĂŒpteeritakse teie andmed teistsuguse mehhanismi abil, seega lipp puudub. Uurige oma Kubernetes'i teenusepakkujalt, kas etcd sisu on krĂŒptitud.

Konfidentsiaalsete andmete hoidmine

Kuberneteses on ressursse, mida ei tohiks kunagi klastrist kustutada: nÀiteks eriti olulised objektid, nagu Secret. Saate ressursi kustutamise vÀltimiseks kasutada annotatsiooni, mida pakub Helm'i haldaja:

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

Secret objektide haldamise strateegiad

Eelmise osa nÀites kaitsti konfidentsiaalsed andmed volitamata ligipÀÀsu eest kohe pÀrast klastrisse salvestamist. Kuid manifestifailides olid need salvestatud tavatekstina.

Te ei tohi kunagi sÀilitada konfidentsiaalset teavet failides, mis on versioonihalduses. Kuidas siis turvaliselt hallata ja sÀilitada sellist teavet enne, kui see rakendatakse Kuberneteses klastrisse?

Saate valida mistahes tööriistad vĂ”i strateegiad konfidentsiaalsete andmete haldamiseks oma rakendustes, kuid peate siiski vastama vĂ€hemalt jĂ€rgmistele kĂŒsimustele.

  • Kus hoida konfidentsiaalseid andmeid, et need oleksid kĂ”rge kĂ€ttesaadavusega?
  • Kuidas muuta konfidentsiaalsed andmed teie aktiivsetele rakendustele kergesti ligipÀÀsetavaks?
  • Mis peab teie rakendustega juhtuma, kui te asendate vĂ”i redigeerite tundlikke andmeid?

Autoritest

John Arundell on nĂ”ustaja, kellel on 30-aastane kogemus arvutitehnika valdkonnas. Ta on kirjutanud mitmeid raamatuid ja teeb koostööd paljude erinevatest riikidest pĂ€rit ettevĂ”tetega, pakkudes neile nĂ”u pilvepĂ”histe infrastruktuuride ja Kubernetes'e kĂŒsimustes. Vabal ajal armastab ta surfata, oskab hĂ€sti lasta pĂŒstolist ja mĂ€ngib hobina klaverit. Elab muinasjutulises suvila Cornwalis, Inglismaal.

Justin Domingus on sĂŒsteemiadministreerimise insener, kes töötab DevOpsi keskkonnas, keskendudes Kubernetes'ele ja pilvetehnoloogiatele. Talle meeldib veeta aega vĂ€rskes Ă”hus, juua kohvi, krabisid pĂŒĂŒda ja arvuti taga istuda. Elab Seattle'is, Washingtonis, koos oma imelise kassi ja veel imelisema abikaasa ning parima sĂ”bra Edrianniga.

» Raamatu kohta on tÀiendavat teavet saadaval vÀljaandja veebisaidil
» Sisukord
» LÔik

Habr'i lugejatele 25% allahindlus kupongiga — Kubernetes

Paberraamatu eest tasumise korral saadetakse e-raamat e-kirjaga.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster