es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: bookstore
      annotations:
        ...
    spec:
      rules:
      - host: "*.bookstore.organization.com"
        http:
          paths:
          - path: /silver-plan/
            pathType: Prefix
            backend:
              service:
                name: silver-plan-bookstore
                port:
                  name: http-port
          - path: /
            pathType: Prefix
            backend:
              service:
                name: bookstore
                port:
                  name: http-port
      tls:
      - hosts:
        - "*.bookstore.organization.com"
        secretName: bookstore-tls
    

    Esto creará un subdominio comodín para todas las solicitudes entrantes a *.bookstore.organization.com. El campo Path se utiliza para especificar el nombre del subdominio, que luego se redirige al servicio backend correspondiente (basado en backend.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 nombre silver-plan-bookstore.

    apiVersion: v1
    kind: Service
    metadata:
      name: silver-plan-bookstore
    spec:
      selector:
        subscription: silver-plan
      ports:
      - name: http-port
        protocol: TCP
        port: 80
        targetPort: 8080
    

    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 subdominio silver-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.

Comments are closed.