Mejores prácticas de Kubernetes. Mapeo de servicios externos

Mejores prácticas de Kubernetes. Creación de contenedores pequeños
Mejores prácticas de Kubernetes. Organización de Kubernetes con el espacio de nombres
Mejores prácticas de Kubernetes. Verificación de la viabilidad de Kubernetes mediante pruebas de Readiness y Liveness.
Mejores prácticas de Kubernetes. Configuración de solicitudes y límites de recursos
Mejores prácticas de Kubernetes. Desactivación correcta de Terminate

Si eres como la mayoría de las personas, probablemente estés utilizando recursos que funcionan fuera de tu clúster. Tal vez estés usando la API de Taleo para enviar mensajes de texto o analizando imágenes con la API de Google Cloud Vision.

Si utilizas el mismo endpoint — el punto de recepción de solicitudes en el servidor en todos tus entornos y no planeas mover tus servidores a Kubernetes, es completamente normal tener el endpoint del servicio directamente en tu código. Sin embargo, hay muchos otros escenarios posibles. En esta serie de 'Mejores Prácticas de Kubernetes' aprenderás cómo utilizar los mecanismos integrados de Kubernetes para descubrir servicios tanto dentro como fuera del clúster.

Como ejemplo de un servicio externo ampliamente utilizado, podemos mencionar una base de datos que opera fuera del clúster de Kubernetes. A diferencia de bases de datos en la nube como Google Cloud Data Store o Google Cloud Spanner, que utilizan un único endpoint para todos los tipos de acceso, la mayoría de las bases de datos tienen endpoints separados para diferentes circunstancias.
Las mejores prácticas para el uso de bases de datos tradicionales, como MySQL y MongoDB, generalmente implican que te conectes a diferentes componentes para diferentes entornos. Puede que tengas una máquina grande para datos de producción y una más pequeña para el entorno de prueba. Cada una de ellas tendrá su propia dirección IP o nombre de dominio, pero seguro que no querrás cambiar tu código al pasar de un entorno a otro. Por lo tanto, en lugar de codificar estas direcciones de forma rígida, puedes utilizar el servicio de descubrimiento de servicios externos basado en DNS integrado en Kubernetes de la misma manera que lo haces para los servicios nativos de Kubernetes.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

Supongamos que tienes una base de datos MongoDB en Google Compute Engine. Permanecerás atrapado en este mundo híbrido hasta que consigas moverla a un clúster.

Afortunadamente, puedes usar servicios estáticos de Kubernetes para facilitarte un poco la vida. En este ejemplo, he creado un servidor MongoDB utilizando Google Cloud Launcher. Como se ha creado en la misma red (o VPC del clúster de Kubernetes), se accede a él mediante una dirección IP interna de alto rendimiento.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

En Google Cloud, esta es la configuración predeterminada, por lo que no necesitas hacer ninguna configuración. Ahora que hay una dirección IP, el primer paso consiste en crear un servicio. Cabe notar que para este servicio no hay selectores de pods. Es decir, hemos creado un servicio que no sabrá a dónde enviar el tráfico. Esto permitirá crear manualmente un objeto de endpoint que recibirá el tráfico de este servicio.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

El siguiente ejemplo de código muestra que los endpoints definen la dirección IP para la base de datos, utilizando el mismo nombre mongo que el servicio.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

Kubernetes utilizará todas las direcciones IP para encontrar los endpoints, como si fueran pods normales de Kubernetes, así que ahora puedes acceder a la base de datos usando una simple cadena de conexión al nombre mongodb://mongo. No es necesario utilizar direcciones IP en tu código.

Si en el futuro las direcciones IP cambian, simplemente puedes actualizar los endpoints con la nueva dirección IP, y tus aplicaciones no necesitarán cambiar de ninguna manera adicional.

Si utilizas una base de datos alojada en un host de terceros, lo más probable es que los propietarios del host te hayan proporcionado un identificador de recurso unificado URI para conectarte. Así que si te dieron una dirección IP, puedes simplemente utilizar el método anterior. Este ejemplo muestra que tengo dos bases de datos MongoDB alojadas en el host mLab.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

Una de ellas es la base de datos de desarrollo y la otra es la base de producción. Las cadenas de conexión para estas bases de datos son las siguientes: mLab te proporciona un URI dinámico y un puerto dinámico. Como puedes ver, son diferentes.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

Para abstraernos de esto, usamos Kubernetes y nos conectamos a la base de datos de desarrollo. Puedes crear un nombre de servicio externo en Kubernetes, que te proporcionará un servicio estático que redirigirá el tráfico hacia el servicio externo.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

Este servicio realizará una simple redirección CNAME a nivel de núcleo, lo que tendrá un impacto mínimo en el rendimiento. Gracias a esto, puedes usar una cadena de conexión más simple.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

Pero dado que el nombre externo utiliza redirección CNAME, no puede realizar la reasignación de puertos. Por lo tanto, esta solución es aplicable solo para puertos estáticos y no puede usarse con puertos dinámicos. Sin embargo, el mLab Free Tier proporciona por defecto un número de puerto dinámico, y no puedes cambiar esto. Esto significa que para dev y prod necesitas diferentes cadenas de conexión. Lo malo es que necesitarás codificar el número de puerto de forma rígida. Entonces, ¿cómo hacer que la reasignación de puertos funcione?

El primer paso es obtener la dirección IP del URI. Si ejecutas el comando nslookup, hostname o haces ping al URI, podrás obtener la dirección IP de la base de datos. Si el servicio te devuelve varias direcciones IP, todas estas direcciones se pueden usar en los puntos finales del objeto.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

Es importante recordar que las direcciones IP de los URI pueden cambiar sin previo aviso, por lo que es bastante arriesgado usarlas en prod. Con una dirección IP de este tipo, puedes conectarte a una base de datos remota sin especificar un puerto. Así, el servicio de Kubernetes realiza la reasignación de puertos de forma bastante transparente.

Mejores prácticas de Kubernetes. Mapeo de servicios externos

El mapeo, o la asignación de recursos externos a internos, te permite usar estos servicios dentro del clúster en el futuro de manera flexible, minimizando los esfuerzos de refactorización. También facilita la gestión y proporciona una comprensión de qué servicios externos usa tu empresa.

La continuación será muy pronto...

Reproducir video

Un poco de publicidad 🙂

Gracias por permanecer con nosotros. ¿Te gustan nuestros artículos? ¿Quieres ver más contenido interesante? Apóyanos haciendo un pedido o recomendando a tus conocidos, VPS en la nube para desarrolladores desde $4.99, un análogo único de servidores entry-level que hemos diseñado para Ti: Toda la verdad sobre VPS (KVM) E5-2697 v3 (6 núcleos) 10GB DDR4 480GB SSD 1Gbps desde $19, o cómo dividir correctamente un servidor? (disponibles opciones con RAID1 y RAID10, hasta 24 núcleos y hasta 40GB DDR4).

¿Dell R730xd a mitad de precio en el centro de datos Equinix Tier IV en Ámsterdam? Solo aquí 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 TB desde $199 ¡en los Países Bajos! Dell R420 — 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB — ¡desde $99! Lee sobre cómo Construir infraestructura de clase empresarial usando servidores Dell R730xd E5-2650 v4 que cuestan 9000 euros a un precio asequible?

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster