PuppetConf 2016. Kubernetes para administradores de sistemas. Parte 3

PuppetConf 2016. Kubernetes para administradores de sistemas. Parte 1 de
PuppetConf 2016. Kubernetes para administradores de sistemas. Parte 2

Tomamos la aplicación Lobsters y creamos una nueva imagen con nuevos requisitos. Primero, ingrese el comando de implementación $ kubectl apply –f deployments / lobsters.yaml y envíe la aplicación al clúster, que debe realizar actualizaciones de actualización sucesivas para cada una de las instancias de aplicación disponibles de acuerdo con la política de actualización. Primero, el sistema se asegura de que cada instancia esté operativa y luego las destruye en el siguiente conjunto de contenedores.



Veamos cómo funcionó. Para hacer esto, volvemos a cargar el sitio, y ahora la falta de puntos blancos hará feliz a nuestro vendedor.



Como administrador del sistema, puede decir: "No hay HTTPS aquí, tales sitios son fáciles de hackear, ¡es peligroso!" ¿Cómo se puede resolver este problema? Creo que en su solución, Kubernetes puede actuar como un marco que permite al administrador del sistema implementar un enfoque creativo para el trabajo. Sería bueno si pudiera decir declarativamente: "Quiero obtener el certificado Let's Encrypt para este sitio, pero no quiero volver a implementar este contenedor". Quiero hacer esto dentro de mis capacidades, sin recurrir al equipo de desarrollo de aplicaciones para obtener ayuda. Kubernetes lo permite, ya que admite extensiones personalizadas.

Hablé sobre kubectl, pods, implementaciones, servicios, pero también tenemos tipos personalizados, tipos de recursos personalizados que se pueden obtener de Puppet. En Puppet, podemos definir nuevos tipos, para que podamos usar este sistema para nuestro trabajo.
Veamos cómo se ve en Kubernetes. En primer lugar, necesitamos una extensión para certificados, así es como se ve. Aquí tenemos nuestro propio espacio de nombres hightower.com, en el que se encuentra el objeto certificado.



Creamos una nueva extensión en Kubernetes usando el comando $ kubectl create –f extensions / certificate.yaml, y el almacenamiento se crea automáticamente en el backend y se administra este estado.



La aparición de este nuevo objeto requiere que use una nueva herramienta que rastree los cambios y tome medidas sobre el objeto del certificado. Es decir, esta herramienta en segundo plano debería interactuar con Let's Encrypt y obtener un certificado válido. Para esto uso el secreto: mostraré muy rápidamente cómo se hace esto.

Entonces, necesitamos un nuevo sub, y mostraré cuál es la diferencia en comparación con el código anterior. Estoy agregando nginx a un contenedor existente, por lo que no necesitamos contactar al equipo de desarrollo. Continuamos usando HTTPS simplemente colocando el recipiente en la parte superior de la chimenea existente.



Este contenedor acepta tráfico HTTPS y necesita un archivo de configuración para interactuar con el back-end. También necesito algunos certificados que nginx descarga del sistema de archivos, por lo que las variables de entorno no funcionan aquí. No escribí nginx, así que no puedo lograr que haga esto.



Así que solo agrego este contenedor justo dentro del hogar y analizo dos secretos.



El primer y más importante secreto es el certificado TLS, que debería provenir de Let's Encrypt. No voy a informar Let's Encrypt a mi aplicación, sino a mi sistema. Quiero controlar esta abstracción. Entonces ahora tengo que crear un archivo de configuración para nginx. Este es el archivo de configuración principal que se ve así.

