Bókaðu „Kubernetes fyrir DevOps“

Bókaðu „Kubernetes fyrir DevOps“ Halló, Khabro íbúar! Kubernetes er einn af lykilþáttum nútíma skýjavistkerfis. Þessi tækni veitir áreiðanleika, sveigjanleika og seiglu við sýndarvæðingu gáma. John Arundel og Justin Domingus tala um Kubernetes vistkerfið og kynna sannaðar lausnir á hversdagslegum vandamálum. Skref fyrir skref munt þú byggja þitt eigið skýja-innbyggt forrit og búa til innviði til að styðja það, setja upp þróunarumhverfi og stöðuga dreifingarleiðslu sem mun hjálpa þér þegar þú vinnur að næstu forritum þínum.

• Byrjaðu með gáma og Kubernetes frá grunnatriðum: engin sérstök reynsla er nauðsynleg til að læra efnið. • Keyrðu þína eigin klasa eða veldu stýrða Kubernetes þjónustu frá Amazon, Google o.fl. • Notaðu Kubernetes til að stjórna líftíma gáma og auðlindanotkun. • Hagræða klasa út frá kostnaði, frammistöðu, seiglu, krafti og sveigjanleika. • Lærðu bestu verkfærin til að þróa, prófa og dreifa forritunum þínum. • Nýttu núverandi starfshætti í iðnaði til að tryggja öryggi og eftirlit. • Innleiða DevOps meginreglur í öllu fyrirtækinu þínu þannig að þróunarteymi geti starfað á sveigjanlegri, fljótlegri og skilvirkari hátt.

Fyrir hverja er bókin?

Bókin á mest við um starfsmenn stjórnsýsludeilda sem bera ábyrgð á netþjónum, forritum og þjónustu, sem og þróunaraðila sem taka þátt í að byggja upp nýja skýjaþjónustu eða flytja núverandi forrit yfir í Kubernetes og skýið. Ekki hafa áhyggjur, þú þarft ekki að vita hvernig á að vinna með Kubernetes eða gáma - við munum kenna þér allt.

Reyndir Kubernetes notendur munu einnig finna mikið gildi, með ítarlegri umfjöllun um efni eins og RBAC, stöðuga dreifingu, stjórnun viðkvæmra gagna og athuganleika. Við vonum að síður bókarinnar innihaldi örugglega eitthvað áhugavert fyrir þig, óháð kunnáttu þinni og reynslu.

Hvaða spurningum svarar bókin?

Þegar við skipulögðum og skrifuðum bókina ræddum við skýjatækni og Kubernetes við hundruð manna, ræddum við leiðtoga og sérfræðinga í iðnaðinum sem og algjöra nýliða. Hér að neðan eru valdar spurningar sem þeir vilja sjá svarað í þessu riti.

  • „Ég hef áhuga á hvers vegna þú ættir að eyða tíma í þessa tækni. Hvaða vandamál mun það hjálpa mér og liðinu mínu að leysa?“
  • „Kubernetes virðist áhugavert, en hefur nokkuð mikla aðgangshindrun. Það er ekki erfitt að útbúa einfalt dæmi, en frekari stjórnun og villuleit er ógnvekjandi. Okkur langar að fá áreiðanlegar ráðleggingar um hvernig fólk stjórnar Kubernetes þyrpingum í hinum raunverulega heimi og hvaða vandamál við erum líkleg til að lenda í.“
  • „Huglæg ráð væru gagnleg. Kubernetes vistkerfið gefur nýjum liðum of marga möguleika til að velja úr. Þegar það eru nokkrar leiðir til að gera það sama, hvernig veistu hver er best? Hvernig á að velja?

Og kannski mikilvægasta spurningin:

  • "Hvernig get ég notað Kubernetes án þess að trufla fyrirtækið mitt?"

Útdráttur. Stillingar og leynihlutir

