Soy nuevo en kubernetes y nginx, y tengo problemas para entender cómo implementar Ingress (nginx-ingress) para mi caso de uso particular.
Quiero exponer la herramienta de administración pgadmin PostgreSQL de mi clúster.
Tengo otras aplicaciones expuestas a través de nginx-ingress desde mi clúster y me gusta que cada una cuelgue de su propio subdirectorio, por ejemplo:
Tengo un problema al hacer esto con pgadmin (aunque el problema sin duda se aplicaría igualmente a otras aplicaciones que se comportan de la misma manera)
Configuré una regla de ingreso para capturar y enrutar en consecuencia:
annotations: kubernetes.io/ingress.class: nginx nginx.ingress.kubernetes.io/rewrite-target: /$2 rules: - http: paths: - path: /pgadmin4(/|$)(.*)hace el enrutamiento y se golpea el backend.
Sin embargo, cuando pgadmin realiza una redirección, pierdo pgadmin/ de la URL de redirección, es decir
mientras que quiero redirigir a:
¿Qué piezas me faltan para lograr esto? Parece que debería ser simple.
Gracias
Vale la pena mencionar que exponer muchos servicios diferentes usando el mismo nombre de dominio puede no ser la mejor idea en términos de seguridad. Muchos mecanismos de seguridad web se basan en el nombre de dominio para determinar qué es confiable y qué no. Por lo tanto, si se infringe uno de sus contenedores, otros servicios que comparten el mismo nombre de dominio podrían verse afectados.
De todos modos, el problema es con pgadmin. No es consciente de que se está sirviendo desde myserver.com/pgadmin/ (otra razón por la que tener varios servicios usando el mismo nombre de dominio no es la mejor idea), por lo que envía las redirecciones incorrectas.
Afortunadamente, la documentación de pgadmin ofrece una solución:
Si desea alojar pgAdmin en un subdirectorio en lugar de en la raíz del servidor, debe especificar la ubicación y configurar el encabezado X-Script-Name que le indica al contenedor pgAdmin cómo reescribir las rutas:
server { listen 80; server_name _; location /pgadmin4/ { proxy_set_header X-Script-Name /pgadmin4; proxy_set_header Host $host; proxy_pass http://localhost:5050/; proxy_redirect off; } }
Así que parece que solo tiene que asegurarse de que las llamadas a pgadmin se envíen con el encabezado X-Script-Name /pgadmin4 , que es algo que el controlador de entrada nginx sabe cómo hacer .