首页 > 解决方案 > 具有入口的 Kubernetes 上 Angular 应用程序的重定向问题

问题描述

我有 Kubernetes 的入口设置,如下所示

    apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: dev-ingress
  #namespace: dev
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/use-regex: "true"
    ingress.gcp.kubernetes.io/pre-shared-cert: "self-signed"
    kubernetes.io/ingress.class: "nginx"
    kubernetes.io/ingress.allow-http: "true"
spec:
  rules:
  - host: my.host.com
    http:
      paths:
      - backend:
          serviceName: webui-svc
          servicePort: 80
        path: /webui(/|$)(.*)

我正在 webui-svc 下运行 Angular 应用程序部署。Angular 应用程序使用 docker 进行容器化,我在 docker 容器中包含了 Nginx 配置,如下所示

    # Expires map
    map $sent_http_content_type $expires {
        default                    off;
        text/html                  epoch;
        text/css                   max;
        application/json           max;
        application/javascript     max;
        ~image/                    max;
    }
    
    server {
      listen 80;
      location / {
          root /usr/share/nginx/html;
          index index.html index.htm;
          try_files $uri $uri/ /index.html =404;
        }
      expires $expires;
      gzip  on;

}

当我请求http://my.host.com/webui/时,内部调用会被重定向,而没有为其添加前缀的 webui,例如

当我请求http://my.host.com/webui/时,有几个调用来获取 main.js、vendor.js 等,这些都是通过http://my.host.com/runtime.js请求的 所以它失败了,如果它会像http://my.host.com/webui/runtime.js那样被重定向,它会成功

角度应用程序中是否有配置或我缺少的入口。非常感谢任何帮助,在此先感谢

标签: angularnginxkuberneteskubernetes-ingress

解决方案


您的重写目标正在剥离/webui/. 考虑你的路径:

path: /webui(/|$)(.*)

现在检查rewrite-target

nginx.ingress.kubernetes.io/rewrite-target: /$2.

如果您删除此注释(并且您可以删除该use-regex注释,因为现在不需要它),它会将/webui/路径传递到您的后端。


推荐阅读