Kitabu "Kubernetes kwa DevOps"

Kitabu "Kubernetes kwa DevOps" Habari, wakazi wa Khabro! Kubernetes ni moja wapo ya vitu muhimu vya mfumo wa ikolojia wa kisasa wa mawingu. Teknolojia hii hutoa kutegemewa, kubadilika na kustahimili uboreshaji wa chombo. John Arundel na Justin Domingus wanazungumza kuhusu mfumo ikolojia wa Kubernetes na kutambulisha masuluhisho yaliyothibitishwa kwa matatizo ya kila siku. Hatua kwa hatua, utaunda programu yako ya asili ya wingu na kuunda miundombinu ya kuunga mkono, kuweka mazingira ya usanidi na bomba la usambazaji ambalo litakusaidia unapofanyia kazi programu zako zinazofuata.

• Anza na vyombo na Kubernetes kutoka kwa misingi: hakuna uzoefu maalum unaohitajika ili kujifunza mada. • Endesha vikundi vyako mwenyewe au uchague huduma inayodhibitiwa ya Kubernetes kutoka Amazon, Google, n.k. • Tumia Kubernetes kudhibiti mzunguko wa maisha ya chombo na matumizi ya rasilimali. • Boresha makundi kulingana na gharama, utendakazi, uthabiti, nguvu na ukubwa. • Jifunze zana bora zaidi za kuunda, kujaribu na kusambaza programu zako. • Tumia mbinu za sasa za tasnia ili kuhakikisha usalama na udhibiti. • Tekeleza kanuni za DevOps kote katika kampuni yako ili timu za maendeleo ziweze kutenda kwa njia rahisi, haraka na kwa ufanisi zaidi.

Kitabu ni cha nani?

Kitabu hiki kinafaa zaidi kwa wafanyikazi wa idara za usimamizi zinazowajibika kwa seva, programu na huduma, na vile vile kwa wasanidi programu wanaohusika katika kujenga huduma mpya za wingu au kuhamisha programu zilizopo kwa Kubernetes na wingu. Usijali, huhitaji kujua jinsi ya kufanya kazi na Kubernetes au vyombo - tutakufundisha kila kitu.

Watumiaji wenye uzoefu wa Kubernetes pia watapata thamani nyingi, kwa kuangazia kwa kina mada kama vile RBAC, utumiaji unaoendelea, usimamizi nyeti wa data na uangalizi. Tunatumahi kuwa kurasa za kitabu hakika zitakuwa na kitu cha kupendeza kwako, bila kujali ujuzi wako na uzoefu.

Kitabu kinajibu maswali gani?

Wakati wa kupanga na kuandika kitabu, tulijadili teknolojia ya wingu na Kubernetes na mamia ya watu, tukizungumza na viongozi na wataalamu wa sekta hiyo pamoja na wanaoanza kabisa. Hapa chini ni maswali yaliyochaguliwa ambayo wangependa yajibiwe katika chapisho hili.

  • "Ninavutiwa na kwa nini unapaswa kutumia wakati kwenye teknolojia hii. Ni matatizo gani yatanisaidia mimi na timu yangu kutatua?”
  • "Kubernetes inaonekana kuvutia, lakini ina kizuizi cha juu sana cha kuingia. Kuandaa mfano rahisi si vigumu, lakini utawala zaidi na utatuzi ni wa kutisha. Tungependa kupata ushauri wa kutegemewa kuhusu jinsi watu wanavyodhibiti makundi ya Kubernetes katika ulimwengu wa kweli na matatizo ambayo tunaweza kukutana nayo."
  • "Ushauri wa kimantiki utasaidia. Mfumo ikolojia wa Kubernetes unazipa timu mpya chaguo nyingi sana za kuchagua. Wakati kuna njia kadhaa za kufanya kitu kimoja, unajuaje ni ipi iliyo bora zaidi? Jinsi ya kufanya uchaguzi?

Na labda maswali muhimu zaidi ya yote:

  • Ninawezaje kutumia Kubernetes bila kuvuruga kampuni yangu?

Dondoo. Usanidi na vitu vya Siri

