Libro "Kubernetes para DevOps"

Libro "Kubernetes para DevOps" Ola, veciños de Khabro! Kubernetes é un dos elementos clave do ecosistema de nube moderno. Esta tecnoloxía proporciona fiabilidade, escalabilidade e resistencia á virtualización de contedores. John Arundel e Justin Domingus falan sobre o ecosistema de Kubernetes e presentan solucións comprobadas aos problemas cotiáns. Paso a paso, crearás a túa propia aplicación nativa na nube e crearás a infraestrutura para apoiala, configurarás un ambiente de desenvolvemento e unha canalización de implantación continua que che axudará mentres traballes nas túas próximas aplicacións.

• Comeza cos contedores e Kubernetes desde o básico: non se precisa experiencia especial para aprender o tema. • Executa os teus propios clústeres ou elixe un servizo Kubernetes xestionado de Amazon, Google, etc. • Usa Kubernetes para xestionar o ciclo de vida do contedor e o consumo de recursos. • Optimice os clústeres en función do custo, rendemento, resistencia, potencia e escalabilidade. • Aprende as mellores ferramentas para desenvolver, probar e implantar as túas aplicacións. • Aproveitar as prácticas actuais da industria para garantir a seguridade e o control. • Implementa os principios DevOps en toda a túa empresa para que os equipos de desenvolvemento poidan actuar de forma máis flexible, rápida e eficiente.

Para quen é o libro?

O libro é máis relevante para os empregados dos departamentos de administración responsables dos servidores, aplicacións e servizos, así como para os desenvolvedores implicados na construción de novos servizos na nube ou na migración de aplicacións existentes a Kubernetes e á nube. Non te preocupes, non necesitas saber como traballar con Kubernetes ou contedores: ensinarémosche todo.

Os usuarios experimentados de Kubernetes tamén atoparán moito valor, cunha cobertura en profundidade de temas como RBAC, implantación continua, xestión de datos sensibles e observabilidade. Agardamos que as páxinas do libro conteñan algo interesante para ti, independentemente das túas habilidades e experiencia.

Que preguntas responde o libro?

Mentres planeabamos e escribíamos o libro, falamos sobre a tecnoloxía na nube e Kubernetes con centos de persoas, falando con líderes e expertos do sector, así como con novatos. A continuación móstranse preguntas seleccionadas que lles gustaría que se contestasen nesta publicación.

  • "Interésame por que deberías dedicar tempo a esta tecnoloxía. Que problemas me axudará a resolver a min e ao meu equipo?"
  • "Kubernetes parece interesante, pero ten unha barreira de entrada bastante alta. Preparar un exemplo sinxelo non é difícil, pero a posterior administración e depuración é desalentador. Gustaríanos obter consellos fiables sobre como a xente xestiona os clústeres de Kubernetes no mundo real e sobre os problemas que é probable que atopemos".
  • "O consello subxectivo sería útil. O ecosistema de Kubernetes ofrece aos novos equipos demasiadas opcións para escoller. Cando hai varias formas de facer o mesmo, como sabes cal é a mellor? Como facer unha elección?

E quizais a máis importante de todas as preguntas:

  • "Como podo usar Kubernetes sen interromper a miña empresa?"

Fragmento. Configuración e obxectos secretos

A posibilidade de separar a lóxica dunha aplicación Kubernetes da súa configuración (é dicir, de calquera valor ou configuración que poida cambiar co tempo) é moi útil. Os valores de configuración adoitan incluír configuracións específicas do contorno, enderezos DNS de servizos de terceiros e credenciais de autenticación.

Por suposto, todo isto pódese poñer directamente no código, pero este enfoque non é o suficientemente flexible. Por exemplo, cambiar un valor de configuración requiriría que construíse e implementase de novo o seu código. Unha solución moito mellor sería separar a configuración do código e lelo desde un ficheiro ou variables de ambiente.

Kubernetes ofrece varias formas diferentes de xestionar a configuración. En primeiro lugar, pode pasar valores á aplicación a través das variables de ambiente especificadas na especificación do envoltorio de pod (consulte "Variables de ambiente" na páxina 192). En segundo lugar, os datos de configuración pódense almacenar directamente en Kubernetes mediante ConfigMap e obxectos Secret.

Neste capítulo, exploramos estes obxectos en detalle e analizamos algúns enfoques prácticos para xestionar a configuración e os datos confidenciais mediante unha aplicación de demostración.