Hæfni til að aðgreina rökfræði Kubernetes forrits frá uppsetningu þess (það er frá öllum gildum eða stillingum sem geta breyst með tímanum) er mjög gagnleg. Stillingargildi innihalda venjulega umhverfissértækar stillingar, DNS vistföng þriðja aðila þjónustu og auðkenningarskilríki.

Auðvitað er hægt að setja allt þetta beint inn í kóðann, en þessi nálgun er ekki nógu sveigjanleg. Til dæmis, að breyta stillingargildi myndi þá krefjast þess að þú smíðar og dreifir kóðanum þínum aftur. Miklu betri lausn væri að aðskilja stillinguna frá kóðanum og lesa hana úr skrá eða umhverfisbreytum.

Kubernetes býður upp á nokkrar mismunandi leiðir til að stjórna stillingum. Í fyrsta lagi geturðu sent gildi til forritsins í gegnum umhverfisbreytur sem tilgreindar eru í forskrift um hólf umbúðir (sjá „Umhverfisbreytur“ á síðu 192). Í öðru lagi er hægt að geyma stillingargögn beint í Kubernetes með ConfigMap og Secret objects.

Í þessum kafla könnum við þessa hluti í smáatriðum og skoðum nokkrar hagnýtar aðferðir til að stjórna stillingum og viðkvæmum gögnum með því að nota kynningarforrit.

Uppfærir belgskeljar þegar stillingar breytast

Ímyndaðu þér að þú sért með dreifingu í þyrpingunni þinni og þú vilt breyta einhverjum gildum í ConfigMap þess. Ef þú notar Helm töfluna (sjá „Helm: Package Manager fyrir Kubernetes“ á síðu 102), geturðu sjálfkrafa greint stillingarbreytingu og endurhlaða belgskeljar þínar í einu snyrtilegu brellu. Bættu eftirfarandi athugasemd við dreifingarforskriftina þína:

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

Dreifingarsniðmátið inniheldur nú eftirlitsummu yfir stillingarfæribreytur: ef færibreytum er breytt verður summan uppfærð. Ef þú keyrir stýrisuppfærslu mun Helm uppgötva að dreifingarforskriftin hefur breyst og mun endurræsa allar belgskeljar.

Viðkvæm gögn í Kubernetes

Við vitum nú þegar að ConfigMap hluturinn býður upp á sveigjanlegt kerfi til að geyma og fá aðgang að stillingargögnum í klasa. Hins vegar hafa flest forrit upplýsingar sem eru viðkvæmar og viðkvæmar, eins og lykilorð eða API lykla. Það er líka hægt að geyma það í ConfigMap, en þessi lausn er ekki tilvalin.

Þess í stað býður Kubernetes upp á sérstaka gerð af hlutum sem eru hönnuð til að geyma viðkvæm gögn: Leyndarmál. Næst skulum við skoða dæmi um hvernig hægt er að nota þennan hlut í kynningarforritinu okkar.

Til að byrja skaltu skoða Kubernetes upplýsingaskrána fyrir Secret hlutinn (sjá hello-secret-env/k8s/secret.yaml):

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

Í þessu dæmi er magicWord einkalykillinn xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). Orðið xyzzy er almennt mjög gagnlegt í heimi tölvunnar. Svipað og ConfigMap geturðu geymt marga lykla og gildi í Secret hlut. Hér, til einföldunar, notum við aðeins eitt lykilgildi par.

Notkun leynilegra hluta sem umhverfisbreytur

Eins og ConfigMap er hægt að gera Secret hlutinn aðgengilegan í gámnum sem umhverfisbreytur eða sem skrá á disknum hans. Í eftirfarandi dæmi munum við úthluta umhverfisbreytu á gildið frá Secret:

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

Keyrðu eftirfarandi skipun í kynningargeymslunni til að nota birtingarmyndirnar:

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

Eins og áður skaltu áframsenda staðbundna höfnina til dreifingarinnar til að sjá niðurstöðuna í vafranum þínum:

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

