Libru "Kubernetes per DevOps"

Libru "Kubernetes per DevOps" Hola, residenti di Khabro! Kubernetes hè unu di l'elementi chjave di l'ecosistema di nuvola mudernu. Sta tecnulugia furnisce affidabilità, scalabilità è resistenza à a virtualizazione di u containeru. John Arundel è Justin Domingus parlanu di l'ecosistema Kubernetes è introducenu suluzioni pruvati à i prublemi di ogni ghjornu. Passu à passu, custruite a vostra propria applicazione nativa in nuvola è creà l'infrastruttura per sustene, stabilisce un ambiente di sviluppu è un pipeline di implementazione cuntinuu chì vi aiuterà mentre travagliate nantu à e vostre prossime applicazioni.

• Accuminciate cù cuntenituri è Kubernetes da i principii: ùn hè micca necessariu una sperienza speciale per amparà u tema. • Eseguite i vostri clusters o sceglite un serviziu Kubernetes amministratu da Amazon, Google, etc. • Aduprate Kubernetes per gestisce u ciclu di vita di u containeru è u cunsumu di risorse. • Optimize clusters basatu annantu à u costu, u rendiment, a resilienza, a putenza è a scalabilità. • Amparate i migliori arnesi per sviluppà, pruvà è implementà e vostre applicazioni. • Leverage e pratiche di l'industria attuale per assicurà a sicurità è u cuntrollu. • Implementà i principii DevOps in tutta a vostra cumpagnia per chì i gruppi di sviluppu ponu agisce in modu più flexible, rapidu è efficiente.

Per quale hè u libru ?

U libru hè più pertinente per l'impiegati di i dipartimenti amministrativi rispunsevuli di i servitori, l'applicazioni è i servizii, è ancu per i sviluppatori implicati in a custruzzione di novi servizii di nuvola o in migrazione di applicazioni esistenti à Kubernetes è u nuvulu. Ùn vi preoccupate, ùn avete micca bisognu di sapè cumu travaglià cù Kubernetes o cuntenituri - vi insegneremu tuttu.

L'utilizatori sperimentati di Kubernetes truveranu ancu assai valore, cù una copertura approfondita di temi cum'è RBAC, implementazione cuntinua, gestione di dati sensibili è osservabilità. Speremu chì e pagine di u libru certamenti cuntene qualcosa interessante per voi, indipendentemente da e vostre cumpetenze è sperienza.

Chì dumande risponde u libru?

Mentre a pianificazione è a scrittura di u libru, avemu discututu a tecnulugia di nuvola è Kubernetes cù centinaie di persone, parlendu cù i capi di l'industria è l'esperti, è ancu novi novi. Quì sottu sò e dumande selezziunate chì vulianu vede risposte in questa publicazione.

  • "Sò interessatu à perchè duvete passà tempu nantu à sta tecnulugia. Chì prublemi m'aiuterà à risolve à mè è à a mo squadra?
  • "Kubernetes pare interessante, ma hà una barriera abbastanza alta à l'ingressu. A preparazione di un esempiu simplice ùn hè micca difficiule, ma più amministrazione è debugging hè intimidatori. Vuleriamu avè cunsiglii affidabili nantu à cumu a ghjente gestisce i clusters Kubernetes in u mondu reale è quali prublemi avemu prubabilmente scuntrà ".
  • "I cunsiglii subjectivi seranu d'aiutu. L'ecosistema Kubernetes dà à i novi squadre troppu opzioni per sceglie. Quandu ci sò parechje manere di fà a listessa cosa, cumu sapete quale hè u megliu? Cumu fà una scelta?

È forsi a più impurtante di tutte e dumande:

  • "Cumu possu aduprà Kubernetes senza disturbà a mo cumpagnia?"

Estratto. Cunfigurazione è oggetti secreti

A capacità di separà a logica di una applicazione Kubernetes da a so cunfigurazione (vale à dì, da qualsiasi valori o paràmetri chì ponu cambià cù u tempu) hè assai utile. I valori di cunfigurazione generalmente includenu paràmetri specifichi di l'ambiente, indirizzi DNS di serviziu di terzu, è credenziali di autentificazione.

Di sicuru, tuttu questu pò esse messu direttamente in u codice, ma questu approcciu ùn hè micca abbastanza flexible. Per esempiu, mudificà un valore di cunfigurazione allora avete bisognu di custruisce è implementà u vostru codice di novu. Una suluzione assai megliu seria di separà a cunfigurazione da u codice è leghje da un schedariu o variabili di l'ambiente.

Kubernetes furnisce parechje modi diffirenti per gestisce a cunfigurazione. Prima, pudete passà i valori à l'applicazione per mezu di e variabili di l'ambiente specificate in a specificazione di u pod wrapper (vede "Variabili di l'ambiente" à a pagina 192). Siconda, i dati di cunfigurazione ponu esse guardati direttamente in Kubernetes usendu ConfigMap è oggetti Secret.

In questu capitulu, esploremu questi ogetti in dettagliu è fighjemu alcuni approcci pratichi per gestisce a cunfigurazione è e dati sensibili utilizendu una applicazione demo.