Uwezo wa kutenganisha mantiki ya programu ya Kubernetes kutoka kwa usanidi wake (ambayo ni, kutoka kwa maadili yoyote au mipangilio ambayo inaweza kubadilika kwa wakati) ni muhimu sana. Thamani za usanidi kwa kawaida hujumuisha mipangilio mahususi ya mazingira, anwani za DNS za huduma za wahusika wengine na vitambulisho vya uthibitishaji.

Bila shaka, haya yote yanaweza kuwekwa moja kwa moja kwenye kanuni, lakini mbinu hii haiwezi kubadilika vya kutosha. Kwa mfano, kubadilisha thamani ya usanidi basi kungekuhitaji uunde na kupeleka msimbo wako tena. Suluhisho bora zaidi itakuwa kutenganisha usanidi kutoka kwa nambari na kuisoma kutoka kwa faili au anuwai za mazingira.

Kubernetes hutoa njia kadhaa tofauti za kudhibiti usanidi. Kwanza, unaweza kupitisha thamani kwa programu kupitia vigeu vya mazingira vilivyobainishwa katika vipimo vya karatasi (ona "Vigezo vya Mazingira" kwenye ukurasa wa 192). Pili, data ya usanidi inaweza kuhifadhiwa moja kwa moja katika Kubernetes kwa kutumia ConfigMap na vitu vya Siri.

Katika sura hii, tunachunguza vitu hivi kwa undani na kuangalia baadhi ya mbinu za vitendo za kudhibiti usanidi na data nyeti kwa kutumia ombi la onyesho.

Inasasisha ganda la ganda wakati usanidi unabadilika

Fikiria una uwekaji kwenye nguzo yako na unataka kubadilisha baadhi ya maadili katika ConfigMap yake. Ikiwa unatumia chati ya Helm (ona "Helm: Kidhibiti Kifurushi cha Kubernetes" kwenye ukurasa wa 102), unaweza kugundua kiotomatiki mabadiliko ya usanidi na upakie upya maganda yako kwa hila moja safi. Ongeza kidokezo kifuatacho kwa vipimo vyako vya utumiaji:

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

Kiolezo cha upelekaji sasa kina cheki ya vigezo vya usanidi: ikiwa vigezo vinabadilishwa, jumla itasasishwa. Ukiendesha uboreshaji wa usukani, Helm itagundua kuwa vipimo vya upelekaji vimebadilika na itawasha upya maganda yote ya ganda.

Data nyeti katika Kubernetes

Tayari tunajua kuwa kitu cha ConfigMap hutoa utaratibu unaonyumbulika wa kuhifadhi na kufikia data ya usanidi katika kundi. Hata hivyo, programu nyingi zina maelezo ambayo ni nyeti na nyeti, kama vile manenosiri au vitufe vya API. Inaweza pia kuhifadhiwa katika ConfigMap, lakini suluhisho hili si bora.

Badala yake, Kubernetes inatoa aina maalum ya kitu iliyoundwa kuhifadhi data nyeti: Siri. Ifuatayo, hebu tuangalie mfano wa jinsi kitu hiki kinaweza kutumika katika ombi letu la onyesho.

Ili kuanza, angalia maelezo ya Kubernetes ya kitu cha Siri (tazama hello-secret-env/k8s/secret.yaml):

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

Katika mfano huu, ufunguo wa faragha wa magicWord ni xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Neno xyzzy kwa ujumla ni muhimu sana katika ulimwengu wa kompyuta. Sawa na ConfigMap, unaweza kuhifadhi vitufe na thamani nyingi kwenye kitu cha Siri. Hapa, kwa unyenyekevu, tunatumia jozi moja tu ya thamani ya ufunguo.

Kutumia Vitu vya Siri kama Vigeu vya Mazingira

Kama ConfigMap, kitu cha Siri kinaweza kupatikana kwenye kontena kama vigeu vya mazingira au kama faili kwenye diski yake. Katika mfano ufuatao, tutagawa kigeu cha mazingira kwa thamani kutoka kwa Siri:

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

Tekeleza amri ifuatayo kwenye hazina ya onyesho ili kutumia maonyesho:

kubectl apply -f hello-secret-env/k8s/
deployment.extensions "demo" configured
secret "demo-secret" created

Kama hapo awali, sambaza mlango wa ndani kwa utumaji ili kuona matokeo katika kivinjari chako:

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

