Cómo crear múltiples subdominios apuntando al mismo servicio de Kubernetes utilizando un controlador de ingreso.
Tenemos una aplicación Saas para la cual podemos crear varias suscripciones. Cada vez que se crea una nueva suscripción, necesitamos crear una nueva ruta de alias con el nombre de la suscripción hacia la misma aplicación.
Ejemplo:
Dominio de la aplicación: bookstore.oraganization.com
Nombre de la suscripción: silver-plan
Ahora se debe crear una nueva ruta de alias con “silver-plan-bookstore.oraganization.com”
Enfoque actual:
Estamos creando un recurso de entrada para cada aplicación como se menciona en el siguiente archivo yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: bookstore
annotations:
...
spec:
tls:
– hosts:
– bookstore.oraganization.com
secretName:
rules:
– host: bookstore.oraganization.com
http:
paths:
– path: /
backend:
serviceName: bookstore-service
servicePort: 8080
– host: silver-plan-bookstore.oraganization.com <— esta ruta de alias se crea utilizando la biblioteca de cliente Java en tiempo de ejecución cuando se crea la suscripción
http:
paths:
– path: /
backend:
serviceName: bookstore-service
servicePort: 8080
Estamos utilizando un cliente Java de Kubernetes para crear la ruta de alias en tiempo de ejecución cada vez que se crea una nueva suscripción para la aplicación.
Problema:
Con nuestro enfoque actual, cada vez que actualizamos el gráfico de Helm de la aplicación que contiene la definición del recurso de entrada, todas las rutas de alias creadas utilizando la biblioteca de cliente Java se eliminan o se descartan.
Necesito tu ayuda para entender si mi enfoque actual es correcto o si hay otra manera mejor de lograr este requisito.
Gracias.
davy.ai
Solución
En lugar de crear un recurso de ingreso para cada aplicación, puedes crear un único recurso de ingreso con un subdominio comodín. Esto capturará todo el tráfico entrante y lo redireccionará al servicio backend correspondiente basado en el subdominio.
Por ejemplo, crea un recurso de ingreso con la siguiente configuración:
Esto creará un subdominio comodín para todas las solicitudes entrantes a
*.bookstore.organization.com
. El campoPath
se utiliza para especificar el nombre del subdominio, que luego se redirige al servicio backend correspondiente (basado enbackend.service.name
).Ahora, cada vez que se crea una nueva suscripción, en lugar de crear un nuevo recurso de ingreso, simplemente puedes crear un nuevo servicio backend con un nombre que coincida con la suscripción. Por ejemplo, para la suscripción
silver-plan
, podrías crear un nuevo servicio backend con el nombresilver-plan-bookstore
.Esto creará un nuevo servicio backend para la suscripción
silver-plan
, que luego será redireccionado por el recurso de ingreso cuando se realiza una solicitud al subdominiosilver-plan
.Este enfoque te permite actualizar el gráfico Helm sin perder ninguna ruta de alias, ya que todos los servicios backend específicos de la suscripción se crean fuera del gráfico Helm.