Þegar heimilisfang er opnað localhost:9999/ þú ættir að sjá eftirfarandi:

The magic word is "xyzzy"

Að skrifa leynda hluti í skrár

Í þessu dæmi munum við hengja Secret hlutinn við ílátið sem skrá. Kóðinn er staðsettur í hello-secret-file möppunni í kynningargeymslunni.

Til að tengja Secret sem skrá munum við nota eftirfarandi dreifingu:

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

Eins og í undirkaflanum „Búa til stillingarskrár úr ConfigMap hlutum“ á bls. 240, búum við til bindi (í þessu tilfelli demo-secret-volume) og festum það við ílátið í volumeMounts hluta forskriftarinnar. MountPath reiturinn er /secrets, svo Kubernetes mun búa til eina skrá í þessari möppu fyrir hvert lykil/gildi par sem er skilgreint í Secret hlutnum.

Í dæminu okkar skilgreindum við aðeins eitt lykilgilda par sem kallast magicWord, þannig að upplýsingaskráin mun búa til eina skrifvarða skrá /secrets/magicWord með viðkvæmum gögnum í ílátinu.

Ef þú notar þessa upplýsingaskrá á sama hátt og fyrra dæmið ættir þú að fá sömu niðurstöðu:

The magic word is "xyzzy"

Að lesa leynda hluti

Í fyrri hlutanum notuðum við kubectl describe skipunina til að birta innihald ConfigMap. Er hægt að gera það sama með Secret?

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

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

Data
====
magicWord: 5   bytes

Vinsamlegast athugaðu að gögnin sjálf eru ekki sýnd. Leynihlutir í Kubernetes eru af gerðinni Ógegnsætt, sem þýðir að innihald þeirra er ekki sýnt í kubectl lýsir úttak, skráningarfærslum eða flugstöðinni, sem gerir það ómögulegt að afhjúpa viðkvæmar upplýsingar fyrir slysni.

Til að skoða kóðaða YAML útgáfu af viðkvæmum gögnum, notaðu kubectl get skipunina:

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

grunn64

Hvað er eHl6enk=, gjörólíkt upprunalegu gildi okkar? Þetta er í raun Secret hlutur, táknaður í base64 kóðun. Base64 er kerfi til að kóða handahófskennd tvíundargögn sem streng af stöfum.

Vegna þess að viðkvæmar upplýsingar geta verið tvöfaldar en ekki úttak (eins og raunin er með TLS dulkóðunarlykil), eru leynilegir hlutir alltaf geymdir á base64 sniði.

Textinn beHl6enk= er base64 kóðuð útgáfa af leyniorðinu okkar xyzzy. Þú getur staðfest þetta með því að keyra base64 —decode skipunina í flugstöðinni:

echo "eHl6enk=" | base64 --decode
xyzzy

Þannig að á meðan Kubernetes verndar þig fyrir því að gefa út viðkvæm gögn fyrir slysni í flugstöðinni eða annálaskrám, ef þú hefur lesheimildir á leynilegum hlutum í ákveðnu nafnrými, þá er hægt að grunna þau gögn og afkóða í kjölfarið.

Ef þú þarft að umrita base64 texta (til dæmis til að setja hann í Secret), notaðu base64 skipunina án röksemda:

echo xyzzy | base64
eHl6enkK

Aðgangur að leyndum hlutum

Hver getur lesið og breytt leyndum hlutum? Þetta er ákvarðað af RBAC, aðgangsstýringarkerfi (við munum ræða það í smáatriðum í undirkaflanum „Inngangur að hlutverkatengdri aðgangsstýringu“ á síðu 258). Ef þú ert að keyra klasa sem er ekki með RBAC eða er ekki virkt, þá eru allir leynihlutirnir þínir aðgengilegir öllum notendum og gámum (við munum útskýra síðar að þú ættir ekki að hafa neina framleiðsluklasa án RBAC).

Óvirk gagnadulkóðun

