Ingress controlador no puede encontrar activos
Estoy tratando de configurar un controlador Ingress en Microk8s para acoger una aplicación de react (SiguienteJS).
El pod y el servicio están funcionando, así como accesible internamente a través de machine.domain.eu:311
Mi objetivo es hacer este servicio disponible a través de machine.domain.eu/dev
en el puerto 80 predeterminado utilizando un controlador de entrada nginx:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: machine.domain.eu
http:
paths:
- path: /dev(/|$)(.*)
pathType: Prefix
backend:
service:
name: web-svc
port:
number: 3000
Si emito un comando curl vía curl machine.domain.eu/dev
de la máquina, donde el nodo está funcionando, estoy recuperando el html deseado, aunque no puedo ver, si los activos están siendo cargados.
Al cambiar de nuevo a mi máquina local abriendo mi navegador de elección y golpeó el punto final http obtengo una pantalla en blanco y todos los activos estáticos 404. El índice.html viene bien, pero no se encuentran todos los demás recursos.
He probado cualquier número de combinaciones en la anotación para reescribir /$1 /$2
, mientras cambia el camino a - path: /dev/?(.*)
pero sin efecto.
En otras palabras: El documento mismo se carga a través de
http://machine.domain.eu/dev
Sin embargo, los activos, que deben cargarse a través de
http://machine.domain.eu/dev/_next/{....}
en realidad se están solicitando a través de:
http://machine.domain.eu/_next/{....}
¿Qué exactamente estoy haciendo mal aquí?
Pregunta hecha hace 3 años, 4 meses, 28 días - Por codealchemy
2 Respuestas:
-
El problema que estás experimentando se debe a que los activos (como los archivos estáticos en la carpeta "_next") no se están cargando correctamente cuando accedes a tu aplicación a través del path "/dev" en el controlador Ingress.
Para solucionar este problema, necesitas ajustar la configuración de tu controlador Ingress. Parece que estás intentando reescribir el path a "/$2" pero no está funcionando como esperas. Aquí hay una posible solución:
- Actualiza la configuración de tu Ingress para incluir una configuración adicional para manejar los activos estáticos. Puedes usar el siguiente ejemplo como guía:
yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 nginx.ingress.kubernetes.io/configuration-snippet: | rewrite ^/dev(/|$)(.)$ /$2 break; spec: rules:
- host: machine.domain.eu
- path: /dev(/|$)(.
En este ejemplo, se utiliza la anotación
nginx.ingress.kubernetes.io/configuration-snippet
para agregar una regla de reescritura adicional que captura el path de los activos estáticos y los redirige correctamente.- Aplica esta nueva configuración de Ingress en tu cluster Kubernetes.
- Luego, intenta acceder a tu aplicación a través de `http://machine.domain.eu/dev` y verifica si los activos se cargan correctamente.
Este ajuste debería ayudar a que los activos estáticos se carguen correctamente al acceder a tu aplicación a través del path "/dev" en el controlador Ingress. Si sigues experimentando problemas, asegúrate de revisar los logs del controlador Ingress para obtener más información sobre lo que está sucediendo.
Respondida el Dec 18, 2020 a las 08:34 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Parece que el problema es que la anotación
nginx.ingress.kubernetes.io/rewrite-target
no está configurada correctamente. Esta anotación se utiliza para reescribir la ruta de solicitud antes de que se envíe al servicio de backend.En tu configuración actual, la anotación está establecida en
/$2
, lo que significa que solo reescribe el segundo grupo de captura en la expresión regular de ruta ((.<strong>)
). Esto no es lo que quieres, ya que deseas reescribir toda la ruta de solicitud a/dev/$2
.Para resolver este problema, debes establecer la anotación
nginx.ingress.kubernetes.io/rewrite-target
en/$1/$2
. Esto reescribirá toda la ruta de solicitud a/dev/$2
, que es lo que necesitas para que los activos estáticos se carguen correctamente.Aquí tienes la configuración actualizada del Ingress:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$1/$2 spec: rules:
- host: machine.domain.eu
- path: /dev(/|$)(.)
Una vez que hayas realizado este cambio, vuelve a implementar el Ingress y comprueba si los activos estáticos se cargan correctamente.
Respondida el Dec 18, 2020 a las 08:38 - por Gemini
Votos positivos: 0 | Votos negativos: 0