Automating DNS with ExternalDNS on EKS and Istio Lessons From Real-World Gotchas traducido y adaptado para Q2BSTUDIO una explicación práctica sobre cómo automatizar DNS en EKS con Istio y ExternalDNS y los errores reales que conviene conocer
Cuando configuré Istio en Amazon EKS pensé que la automatización del DNS sería lo más sencillo Solo instalar ExternalDNS conectarlo a Route 53 y listo api.yourdomain.com y grafana.yourdomain.com deberían resolverse hacia mi clúster
La mayor parte funcionó sin problemas El add on de EKS se instaló correctamente Los permisos IAM quedaron claros con la documentación y Route 53 se conectó Pero hubo un detalle que no estaba documentado y me costó mucho tiempo cómo hacer que ExternalDNS detecte los hostnames gestionados por Istio
En este artículo explico cómo encajan ExternalDNS cert manager e Istio el montaje exacto que utilicé el detalle que me frenó y una lista de comprobación para depurar cuando los registros DNS no aparecen Esta guía es útil si buscas soluciones en aplicaciones a medida o software a medida y necesitas integrar certificados TLS y routing avanzado
Qué hace ExternalDNS ExternalDNS es un controlador de Kubernetes que crea y actualiza registros DNS automáticamente en proveedores como Route 53 Anotando un Service o un Ingress con un hostname ExternalDNS gestionará ese registro por ti
Qué hace cert manager cert manager es un complemento de Kubernetes que automatiza la gestión de certificados TLS Se integra con Lets Encrypt Vault o autoridades de certificacion privadas para emitir y renovar certificados automáticamente Usa Issuer o ClusterIssuer para definir el origen de los certificados y Certificate para definir el dominio Por ejemplo un certificado wildcard para *.yourdomain.com cubre subdominios automáticamente
Qué hace Istio Istio es un service mesh que aporta enrutamiento seguridad y observabilidad El Gateway de Istio termina TLS y reenvía tráfico en función del host solicitado por ejemplo api.yourdomain.com o grafana.yourdomain.com
Arquitectura que utilicé Clúster EKS con Istio instalado Istio ingressgateway tipo LoadBalancer respaldado por un NLB de AWS ExternalDNS como add on de EKS que gestiona registros en Route 53 Hosted zone en Route 53 para yourdomain.com cert manager con certificado wildcard VirtualServices de Istio para enrutar cada subdominio
Flujo principal ExternalDNS crea los registros en Route 53 el Gateway de Istio termina TLS y los VirtualServices enrutan por host hacia los servicios correctos
Configuración paso a paso 1 Instalar ExternalDNS como add on gestionado en EKS Es más sencillo con el add on de EKS Un ejemplo de configuración incluye provider aws policy upsert only txtOwnerId archops domainFilters yourdomain.com sources service istio gateway
2 Anotar el Service del Istio ingressgateway Este fue el punto clave ExternalDNS no detecta VirtualServices de Istio directamente Debes anotar el Service istio ingressgateway en el namespace istio system con external dns alpha kubernetes io hostname igual a api.yourdomain.com,grafana.yourdomain.com y usar la opcion overwrite con kubectl por ejemplo kubectl -n istio-system annotate svc istio-ingressgateway external-dns.alpha.kubernetes.io/hostname=api.yourdomain.com,grafana.yourdomain.com --overwrite Tras esto ExternalDNS creó los registros en Route 53 al instante
3 Gateway y VirtualServices en Istio Una vez que ExternalDNS creó los registros Istio se encarga de TLS y del routing basado en host headers Necesitas un Gateway que use el certificado wildcard emitido por cert manager y luego VirtualService por cada subdominio Ejemplos de VirtualService deben incluir host gateway y la ruta hacia el servicio correcto por ejemplo api-svc.api.svc.cluster.local puerto 8080
El detalle que me detuvo Las anotaciones ExternalDNS no lee VirtualServices de Istio Sin anotaciones en el Service del ingressgateway no se crean registros Añadir external-dns.alpha.kubernetes.io/hostname al Service solucionó el problema Este es el mayor gotcha que encontré
Lista de comprobación para depuración Si no aparecen registros DNS revisa estos puntos Logs ejecutar kubectl logs deploy external-dns -n kube-system para ver errores El filtro de dominio domainFilter debe coincidir exactamente con tu hosted zone por ejemplo yourdomain.com Permisos IAM la cuenta de servicio de ExternalDNS necesita ChangeResourceRecordSets y ListHostedZones Registros TXT obsoletos en Route 53 pueden bloquear actualizaciones elimina entradas antiguas Anotaciones recuerda que ExternalDNS encuentra hostnames desde spec.rules.host de un Ingress o desde la anotacion external-dns.alpha.kubernetes.io/hostname en un Service de tipo LoadBalancer como el ingressgateway de Istio
Por qué no usé AWS Load Balancer Controller atajos y decisiones rápidas En mi caso Istio ya gestionaba routing a nivel L7 Necesitábamos soporte TCP y gRPC además de HTTP TLS lo gestionaba Istio Un solo NLB fue más sencillo y económico por eso descartamos AWS Load Balancer Controller
Buenas prácticas y recomendaciones Usa certificados wildcard de cert manager para facilitar la emisión de TLS y cubrir subdominios Usa ExternalDNS con el domainFilter correcto y controla los permisos IAM de la cuenta de servicio Mantén limpias las entradas TXT en Route 53 y documenta las anotaciones necesarias para que el equipo pueda añadir subdominios sin tocar la consola de AWS
Sobre Q2BSTUDIO En Q2BSTUDIO somos una empresa de desarrollo de software especializada en aplicaciones a medida y software a medida Ofrecemos servicios de inteligencia artificial e ia para empresas ciberseguridad servicios cloud aws y azure servicios inteligencia de negocio agentes IA y Power BI Nuestra experiencia en integraciones cloud y arquitecturas seguras nos permite desplegar soluciones que incluyen automatización de DNS certificados TLS y routing avanzado con Istio Podemos ayudarte a implementar pipelines de CI CD configurar ExternalDNS y cert manager y asegurar que tus aplicaciones a medida funcionen con alta disponibilidad y seguridad
Casos de uso típicos en los que podemos ayudar Automatización de despliegues en AWS y Azure Migracion de aplicaciones a medida a entornos gestionados Implementacion de soluciones de inteligencia artificial e integración de agentes IA Análisis y visualizacion con Power BI y servicios de inteligencia de negocio Auditorias de ciberseguridad y diseño de arquitecturas seguras
Reflexiones finales ExternalDNS cert manager e Istio forman una combinación potente para gestionar subdominios certificados y enrutamiento avanzado en EKS Solo recuerda el detalle de las anotaciones en el Service del ingressgateway y tendrás un flujo automatizado donde ExternalDNS gestiona los registros cert manager los certificados y Istio el tráfico
Si te interesa que Q2BSTUDIO implemente esta solución o quieres una consultoría sobre aplicaciones a medida software a medida inteligencia artificial ciberseguridad servicios cloud aws y azure agentes IA o Power BI contacta con nuestro equipo Estamos listos para diseñar la arquitectura que mejor se adapte a tus necesidades
Has tenido problemas similares con DNS y Istio en EKS Comparte tu experiencia con nosotros en Q2BSTUDIO y podremos comparar notas y proponer mejoras prácticas