Actualizando pod shells cando cambia a configuración

Imaxina que tes unha implementación no teu clúster e queres cambiar algúns valores no seu ConfigMap. Se utilizas o gráfico Helm (consulta "Helm: Xestor de paquetes para Kubernetes" na páxina 102), podes detectar automaticamente un cambio de configuración e recargar os teus pod shells nun só truco. Engade a seguinte anotación á túa especificación de implantación:

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

O modelo de implantación agora contén unha suma de verificación dos parámetros de configuración: se se modifican os parámetros, a suma actualizarase. Se executas a actualización de Helm, Helm detectará que a especificación de implantación cambiou e reiniciará todos os shells de pod.

Datos confidenciais en Kubernetes

Xa sabemos que o obxecto ConfigMap proporciona un mecanismo flexible para almacenar e acceder aos datos de configuración nun clúster. Non obstante, a maioría das aplicacións teñen información confidencial e sensible, como contrasinais ou claves API. Tamén se pode almacenar en ConfigMap, pero esta solución non é a ideal.

En cambio, Kubernetes ofrece un tipo especial de obxecto deseñado para almacenar datos confidenciais: Segredo. A continuación, vexamos un exemplo de como se pode usar este obxecto na nosa aplicación de demostración.

Para comezar, bótalle unha ollada ao manifesto de Kubernetes para o obxecto Secret (consulta hello-secret-env/k8s/secret.yaml):

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

Neste exemplo, a chave privada magicWord é xyzzy (en.wikipedia.org/wiki/Xyzzy_(informática)). A palabra xyzzy é xeralmente moi útil no mundo dos ordenadores. Do mesmo xeito que ConfigMap, pode almacenar varias claves e valores nun obxecto Secret. Aquí, para simplificar, usamos só un par clave-valor.

Usando obxectos secretos como variables de ambiente

Do mesmo xeito que ConfigMap, o obxecto Secret pode estar dispoñible no contedor como variables de ambiente ou como ficheiro no seu disco. No seguinte exemplo, asignaremos unha variable de ambiente ao valor de Secret:

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

Executa o seguinte comando no repositorio de demostración para aplicar os manifestos:

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

Como antes, reenvía o porto local á implementación para ver o resultado no teu navegador:

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

Ao abrir un enderezo localhost:9999/ deberías ver o seguinte:

The magic word is "xyzzy"

Escribir obxectos secretos en ficheiros

Neste exemplo, achegaremos o obxecto Secret ao contedor como un ficheiro. O código atópase no cartafol do ficheiro Hello-secret do repositorio de demostración.

Para conectar Secret como un ficheiro, utilizaremos a seguinte implementación:

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

Como na subsección "Creación de ficheiros de configuración a partir de obxectos ConfigMap" na p. 240, creamos un volume (neste caso demo-secret-volume) e montámolo no contedor na sección volumeMounts da especificación. O campo mountPath é /secrets, polo que Kubernetes creará un ficheiro neste cartafol por cada par clave/valor definido no obxecto Secret.

No noso exemplo, definimos só un par clave-valor chamado magicWord, polo que o manifesto creará un único ficheiro de só lectura /secrets/magicWord con datos confidenciais no contedor.

Se aplicas este manifesto do mesmo xeito que o exemplo anterior, deberías obter o mesmo resultado:

The magic word is "xyzzy"

Lectura de obxectos secretos

Na sección anterior, usamos o comando kubectl describe para mostrar o contido dun ConfigMap. Pódese facer o mesmo con Secret?

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

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

Data
====
magicWord: 5   bytes

Teña en conta que os datos en si non se mostran. Os obxectos secretos en Kubernetes son de tipo Opaco, o que significa que o seu contido non se mostra en Kubectl describe a saída, as entradas de rexistro ou o terminal, polo que é imposible revelar información confidencial accidentalmente.

Para ver unha versión YAML codificada de datos confidenciais, use o comando kubectl get:

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

base 64

Que é eHl6enk=, completamente diferente do noso valor orixinal? Este é en realidade un obxecto secreto, representado na codificación base64. Base64 é un esquema para codificar datos binarios arbitrarios como unha cadea de caracteres.

Dado que a información confidencial pode ser binaria e non saír (como é o caso dunha clave de cifrado TLS), os obxectos secretos sempre almacénanse en formato base64.

