En este documento se ofrece una descripción general del descubrimiento de servicios basado en DNS de Kubernetes y de cómo se puede usar con Kf.
Cuándo usar el descubrimiento de servicios de Kubernetes con Kf
Las aplicaciones que necesiten localizar servicios de respaldo de forma coherente, independientemente de dónde se hayan implementado, pueden usar el descubrimiento de servicios de Kubernetes. Por ejemplo, un equipo puede querer usar un URI común en su configuración que siempre apunte a la pasarela SMTP local para desacoplar el código del entorno en el que se ejecuta.
El descubrimiento de servicios ayuda a los equipos de aplicaciones de las siguientes formas:
- Reducir la cantidad de configuración por entorno.
- Desacoplar aplicaciones cliente y servidor.
- Permite que las aplicaciones se puedan usar en nuevos entornos.
Puedes usar el descubrimiento de servicios de Kubernetes en los siguientes casos:
- Las aplicaciones usan las configuraciones de DNS de su contenedor para resolver hosts.
- Las aplicaciones se despliegan con sus servicios de respaldo en el mismo clúster o espacio de nombres de Kubernetes.
- Los servicios de respaldo tienen un servicio de Kubernetes asociado. Kf los crea para cada aplicación.
- Las políticas de red de Kubernetes permiten el tráfico entre una aplicación y el servicio de Kubernetes con el que necesita comunicarse. Kf crea estas políticas en cada espacio de Kf.
No debes usar el descubrimiento de servicios de Kubernetes si:
- Las aplicaciones deben conmutar por error entre varios clústeres.
- Anulas el resolvedor de DNS que usa tu aplicación.
- Las aplicaciones necesitan tipos específicos de balanceo de carga.
Cómo funciona el descubrimiento de servicios de Kubernetes
El descubrimiento de servicios de Kubernetes funciona modificando la configuración de DNS de los contenedores que se ejecutan en un nodo de Kubernetes. Cuando una aplicación busca un nombre de dominio no cualificado, el resolver de DNS local intentará primero resolver el nombre en el clúster local.
Los dominios que no tengan varias partes se resolverán en los nombres de los servicios de Kubernetes del espacio de nombres del contenedor. Cada aplicación de Kf crea un servicio de Kubernetes con el mismo nombre. Si se implementan dos aplicaciones de Kf ping
y pong
en el mismo espacio de Kf, ping
podría usar la URL http://pong
para enviar tráfico al otro servicio.
Los dominios con un solo punto se resolverán en los servicios de Kubernetes del espacio de nombres de Kubernetes con el mismo nombre que la etiqueta que aparece después del punto. Por ejemplo, si hubiera una base de datos PostgreSQL con un servicio customers
en el espacio de nombres database
, una aplicación de otro espacio de nombres podría resolverlo mediante postgres://customers.database
.
Cómo usar el descubrimiento de servicios con Kf
El descubrimiento de servicios basado en DNS de Kubernetes se puede usar en cualquier aplicación de Kf. Cada aplicación de Kf crea un servicio de Kubernetes con el mismo nombre, y cada espacio de Kf crea un espacio de nombres de Kubernetes con el mismo nombre.
- Hacer referencia a una aplicación de Kf en el espacio actual con
protocol://app-name
. - Hacer referencia a una aplicación de Kf en otro espacio con
protocol://app-name.space-name
. - Hacer referencia a una aplicación de Kf en el espacio actual que escucha en un puerto personalizado mediante
protocol://app-name:port
. - Hacer referencia a una aplicación de Kf en un espacio diferente que esté escuchando
un puerto personalizado mediante
protocol://app-name.space-name:port
.
Prácticas recomendadas
Las aplicaciones que van a ser el destino de la detección de servicios basada en DNS deben tener comprobaciones de estado frecuentes para asegurarse de que se añaden y se eliminan rápidamente del grupo de hosts que aceptan conexiones.
Las aplicaciones que usen la detección de servicios basada en DNS no deben almacenar en caché las direcciones IP de los servicios resueltos, ya que no se garantiza que sean estables.
Si hay servicios específicos del entorno fuera del clúster, se pueden resolver mediante el DNS de Kubernetes si configuras servicios ExternalName de Kubernetes. Estos servicios de Kubernetes proporcionan las mismas funciones de resolución, pero devuelven un registro CNAME para redirigir las solicitudes a una autoridad externa.
Comparación con Eureka
Eureka es un balanceador de carga del lado del cliente de código abierto creado por Netflix. Se usa habitualmente como parte del agente de servicio Spring Cloud Services. Eureka se diseñó para ser un balanceador de carga regional y un mecanismo de descubrimiento de servicios para servicios que se ejecutan en un entorno que provocaba interrupciones frecuentes en las cargas de trabajo, lo que daba lugar a direcciones IP inestables.
Eureka se ha diseñado como un modelo cliente/servidor. Los clientes se registran en el servidor indicando los nombres con los que quieren asociarse y envían periódicamente latidos al servidor. El servidor permite que todos los clientes conectados resuelvan nombres.
En general, deberías usar el DNS de Kubernetes en lugar de Eureka en Kubernetes por los siguientes motivos:
- DNS funciona con todos los lenguajes de programación y aplicaciones sin necesidad de bibliotecas.
- Se reutilizará la comprobación de estado de tu aplicación, lo que reducirá las combinaciones de errores.
- Kubernetes gestiona el servidor DNS, lo que te permite depender de menos dependencias.
- El DNS de Kubernetes respeta las mismas políticas y restricciones de control de acceso basado en roles que el resto de Kubernetes.
Hay algunas situaciones en las que sería ventajoso implementar un servidor Eureka:
- Necesitas el descubrimiento de servicios en aplicaciones basadas en Kubernetes y en VMs.
- Necesitas un balanceo de carga basado en el cliente.
- Necesitas comprobaciones del estado independientes.
Siguientes pasos
- Consulta más información sobre el descubrimiento de servicios en GKE.
- Consulta información sobre Service Directory, una oferta gestionada similar a Eureka.