Përshëndetje, Habrajs! Kubernetes është një nga elementët kyç të ekosistemit modern të cloud-it. Kjo teknologji siguron qëndrueshmëri, shkallëzueshmëri dhe rezistencë për virtualizimin e konteinerëve. John Arundell dhe Justin Domingus flasin për ekosistemin Kubernetes dhe prezantojnë zgjidhje të provuara për problemet e përditshme. Hapi pas hapi do të ndërtosh një aplikacion të orientuar nga cloud-i dhe do të krijosh infrastrukturën për ta mbështetur atë, do të konfigurosh mjedisin e zhvillimit dhe një pipeline për implementim të vazhdueshëm që do të të ndihmojë në punën mbi aplikacionet e ardhshme.
⹠Do të fillosh punën me konteinerët dhe Kubernetes nga baza: nuk kërkohet përvojë e veçantë për të mësuar temën. ⹠Do të fillosh klasterët tuaj ose do të zgjedhësh një shërbim të menaxhuar Kubernetes nga Amazon, Google etj. ⹠Do ta aplikosh Kubernetes për menaxhimin e ciklit të jetës së konteinerëve dhe shpenzimeve të burimeve. ⹠Do të optimizosh klasterët sipas treguesve të kostos, performancës, qëndrushmërisë, kapacitetit dhe shkallëzueshmërisë. ⹠Do të shqyrtosh mjetet më të mira për zhvillimin, testimin dhe implementimin e aplikacioneve tuaja. ⹠Do të përdorësh praktika aktuale të industrisë për sigurimin dhe kontrollin. ⹠Do të implementosh në kompaninë tënde parimet DevOps, që ekipet e zhvilluesve të veprojnë më fleksibël, shpejt dhe efikas.
Për kë është e destinuar kjo libër
Libri Ă«shtĂ« mĂ« i pĂ«rshtatshĂ«m pĂ«r punonjĂ«sit e departamenteve tĂ« administratĂ«s, pĂ«rgjegjĂ«s pĂ«r serverĂ«t, aplikacionet dhe shĂ«rbimet, si dhe pĂ«r zhvilluesit qĂ« merret ose me ndĂ«rtimin e shĂ«rbimeve tĂ« reja cloud, ose me migrimin e aplikacioneve ekzistuese nĂ« Kubernetes dhe nĂ« cloud. Mos u shqetĂ«soni, nuk Ă«shtĂ« e nevojshme tĂ« dini si tĂ« punoni me Kubernetes dhe konteinerĂ«t â ne do tĂ« mĂ«sojmĂ« gjithçka.
Përdoruesit e avancuar të Kubernetes gjithashtu do të gjejnë shumë të vlefshme: këtu shqyrtohen në thellësi tema si RBAC, implementimi i vazhdueshëm, menaxhimi i të dhënave të ndjeshme dhe vëzhgimi. Shpresojmë që në faqet e librit do të ketë diçka interesante edhe për ju, pavarësisht aftësive dhe përvojës suaj.
Cilat janë pyetjet që përgjigjet libri
Gjatë planifikimit dhe shkwriting të librit, ne diskutuam për teknologjitë cloud dhe Kubernetes me qindra njerëz, duke biseduar si me liderë dhe ekspertë në këtë fushë, ashtu edhe me fillestarë tërësisht të ri. Më poshtë janë disa pyetje individuale, përgjigjet për të cilat ata do të donin t'i shihnin në këtë botim.
- «MĂ« intereson pse duhet tĂ« harxhoj kohĂ« nĂ« kĂ«tĂ« teknologji. ĂfarĂ« probleme do tĂ« ndihmojĂ« tĂ« zgjidhĂ« pĂ«r mua dhe ekipin tim?»
- «Kubernetes duket interesante, por ka një prag të lartë për tu futur. Ndihma për një hapësirë të thjeshtë nuk është e vështirë, por administrimi dhe depurimi i mëtejshëm është kërcënues. Ne do të donim të merrnim këshilla të besueshme se si njerëzit menaxhojnë klasterët Kubernetes në kushte reale dhe me çfarë problemeve do të përballemi më shumë.»
- «Do të ishte e dobishme një këshillë subjektive. Ekosistemi Kubernetes ofron shumë mundësi për ekipet fillestare. Kur diçka mund të bëhet në disa mënyra, si të kuptojmë se cili është më i mirë? Si të bëjmë zgjedhjen?»
Dhe ndoshta, pyetja më e rëndësishme nga të gjitha:
- «Si mund të përdor Kubernetes pa ndaluar punën e kompanisë sime?»
Shkëputje. Konfigurimi dhe objektet Secret
Mundësia për të ndarë logjikën e aplikacionit Kubernetes nga konfigurimi i tij (dmth, nga çdo vlerë ose parametrat që mund të ndodhin me kalimin e kohës) është shumë e dobishme. Vlerat e konfigurimit zakonisht përfshijnë parametrat e destinuar për një mjedis të caktuar, adresat DNS të shërbimeve të jashtme dhe akreditivët për autentifikim.
Sigurisht, gjithçka mund të vendoset drejtpërdrejt në kod, por ky qasje është shumë e ngurtë. Për shembull, për të ndryshuar një vlerë konfigurimi, do të duhej të mbledhësh përsëri dhe të shpërndash kodin tuaj. Një zgjidhje shumë më e mirë do të ishte të ndash konfigurimin nga kodi dhe ta lexosh atë nga një skedar ose variablat e mjedisit.
Kubernetes ofron disa mënyra të ndryshme për menaxhimin e konfigurimit. Së pari, mund të kaloni vlera në aplikacion përmes variablave të mjedisit, të specifikuara në specifikimin e pod-it (shih në seksionin 'Variablat e mjedisit' në fq. 192). Së dyti, të dhënat konfiguruese mund të ruhen direkt në Kubernetes, duke përdorur objektet ConfigMap dhe Secret.
Në këtë kapitull ne do të shqyrtojmë këto objekte në thellësi dhe do të shqyrtojmë disa qasje praktike për menaxhimin e konfigurimeve dhe të dhënave të ndjeshme në shembullin e një aplikacioni demonstrues.
Përditësimi i pod-rrathëve kur ndryshon konfigurimi
Imagjinoni se nĂ« klasterin tuaj ka njĂ« shpĂ«rndarje dhe dĂ«shironi tĂ« ndryshoni disa vlera nĂ« ConfigMap e tij. NĂ«se pĂ«rdorni njĂ« hartĂ« Helm (shihni seksionin âHelm: menaxheri i paketave pĂ«r Kubernetesâ nĂ« fq. 102), zbulimi i ndryshimit tĂ« konfigurimit dhe rimbushja e pod-rrathĂ«ve tuaj mund tĂ« bĂ«het automatikisht me njĂ« truk tĂ« elegant. Shtoni kĂ«tĂ« annotim nĂ« specifikimin e shpĂ«rndarjes tuaj:
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") .
| sha256sum }}Tani, shablloni i shpërndarjes përmban një kontrolle të shumës së parametrave të konfigurimit: me ndryshimin e parametrave, shuma do të përditësohet. Nëse ekzekutoni komandën helm upgrade, Helm do të zbulojë se specifikimi i shpërndarjes ka ndryshuar dhe do të rifillojë të gjitha pod-rrathët.
Të dhënat e ndjeshme në Kubernetes
Ne e dimë tashmë se objekti ConfigMap ofron një mekanizëm fleksibël për ruajtjen dhe qasjen në të dhënat e konfigurimit në klaster. Megjithatë, shumica e aplikacioneve kanë informacion që është sekret dhe i ndjeshëm: për shembull, fjalëkalime ose çelësa API. Ato mund të ruhen gjithashtu në ConfigMap, por ky zgjidhje nuk është ideale.
Në vend të kësaj, Kubernetes ofron një objekt të tipit të veçantë, që është i destinuar për ruajtjen e të dhënave të ndjeshme: Secret. Më pas do të shqyrtojmë një shembull se si mund të aplikohet ky objekt në aplikacionin tonë demonstrues.
Së pari, shikoni në manifestin Kubernetes për objektin Secret (shihni hello-secret-env/k8s/secret.yaml):
apiVersion: v1
kind: Secret
metadata:
name: demo-secret
stringData:
magicWord: xyzzy
Në këtë shembull, çelësi sekret magicWord ka vlerën xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Fjala xyzzy është shumë e dobishme në botën e kompjuterëve. Në përputhje me ConfigMap, në objektin Secret mund të vendosen shumë çelësa dhe vlera. Këtu për thjeshtësi, po përdorim vetëm një çift 'çelës - vlerë'.
Përdorimi i objekteve Secret si variabla mjedisi
Ashtu si ConfigMap, objekti Secret mund të bëhet i aksesueshëm në konteiner si variabla mjedisi ose si një skedar në diskun e tij. Në shembullin e mëposhtëm, ne do t'i caktojmë variablës mjedisi një vlerë nga Secret:
spec:
containers:
- name: demo
image: cloudnatived/demo:hello-secret-env
ports:
- containerPort: 8888
env:
- name: GREETING
valueFrom:
secretKeyRef:
name: demo-secret
key: magicWordKryeni komandën e mëposhtme në ripostitorin demo për të aplikuar manifestet:
kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" e konfiguruar
sekreti "demo-secret" u krijuaSi më parë, redirektoni portin lokal në implementim për të parë rezultatin në shfletuesin tuaj:
kubectl port-forward deploy/demo 9999:8888
Po redirektohet nga 127.0.0.1:9999 -> 8888
Po redirektohet nga [::1]:9999 -> 8888Kur të hapni adresën :9999/ duhet të shihni të mëposhtmen:
Fjala magjike është "xyzzy"
Shkrimi i objekteve Secret në skedarë
Në këtë shembull, ne do ta lidhim objektin Secret me kontejnerin si një skedar. Kodi është në dosjen hello-secret-file të ripostitorit demo.
Për të lidhur Secret si një skedar, do të përdorim këtë implementim:
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-secretAshtu si nĂ« seksionin "Krijimi i skedave tĂ« konfigurimit nga objektet ConfigMap" nĂ« fq. 240, ne krijojmĂ« njĂ« volum (nĂ« kĂ«tĂ« rast Ă«shtĂ« demo-secret-volume) dhe e lidhim atĂ« me kontejnerin nĂ« seksionin e specifikimeve volumeMounts. NĂ« fushĂ«n mountPath Ă«shtĂ« e specifikuar "/secrets", prandaj Kubernetes do tĂ« krijojĂ« njĂ« skedar nĂ« kĂ«tĂ« dosje pĂ«r çdo çift "çelĂ«s â vlerĂ«" tĂ« pĂ«rcaktuar nĂ« objektin Secret.
NĂ« shembullin tonĂ« ne kemi pĂ«rcaktuar vetĂ«m njĂ« çift "çelĂ«s â vlerĂ«" me emrin magicWord, prandaj manifesti do tĂ« krijojĂ« njĂ« skedar nĂ« kontejnerin "/secrets/magicWord" me tĂ« dhĂ«na tĂ« ndjeshme, e cila do tĂ« jetĂ« nĂ« dispozicion vetĂ«m pĂ«r lexim.
Nëse aplikohet ky manifest në të njëjtën mënyrë si në shembullin e mëparshëm, duhet të rezultojë e njëjta gjë:
Fjala magjike është "xyzzy"
Leximi i objekteve Secret
Në seksionin e mëparshëm përdorëm komandën kubectl describe për të printuar përmbajtjen e ConfigMap. A mund të bëjmë të njëjtën gjë me Secret?
kubectl describe secret/demo-secret
Emri: demo-secret
Hapësira: default
Etiketat:
Shënimet:
Tipi: Opaque
Të Dhënat
====
magicWord: 5 bytesVini re se të dhënat nuk shfaqen vetë. Objektet Secret në Kubernetes kanë tipin Opaque: kjo do të thotë se përmbajtja e tyre nuk tregtohet në daljen e kubectl describe, regjistrat dhe terminalin, duke e bërë të pamundur për t'u zbuluar aksidental informacionin e ndjeshëm.
Për të parë versionin e koduar të të dhënave të ndjeshme në formatin YAML, përdorni komandën kubectl get:
kubectl get secret/demo-secret -o yaml
apiVersion: v1
data:
magicWord: eHl6enk=
kind: Secret
metadata:
...
type: Opaquebase64
ĂfarĂ« Ă«shtĂ« eHl6enk=, krejt ndryshe nga vlera jonĂ« origjinale? NĂ« tĂ« vĂ«rtetĂ«, kjo Ă«shtĂ« njĂ« objekt Secret, i paraqitur nĂ« kodimin base64. Base64 Ă«shtĂ« njĂ« skemĂ« kodimi pĂ«r tĂ« dhĂ«na tĂ« rastĂ«sishme binarike nĂ« formĂ«n e njĂ« stringu karakteresh.
Duke qenë se informacioni ndjeshëm mund të jetë binar dhe i papërshkueshëm për daljen (siç është rasti me çelësin e enkriptimit TLS), objektet Secret gjithmonë ruhet në formatin base64.
Teksti beHl6enk= është versioni ynë i fjalës sekrete xyzzy, e koduar në base64. Këtë mund ta verifikoni, nëse ekzekutoni në terminal komandën base64 --decode:
echo "eHl6enk=" | base64 --decode
xyzzyPrandaj, megjithëse Kubernetes ju mbron nga dalja aksidentale e të dhënave të ndjeshme në terminal ose skedarët e regjistrimit, me të drejta për të lexuar objektet Secret në një hapësirë emri të caktuar, këto të dhëna mund të merren në formatin base64 dhe më pas të deshifrohen.
Nëse ju nevojitet të kodoni ndonjë tekst në base64 (për shembull, për ta vendosur në Secret), përdorni komandën base64 pa argumente:
echo xyzzy | base64
eHl6enkKQasja në objektet Secret
Kush mund tĂ« lexojĂ« dhe redaktojĂ« objektet Secret? Kjo pĂ« ŰȘŰŰŻÙŰŻet nga RBAC â mekanizmi i kontrollit tĂ« aksesit (do ta diskutojmĂ« nĂ« detaje nĂ« nĂ«nkapitullin "Hyrje nĂ« menaxhimin e aksesit tĂ« bazuar nĂ« rol" nĂ« fq. 258). NĂ«se po pĂ«rdorni njĂ« klaster ku sistemi RBAC Ă«shtĂ« i munguar ose i çaktivizuar, tĂ« gjitha objektet tuaja Secret janĂ« tĂ« disponueshme pĂ«r çdo pĂ«rdorues dhe kontejner (mĂ« vonĂ« do ta shpjegojmĂ« se nuk duhet tĂ« keni asnjĂ« klaster industrial pa RBAC).
Enkriptimi pasiv i të dhënave
Dhe çfarë ndodh me ata që kanë qasje në bazën e të dhënave etcd, në të cilën Kubernetes ruan të gjithë informacionin e tij? A mund të lexojnë të dhënat e ndjeshme pa pasur të drejta për të lexuar objektet Secret përmes API?
Nga version 1.7, Kubernetes mbështet enkriptimin pasiv të të dhënave. Kjo do të thotë se informatat konfidenciale brenda etcd ruhen në disk në formë të enkriptuar dhe nuk mund të lexohen as nga ata që kanë akses direkt në bazën e të dhënave. Për deshifrimin e saj nevojitet një çelës, i cili e ka vetëm serveri API i Kubernetes. Në një klaster të konfiguruar siç duhet, enkriptimi pasiv duhet të jetë aktivizuar.
Mund ta kontrolloni nëse enkriptimi pasiv funksionon në klasterin tuaj në këtë mënyrë:
kubectl describe pod -n kube-system -l component=kube-apiserver |grep encryption
--experimental-encryption-provider-config=...Nëse nuk e shihni flamurin experimental-encryption-provider-config, enkriptimi pasiv nuk është aktivizuar. Kur përdorni Google Kubernetes Engine ose shërbime të tjera menaxhimi të Kubernetes, të dhënat tuaja enkriptohen me një mekanizëm tjetër, kështu që flamuri do të mungojë. Nëse është e enkriptuar përmbajtja e etcd, kontaktoni ofruesin tuaj të Kubernetes.
Ruajtja e të dhënave konfidenciale
Ka disa burime të Kubernetes që nuk duhet kurrë të hiqen nga klasteri: për shembull, objektet e veçanta Secret. Ju mund ta mbroni burimin nga heqja duke përdorur një anotim që sigurohet nga menaxheri Helm:
kind: Secret
metadata:
annotations:
"helm.sh/resource-policy": keepStrategjitë e menaxhimit të objekteve Secret
Në shembullin nga Seksioni i mëparshëm, të dhënat konfidenciale u mbrojtën nga akses i paautorizuar menjëherë pas ruajtjes në klaster. Por në skedarët e manifestit ato ishin të ruajtura si tekst i pastër.
Nuk duhet kurrë të vendosni informacione konfidenciale në skedarët që ndodhen në sistemin e kontrollit të versioneve. Si mund ta administroni dhe ruani këto informata në mënyrë të sigurt para se t'i aplikoni në klasterin Kubernetes?
Mund të zgjidhni çfarëdo mjeti ose strategjie për të punuar me të dhënat konfidenciale në aplikacionet tuaja, por akoma do t'ju duhet të përgjigjeni të paktën në këto pyetje.
- Ku të ruani të dhënat konfidenciale në mënyrë që ato të ishin të disponueshme në mënyrë të lartë?
- Si t'i bëni të dhënat konfidenciale të disponueshme për aplikacionet tuaja aktive?
- ĂfarĂ« duhet tĂ« ndodhĂ« me aplikacionet tuaja kur e zĂ«vendĂ«soni ose redaktoni tĂ« dhĂ«nat konfidenciale?
Për autorët
DĆŸon Arundel Ă«shtĂ« njĂ« kĂ«shilltar me 30 vjet eksperiencĂ« nĂ« industrinĂ« kompjuterike. Ai ka shkruar disa libra dhe punon me shumĂ« kompani nga vende tĂ« ndryshme, duke i kĂ«shilluar ata pĂ«r çështjet e infrastrukturĂ«s sĂ« orientuar nga re dhe Kubernetes. NĂ« kohĂ«n e lirĂ«, ai pĂ«lqen tĂ« praktikojĂ« surfing, Ă«shtĂ« njĂ« qĂ«llues i mirĂ« me pistoletĂ« dhe luan piano nĂ« mĂ«nyrĂ« amatore. Jeton nĂ« njĂ« kabinĂ« magjike nĂ« Kornuoll, Angli.
Justin Domingus â inxhinier sistemi, duke punuar nĂ« njĂ« mjedis DevOps me Kubernetes dhe teknologjitĂ« e re. Ai pĂ«lqen tĂ« kalojĂ« kohĂ« jashtĂ«, tĂ« pijĂ« kafe, tĂ« kapĂ« krab dhe tĂ« rrijĂ« pas kompjuterit. Jeton nĂ« SietĂ«l, Washington, sĂ« bashku me njĂ« mace tĂ« shkĂ«lqyer dhe njĂ« grua akoma mĂ« tĂ« shkĂ«lqyer, po ashtu miku i tij mĂ« i mirĂ« EdriĂ«n.
» Më shumë informacion mbi librin mund të gjendet në
»
»
PĂ«r anĂ«tarĂ«t e Habra ka njĂ« zbritje prej 25% me kodin â Kubernetes
Pas pagesës për versionin në letër të librit, libri elektronik dërgohet në e-mail.
Burimi: habr.com