O texto beHl6enk= é a versión codificada en base64 da nosa palabra secreta xyzzy. Podes verificalo executando o comando base64 —decode no terminal:

echo "eHl6enk=" | base64 --decode
xyzzy

Polo tanto, aínda que Kubernetes protexeche contra a saída accidental de datos confidenciais no terminal ou ficheiros de rexistro, se tes permisos de lectura sobre obxectos secretos nun espazo de nomes específico, eses datos pódense basear e decodificar posteriormente.

Se precisa codificar algún texto en base64 (por exemplo, para poñelo nun Segredo), use o comando base64 sen argumentos:

echo xyzzy | base64
eHl6enkK

Acceso a obxectos secretos

Quen pode ler e editar obxectos secretos? Isto determínao RBAC, un mecanismo de control de acceso (describirémolo en detalle na subsección "Introdución ao control de acceso baseado en funcións" na páxina 258). Se estás executando un clúster que non ten RBAC ou non está activado, todos os teus obxectos secretos están dispoñibles para calquera usuario e contenedor (explicaremos máis tarde que non deberías ter ningún clúster de produción sen RBAC).

Cifrado pasivo de datos

Que pasa cos que teñen acceso á base de datos etcd onde Kubernetes almacena toda a súa información? Poden ler datos confidenciais sen ter permiso para ler obxectos secretos a través da API?

Desde a versión 1.7, Kubernetes admite o cifrado pasivo de datos. Isto significa que a información confidencial dentro de etcd almacénase cifrada no disco e non pode ser lida nin sequera por aqueles con acceso directo á base de datos. Para descifralo, necesitas unha clave que só ten o servidor da API de Kubernetes. Nun clúster configurado correctamente, o cifrado pasivo debería estar activado.

Podes comprobar se o cifrado pasivo funciona no teu clúster deste xeito:

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

Se non ves a marca experimental-encryption-provider-config, o cifrado pasivo non está activado. Cando utilizas Google Kubernetes Engine ou outros servizos de xestión de Kubernetes, os teus datos cífranse mediante un mecanismo diferente, polo que a marca non estará presente. Consulta co teu provedor de Kubernetes para ver se o contido etcd está cifrado.

Almacenamento de datos confidenciais

Hai algúns recursos de Kubernetes que nunca deberían eliminarse do clúster, como os obxectos secretos moi sensibles. Pode protexer un recurso para evitar que se elimine mediante unha anotación proporcionada polo xestor de Helm:

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

Estratexias de xestión de obxectos secretos

No exemplo da sección anterior, os datos confidenciais estaban protexidos contra accesos non autorizados inmediatamente despois de ser almacenados no clúster. Pero nos ficheiros de manifesto gardábanse como texto simple.

Nunca debe colocar información confidencial en ficheiros que están en control de versión. Como pode xestionar e almacenar esta información de forma segura antes de aplicala ao seu clúster de Kubernetes?

Podes escoller calquera ferramenta ou estratexia para manexar datos confidenciais nas túas aplicacións, pero aínda terás que responder polo menos ás seguintes preguntas.

  • Onde deberían almacenarse os datos sensibles para que sexan moi accesibles?
  • Como facer que os datos confidenciais sexan accesibles para as túas aplicacións activas?
  • Que debería pasar coas túas aplicacións cando substitúes ou editas datos confidenciais?

Sobre os autores

John Arundel é un consultor con 30 anos de experiencia no sector da informática. Escribiu varios libros e traballa con moitas empresas de diferentes países, asesorándolles sobre infraestruturas nativas na nube e Kubernetes. No seu tempo libre gústalle facer surf, é un bo tirador de pistolas e toca o piano como afeccionado. Vive nunha casiña de conto de fadas en Cornualles, Inglaterra.

Justin Domingus — enxeñeiro de administración de sistemas que traballa nun ambiente DevOps con Kubernetes e tecnoloxías na nube. Gústalle pasar o tempo ao aire libre, beber café, cangrexo e sentarse ante o ordenador. Vive en Seattle, Washington, cun gato marabilloso e unha esposa e mellor amiga aínda máis marabillosa, Adrienne.

» Podes atopar máis detalles sobre o libro en sitio web da editorial
» Índice analítico
» Extracto

Para Khabrozhiteley 25% de desconto usando o cupón - Kubernetes

Tras o pagamento da versión en papel do libro, enviarase un libro electrónico por correo electrónico.

Fonte: www.habr.com

Engadir un comentario