Wakati wa kufungua anwani lochost:9999/ unapaswa kuona yafuatayo:

The magic word is "xyzzy"

Kuandika Vitu vya Siri kwa Faili

Katika mfano huu, tutaambatisha kitu cha Siri kwenye kontena kama faili. Nambari hiyo iko kwenye folda ya faili-siri ya hujambo ya hazina ya onyesho.

Ili kuunganisha Siri kama faili, tutatumia uwekaji ufuatao:

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

Kama ilivyo katika kifungu kidogo "Kuunda faili za usanidi kutoka kwa vitu vya ConfigMap" kwenye uk. 240, tunaunda kiasi (katika kesi hii demo-siri-kiasi) na kuiweka kwenye chombo katika sehemu ya volumeMounts ya vipimo. Sehemu ya mountPath ni /secrets, kwa hivyo Kubernetes itaunda faili moja kwenye folda hii kwa kila jozi ya funguo/thamani iliyofafanuliwa kwenye kitu cha Siri.

Katika mfano wetu, tulifafanua jozi moja tu ya thamani inayoitwa magicWord, kwa hivyo faili ya maelezo itaunda faili moja ya kusoma tu /secrets/magicWord yenye data nyeti kwenye chombo.

Ikiwa utatumia faili hii ya maelezo kwa njia sawa na mfano uliopita, unapaswa kupata matokeo sawa:

The magic word is "xyzzy"

Kusoma vitu vya Siri

Katika sehemu iliyotangulia, tulitumia amri ya kuelezea ya kubectl ili kuonyesha yaliyomo kwenye ConfigMap. Vivyo hivyo vinaweza kufanywa na Siri?

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

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

Data
====
magicWord: 5   bytes

Tafadhali kumbuka kuwa data yenyewe haijaonyeshwa. Vipengee vya siri katika Kubernetes ni vya aina ya Opaque, ambayo ina maana kwamba maudhui yake hayaonyeshwi katika kubectl kuelezea matokeo, maingizo ya kumbukumbu, au terminal, hivyo kufanya kuwa vigumu kufichua taarifa nyeti kimakosa.

Ili kuona toleo la YAML lililosimbwa la data nyeti, tumia kubectl get amri:

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

msingi64

eHl6enk= ni nini, tofauti kabisa na thamani yetu ya asili? Kwa kweli hiki ni kitu cha Siri, kinachowakilishwa katika usimbuaji wa base64. Base64 ni mpango wa kusimba data kiholela kama msururu wa herufi.

Kwa sababu maelezo nyeti yanaweza kuwa ya mfumo wa jozi na si ya kutoa (kama ilivyo kwa ufunguo wa usimbaji fiche wa TLS), vitu vya Siri huhifadhiwa kila mara katika umbizo la base64.

Maandishi beHl6enk= ni toleo la msingi64 lililosimbwa la neno letu la siri xyzzy. Unaweza kuthibitisha hili kwa kuendesha base64 -decode amri kwenye terminal:

echo "eHl6enk=" | base64 --decode
xyzzy

Kwa hivyo, wakati Kubernetes inakulinda kutokana na kutoa data nyeti kwa bahati mbaya kwenye terminal au faili za kumbukumbu, ikiwa umesoma ruhusa kwenye vitu vya Siri kwenye nafasi maalum ya majina, data hiyo inaweza kuwekwa64 na kutatuliwa baadaye.

Ikiwa unahitaji kusimba maandishi fulani (kwa mfano, kuiweka kwa Siri), tumia base64 amri bila hoja:

echo xyzzy | base64
eHl6enkK

Kufikia Vitu vya Siri

Nani anaweza kusoma na kuhariri vitu vya Siri? Hii imedhamiriwa na RBAC, utaratibu wa udhibiti wa ufikiaji (tutajadili kwa kina katika kifungu kidogo cha "Utangulizi wa Udhibiti wa Ufikiaji wa Wajibu" kwenye ukurasa wa 258). Ikiwa unaendesha kundi ambalo halina RBAC au halijawashwa, vitu vyako vyote vya Siri vinapatikana kwa watumiaji na vyombo vyovyote (tutaeleza baadaye kuwa hupaswi kuwa na makundi yoyote ya uzalishaji bila RBAC).

Usimbaji fiche wa data tulivu