Aghjurnà i pod shells quandu a cunfigurazione cambia

Imagine chì avete una implementazione in u vostru cluster è vulete cambià alcuni valori in u so ConfigMap. Se aduprate u graficu Helm (vede "Helm: Gestore di pacchetti per Kubernetes" in a pagina 102), pudete detectà automaticamente un cambiamentu di cunfigurazione è ricaricà i vostri pod shells in un solu truccu. Aghjunghjite a seguente annotazione à a vostra specificazione di implementazione:

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

U mudellu di implementazione cuntene avà un checksum di paràmetri di cunfigurazione: se i paràmetri sò cambiati, a summa serà aghjurnata. Se eseguite l'upgrade di Helm, Helm detecterà chì a specificazione di implementazione hè cambiata è riavviarà tutti i pod shells.

Dati sensibili in Kubernetes

Sapemu digià chì l'ughjettu ConfigMap furnisce un mecanismu flexible per almacenà è accede à e dati di cunfigurazione in un cluster. Tuttavia, a maiò parte di l'applicazioni anu infurmazioni chì sò sensibili è sensittivi, cum'è password o chjavi API. Si pò ancu esse guardatu in ConfigMap, ma sta suluzione ùn hè micca ideale.

Invece, Kubernetes offre un tipu speciale d'ughjettu cuncepitu per almacenà dati sensittivi: Secret. Dopu, fighjemu un esempiu di cumu questu ughjettu pò esse usatu in a nostra applicazione demo.

Per cumincià, fate un ochju à u manifestu Kubernetes per l'ughjettu Secretu (vede hello-secret-env/k8s/secret.yaml):

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

In questu esempiu, a chjave privata magicWord hè xyzzy (en.wikipedia.org/wiki/Xyzzy_(computing)). A parolla xyzzy hè generalmente assai utile in u mondu di l'urdinatore. Simile à ConfigMap, pudete almacenà parechje chjave è valori in un ughjettu Secretu. Quì, per simplicità, usemu solu una coppia chjave-valore.

Utilizà l'uggetti secreti cum'è Variabili d'ambiente

Cum'è ConfigMap, l'ughjettu Secretu pò esse dispunibule in u cuntinuu cum'è variabili di l'ambiente o cum'è un schedariu nantu à u so discu. In l'esempiu seguente, assignemu una variabile d'ambiente à u valore da Secret:

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

Eseguite u cumandimu seguitu in u repositoriu demo per applicà i manifesti:

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

Cum'è prima, trasmette u portu lucale à a implementazione per vede u risultatu in u vostru navigatore:

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

Quandu apre un indirizzu localhost:9999/ duvete vede i seguenti:

The magic word is "xyzzy"

Scrive oggetti secreti à i schedari

In questu esempiu, aghjunghje l'ughjettu Secret à u cuntinuu cum'è un schedariu. U codice hè situatu in u cartulare di u schedariu hello-secret di u repository demo.

Per cunnette Secret cum'è un schedariu, useremu a seguente implementazione:

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

Cum'è in a subsezzione "Creazione di schedarii di cunfigurazione da l'uggetti ConfigMap" in p. 240, avemu criatu un voluminu (in questu casu demo-secret-volume) è muntate à u cuntinuu in a sezione volumeMounts di a specificazione. U campu mountPath hè / secreti, cusì Kubernetes creà un schedariu in questu cartulare per ogni coppia chjave / valore definita in l'ughjettu Secret.

In u nostru esempiu, avemu definitu solu un paru chjave-valore chjamatu magicWord, cusì u manifestu creà un unicu schedariu di lettura / secrets/magicWord cù dati sensibili in u containeru.

Sè applicà stu manifestu in u listessu modu cum'è l'esempiu precedente, duvete ottene u listessu risultatu:

The magic word is "xyzzy"

Lettura di l'oggetti secreti

In a sezione precedente, avemu usatu u cumandamentu di descrizzione di kubectl per vede u cuntenutu di un ConfigMap. Si pò fà u listessu cù Secret?

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

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

Data
====
magicWord: 5   bytes

Per piacè nutate chì i dati stessi ùn sò micca visualizati. L'uggetti secreti in Kubernetes sò di tipu Opaque, chì significa chì u so cuntenutu ùn hè micca mostratu in kubectl descrizanu output, log entry, o terminal, facendu impussibile di revelà accidentalmente infurmazione sensitiva.

Per vede una versione YAML codificata di dati sensittivi, utilizate u kubectl get command:

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

basa64

Chì ghjè eHl6enk=, cumplitamenti sfarente da u nostru valore originale? Questu hè veramente un ughjettu Secretu, rapprisintatu in codificazione base64. Base64 hè un schema per codificà dati binari arbitrarii cum'è una stringa di caratteri.

Perchè l'infurmazione sensitiva pò esse binaria è micca output (cum'è u casu cù una chjave di criptografia TLS), l'uggetti secreti sò sempre guardati in formatu base64.

