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: magicWordKÀivitage jÀrgmine kÀsk demo hoidlas, et manustada manifestid:
kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" konfigureeritud
secret "demo-secret" loodudNagu 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 -> 8888Avades aadressi :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-secretNagu 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 bytesMĂ€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: Opaquebase64
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
xyzzySeega, 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
eHl6enkKPÀÀ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": keepSecret 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
»
»
Habr kasutajatele on 25% allahindlus kupongi abil â Kubernetes
Paberkoopia eest maksmise korral saadetakse elektrooniline raamat e-posti teel.
Allikas: habr.com