Aquí se especifica el puerto 443 y se habilita SSL, que busca estos 2 archivos en el sistema de archivos, captura el tráfico y lo envía al host local 127.0.0.1 {000.



Esto es exactamente lo que escucha mi aplicación. Ahora crearé el mapa de configuración: el mapa de configuración de nginx con el siguiente comando.



Ahora, usando el comando $ kubectl get configmaps, coloco el mapa de configuración "nginx" en el sistema con el mismo nombre que el disco.



A continuación, debe crear un secreto, le recuerdo nuevamente: quiero que todo esté automatizado y no quiero interferir en el proceso de obtención de certificados. Para hacer esto, estoy desplegando una herramienta llamada "kube-cert-manager", y aquí está el resultado.



Estamos intentando obtener un certificado Let's Encrypt válido, en el que confiará mi navegador, e insertarlo en el servidor como secreto. Por lo tanto, para mi hogar no habrá diferencia en el hecho de que hemos complementado su contenido. Si recuerdas, todo esto se hace creando un tipo personalizado en Puppet.

Quizás sea una mala idea, pero ahora intentaré iniciar el controlador, que funcionará en segundo plano. No compilamos, no creamos proveedores, este demonio simplemente funciona en segundo plano y observa los cambios. Tan pronto como aparece el objeto de certificado, lo recibe con Let's Encrypt y lo inserta en el sistema en tiempo real sin demora. Entonces, uso el siguiente comando.



Esta cosa también tiene almacenamiento, por lo que podemos guardar todo lo que necesitamos. El gerente de certificación de kube-cert-manager tarda unos segundos en comenzar a funcionar.



Lo siguiente que debemos hacer es crear un objeto de certificado. Esto es lo que me defino, este es mi propio esquema. Estoy creando algo nuevo que Kubernetes no ha conocido hasta este momento, que dice que puedo obtener un certificado para el dominio lobsters.com.



Hay una dirección de correo electrónico y otra información necesaria para que Let's Encrypt me dé un certificado válido. Let's Encrypt me enviará un token de intercambio para ver si realmente poseo este dominio y necesitaré aplicar este token a mi DNS en Google Cloud. Si se aprueba el cheque, me darán un certificado real, que insertaré en mi sistema de archivos. Veamos cómo funciona esto ingresando el comando $ kubectl get pods.



Como puede ver, el administrador de certificados aún funciona. Veamos la información detallada sobre este proceso usando el comando $ kubectl describe pods kube-cert-manager, insertando el nombre del contenedor desde la primera línea de código.



Verá que el trabajo programado está en progreso. En este momento, el servidor está creando un volumen que, después de verificar y formatear, se montará en este servidor. Mientras este proceso está en curso, podemos ir más allá y terminar nuestro trabajo.

Entro en el comando kubectl create –f certificados / lobsters.yaml y obtengo el siguiente resultado.



A continuación, utilizo un comando que le permite ver los registros de varios contenedores. Destacaré el que se relaciona con mi objeto.



Ahora se está creando un registro DNS dentro de mi servidor DNS basado en la nube. Si actualizo la página que se muestra aquí, veré un nuevo token de intercambio con la extensión .txt.



Entonces, recibí el token de Let's Encrypt y ahora verifico que este registro DNS se haya distribuido a todos los servidores autorizados antes de decirle a Let's Encrypt que verifique esta entrada de texto en mi dominio.



Si esto funciona, me enviarán un certificado válido de regreso. La demostración de DNS en tiempo real es una mala idea. Sí, finalmente obtenemos el certificado. Let's Encrypt notó que el certificado desapareció de Kubernetes y lo insertó allí. Esto es genial, porque ahora ya tengo una interfaz de solicitud de certificado para todo lo que se ejecuta en Kubernetes.

Para asegurarme de que todo funciona correctamente, ingreso el comando $ kubectl get secrets y vemos un secreto para lobsters.hightowerlabs.com.



Ahora uso el comando $ kubectl delete secrets lobsters.hightowerlabs.com, ya que es un sistema declarativo, no eliminamos el objeto del certificado, sino que nos deshacemos del secreto asociado con él ubicado dentro de Kubernetes. Como resultado, debemos asegurarnos de que cuando se elimine este elemento, el sistema devolverá el certificado Let's Encrypt. Esto es muy similar a lo que hacemos en Puppet, solo que aquí sucede en línea.

Después de asegurarnos de que todo funciona, estamos volviendo a implementar nuestra aplicación nginx llamada "lobsters-secure", que garantizará la seguridad del nuevo dominio. Su imagen es similar a la versión anterior, pero la diferencia es que ponemos nginx aquí. Nginx recoge el enlace de secretos, luego Kubernetes lo inserta en el sistema de archivos, como resultado de lo cual obtengo un certificado válido para un dominio específico.

Para hacer esto, ingreso el comando $ kubectl apply –f deployments / lobsters-secure.yaml usando el mismo nombre para que este comando sobrescriba el estado existente. A continuación, se usa el comando $ kubectl get pods, que muestra que ahora está sucediendo una actualización continua, ya que nuestras definiciones han cambiado.

Una vez completada la actualización, está claro que la nueva definición se utiliza para esta aplicación. Quiero asegurarme de que el certificado sea válido para nuestro nombre DNS, para lo cual ingreso el comando $ kubectl get svc y copio la dirección IP del sitio de langostas.



Al ir a la pestaña Google Cloud, puede ver que esta dirección coincide con la dirección correspondiente al nombre de dominio lobsters.hightowerlabs.com. Ahora, si escribe lobsters.hightowerlabs.com en la barra de direcciones de su navegador , puede ver que tenemos un certificado válido.



Gracias, eso es todo lo que quería decir en el informe de Kubernetes para administradores del sistema.


Un poco de publicidad :)


Gracias por estar con nosotros. ¿Te gustan nuestros artículos? ¿Quieres ver más materiales interesantes? Apóyenos haciendo un pedido o recomendando a sus amigos VPS basado en la nube para desarrolladores desde $ 4.99 , un análogo único de servidores de nivel básico que inventamos para usted: toda la verdad sobre VPS (KVM) E5-2697 v3 (6 núcleos) 10GB DDR4 480GB SSD 1Gbps desde $ 19 o cómo dividir el servidor? (las opciones están disponibles con RAID1 y RAID10, hasta 24 núcleos y hasta 40GB DDR4).

Dell R730xd 2 veces más barato en el centro de datos Equinix Tier IV en Amsterdam? Solo tenemos 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TV desde $ 199 en los Países Bajos.Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - ¡desde $ 99! Lea sobre Cómo construir un edificio de infraestructura. clase c con servidores Dell R730xd E5-2650 v4 que cuestan 9,000 euros por un centavo?

All Articles