Vipi kuhusu wale ambao wanaweza kufikia hifadhidata ya etcd ambapo Kubernetes huhifadhi taarifa zake zote? Je, wanaweza kusoma data nyeti bila kuwa na ruhusa ya kusoma vitu vya Siri kupitia API?

Tangu toleo la 1.7, Kubernetes inasaidia usimbaji fiche wa data. Hii ina maana kwamba taarifa nyeti ndani etcd huhifadhiwa kwa njia fiche kwenye diski na haiwezi kusomwa hata na wale walio na ufikiaji wa moja kwa moja kwa hifadhidata. Ili kusimbua, unahitaji ufunguo ambao seva ya Kubernetes API pekee inayo. Katika kundi lililosanidiwa vizuri, usimbaji fiche wa passiv unapaswa kuwashwa.

Unaweza kuangalia ikiwa usimbaji fiche tu unafanya kazi kwenye nguzo yako kwa njia hii:

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

Usipoona bendera ya majaribio ya usimbaji-mtoa huduma, usimbaji fiche wa passiv haujawezeshwa. Unapotumia Injini ya Google Kubernetes au huduma zingine za usimamizi za Kubernetes, data yako inasimbwa kwa njia fiche kwa kutumia utaratibu tofauti, kwa hivyo bendera haitakuwepo. Wasiliana na mchuuzi wako wa Kubernetes ili kuona ikiwa maudhui ya etcd yamesimbwa kwa njia fiche.

Kuhifadhi data ya siri

Kuna baadhi ya rasilimali za Kubernetes ambazo hazipaswi kamwe kuondolewa kwenye nguzo, kama vile vitu vya Siri nyeti sana. Unaweza kulinda nyenzo dhidi ya kufutwa kwa kutumia kidokezo kilichotolewa na msimamizi wa Helm:

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

Mikakati ya Usimamizi wa Vitu vya Siri

Katika mfano kutoka sehemu iliyotangulia, data nyeti ililindwa dhidi ya ufikiaji usioidhinishwa mara tu baada ya kuhifadhiwa kwenye nguzo. Lakini katika faili za wazi zilihifadhiwa kama maandishi wazi.

Hupaswi kamwe kuweka maelezo ya siri katika faili zilizo katika udhibiti wa toleo. Unawezaje kudhibiti na kuhifadhi maelezo haya kwa usalama kabla ya kuyatumia kwenye kundi lako la Kubernetes?

Unaweza kuchagua zana au mbinu zozote za kushughulikia data nyeti katika programu zako, lakini bado utahitaji kujibu angalau maswali yafuatayo.

  • Data nyeti inapaswa kuhifadhiwa wapi ili iweze kufikiwa kwa urahisi?
  • Jinsi ya kufanya data nyeti kufikiwa na programu zako zinazotumika?
  • Je, nini kifanyike kwa programu zako unapobadilisha au kuhariri data nyeti?

Kuhusu waandishi

John Arundel ni mshauri mwenye uzoefu wa miaka 30 katika tasnia ya kompyuta. Ameandika vitabu kadhaa na anafanya kazi na makampuni mengi kutoka nchi mbalimbali, akiwashauri juu ya miundombinu ya cloud-native na Kubernetes. Katika wakati wake wa mapumziko, anafurahia kuteleza kwenye mawimbi, ni mpiga bastola mzuri, na hucheza piano kama mwanariadha. Anaishi katika jumba la hadithi huko Cornwall, Uingereza.

Justin Domingus - mhandisi wa usimamizi wa mifumo anayefanya kazi katika mazingira ya DevOps na Kubernetes na teknolojia za wingu. Anafurahia kutumia wakati nje, kunywa kahawa, kaa, na kukaa kwenye kompyuta. Anaishi Seattle, Washington, na paka mzuri na mke mzuri zaidi na rafiki bora, Adrienne.

» Maelezo zaidi kuhusu kitabu yanaweza kupatikana tovuti ya mchapishaji
» Meza ya yaliyomo
» Dondoo

Kwa Khabrozhiteley punguzo la 25% kwa kutumia kuponi - Mabernet

Baada ya malipo ya toleo la karatasi la kitabu, kitabu cha elektroniki kitatumwa kwa barua pepe.

Chanzo: mapenzi.com

Kuongeza maoni