Hvað með þá sem hafa aðgang að etcd gagnagrunninum þar sem Kubernetes geymir allar upplýsingar sínar? Geta þeir lesið viðkvæm gögn án þess að hafa leyfi til að lesa leynda hluti í gegnum API?

Frá útgáfu 1.7 styður Kubernetes óvirka gagnadulkóðun. Þetta þýðir að viðkvæmar upplýsingar inni í etcd eru geymdar dulkóðaðar á diski og geta ekki lesið jafnvel af þeim sem hafa beinan aðgang að gagnagrunninum. Til að afkóða það þarftu lykil sem aðeins Kubernetes API þjónninn hefur. Í rétt stilltum klasa ætti að virkja óvirka dulkóðun.

Þú getur athugað hvort óvirk dulkóðun virkar í þyrpingunni þinni á þennan hátt:

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

Ef þú sérð ekki tilrauna-encryption-provider-config fánann er óvirk dulkóðun ekki virkjuð. Þegar þú notar Google Kubernetes Engine eða aðra Kubernetes stjórnunarþjónustu eru gögnin þín dulkóðuð með öðru kerfi, svo fáninn verður ekki til staðar. Athugaðu hjá Kubernetes söluaðilanum þínum til að sjá hvort etcd efni sé dulkóðað.

Geymsla trúnaðargagna

Það eru nokkur Kubernetes tilföng sem ætti aldrei að fjarlægja úr þyrpingunni, eins og mjög viðkvæmir leynihlutir. Þú getur verndað tilföng gegn því að vera eytt með því að nota athugasemd sem stjórnandi Helm gefur upp:

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

Leyndarmálsstjórnunaraðferðir

Í dæminu frá fyrri hluta voru viðkvæm gögn vernduð fyrir óviðkomandi aðgangi strax eftir að þau voru geymd í þyrpingunni. En í upplýsingaskrám voru þær geymdar sem venjulegur texti.

Þú ættir aldrei að setja trúnaðarupplýsingar í skrár sem eru í útgáfustýringu. Hvernig geturðu stjórnað og geymt þessar upplýsingar á öruggan hátt áður en þú notar þær á Kubernetes klasann þinn?

Þú getur valið hvaða verkfæri eða aðferðir sem er til að meðhöndla viðkvæm gögn í forritunum þínum, en þú þarft samt að svara að minnsta kosti eftirfarandi spurningum.

  • Hvar á að geyma viðkvæm gögn þannig að þau séu mjög aðgengileg?
  • Hvernig á að gera viðkvæm gögn aðgengileg virku forritunum þínum?
  • Hvað ætti að verða um forritin þín þegar þú skiptir út eða breytir viðkvæmum gögnum?

Um höfunda

John Arundel er ráðgjafi með 30 ára reynslu í tölvugeiranum. Hann hefur skrifað nokkrar bækur og vinnur með mörgum fyrirtækjum frá mismunandi löndum og ráðleggur þeim um innviði í skýjum og Kubernetes. Í frítíma sínum hefur hann gaman af brimbrettabrun, er góður skammbyssuskytta og spilar á píanó sem áhugamaður. Býr í ævintýralegu sumarhúsi í Cornwall á Englandi.

Justin Domingus — kerfisstjórnunarverkfræðingur sem vinnur í DevOps umhverfi með Kubernetes og skýjatækni. Hann nýtur þess að vera úti, drekka kaffi, krabba og sitja við tölvuna. Býr í Seattle, Washington, með yndislegum kött og enn yndislegri eiginkonu og bestu vinkonu, Adrienne.

» Nánari upplýsingar um bókina má finna á heimasíðu útgefanda
» efnisyfirlit
» Útdráttur

Fyrir Khabrozhiteley 25% afslátt með afsláttarmiða - Kubernetes

Við greiðslu á pappírsútgáfu bókarinnar er rafbók send með tölvupósti.

Heimild: www.habr.com

Bæta við athugasemd