U testu beHl6enk = hè a versione codificata in base64 di a nostra parola secreta xyzzy. Pudete verificà questu eseguendu u cumandimu base64 -decode in u terminal:

echo "eHl6enk=" | base64 --decode
xyzzy

Dunque, mentri Kubernetes vi prutege da a produzzione accidintali di dati sensibili in u terminale o i fugliali di log, se avete lettu permessi nantu à l'uggetti secreti in un spaziu di nome specificu, quelli dati ponu esse basati è successivamente decodificati.

Sè avete bisognu di codificà in base64 qualchì testu (per esempiu, per mette in un Secret), utilizate u cumandamentu base64 senza argumenti:

echo xyzzy | base64
eHl6enkK

Accessu à l'Oggetti Secreti

Quale pò leghje è edità l'uggetti secreti? Questu hè determinatu da RBAC, un mecanismu di cuntrollu di l'accessu (ne discuteremu in dettagliu in a sottosezzione "Introduzione à u Controlu di Accessu Basatu in Role" in a pagina 258). Sè vo site in un cluster chì ùn hà micca RBAC o ùn hè micca attivatu, tutti i vostri oggetti secreti sò dispunibuli per qualsiasi utilizatori è cuntenituri (spiegheremu dopu chì ùn deve micca avè alcun cluster di produzzione senza RBAC).

Criptazione di dati passiva

E quelli chì anu accessu à a basa di dati etcd induve Kubernetes guarda tutte e so informazioni? Puderanu leghje e dati sensittivi senza avè permessu di leghje l'uggetti Secret via l'API?

Dapoi a versione 1.7, Kubernetes supporta a criptografia di dati passiva. Questu significa chì l'infurmazioni sensibili in l'etcd sò almacenati criptati nantu à u discu è ùn ponu micca leghje ancu da quelli chì anu accessu direttu à a basa di dati. Per descifrallu, avete bisognu di una chjave chì solu u servitore API di Kubernetes hà. In un cluster cunfiguratu bè, a criptografia passiva deve esse attivata.

Pudete verificà se a criptografia passiva funziona in u vostru cluster in questu modu:

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

Se ùn vede micca a bandiera experimental-encryption-provider-config, a criptografia passiva ùn hè micca attivata. Quandu utilizate Google Kubernetes Engine o altri servizii di gestione Kubernetes, i vostri dati sò criptati cù un mecanismu diversu, perchè a bandiera ùn serà micca presente. Verificate cù u vostru venditore Kubernetes per vede se u cuntenutu etcd hè criptatu.

Salvà dati cunfidenziale

Ci hè parechje risorse di Kubernetes chì ùn deve mai esse sguassate da u cluster, cum'è l'ogetti secreti altamente sensibili. Pudete prutege una risorsa da esse eliminata usendu una annotazione furnita da u manager Helm:

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

Strategie di Gestione d'Ughjetti Secreti

In l'esempiu da a sezione precedente, i dati sensittivi sò stati prutetti da l'accessu micca autorizatu immediatamente dopu esse guardatu in u cluster. Ma in i schedarii manifesti sò stati guardati cum'è testu chjaru.

Ùn deve mai mette infurmazione cunfidenziale in i schedari chì sò in cuntrollu di versione. Cumu pudete gestisce in modu sicuru è almacenà sta informazione prima di applicà à u vostru cluster Kubernetes?

Pudete sceglie qualsiasi arnesi o strategie per trattà e dati sensittivi in ​​e vostre applicazioni, ma avete sempre bisognu di risponde à almenu e seguenti dumande.

  • Induve deve esse guardatu i dati sensibili in modu chì hè assai accessibile?
  • Cumu rende i dati sensibili accessibili à e vostre applicazioni attive?
  • Chì duverebbe succede à e vostre applicazioni quandu rimpiazzate o editate dati sensibili?

À propositu di l'autori

Ghjuvanni Arundel hè un cunsultante cù 30 anni di sperienza in l'industria di l'informatica. Hà scrittu parechji libri è travaglia cù parechje cumpagnie di diversi paesi, cunsigliendu nantu à l'infrastruttura nativa di nuvola è Kubernetes. In u so tempu liberu, li piace u surf, hè un bon tiratore di pistola, è ghjucà u pianoforte cum'è dilettante. Vive in una casetta di fata in Cornwall, in Inghilterra.

Justin Domingus - ingegnere di amministrazione di sistemi chì travaglia in un ambiente DevOps cù Kubernetes è tecnulugia di nuvola. Li piace à passà u tempu fora, beie caffè, crabbing, è à pusà à l'urdinatore. Vive in Seattle, Washington, cù un gattu maravigliosu è una moglia ancu più maravigliosa è u megliu amicu, Adrienne.

» Più dettagli nantu à u libru si trovanu à situ web di l'editore
» Indice di cuntenutu
» Strattu

Per Khabrozhiteley 25% di scontu cù coupon - Kubernetes

Dopu u pagamentu di a versione carta di u libru, un libru elettronicu serà mandatu per e-mail.

Source: www.habr.com

Add a comment