【问题标题】:404 resource not found when accessing angular app through ingress通过入口访问 Angular 应用程序时找不到 404 资源
【发布时间】:2020-04-08 15:41:31
【问题描述】:

我在谷歌云上有一个集群设置,其中一个部署是 nginx 上的容器化 Angular 应用程序:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: product-adviser-front-deployment
  labels:
    app: angular-front
    version: v1
spec:
  replicas: 1
  selector:
    matchLabels:
      name: product-adviser-front-deployment
  template:
    metadata:
      labels:
        name: product-adviser-front-deployment
    spec:
      containers:
        - name: product-adviser-front-app
          image: aurrix/seb:product-adviser-front
          imagePullPolicy: Always
          ports:
            - containerPort: 80
          env:
            - name: API_URL
              value: http://back:8080/
          readinessProbe:
            initialDelaySeconds: 30
            httpGet:
              path: /healthz
              port: 80
          livenessProbe:
            initialDelaySeconds: 30
            httpGet:
              path: /healthz
              port: 80
      restartPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: front
spec:
  selector:
    name: product-adviser-front-deployment
  ports:
    - port: 80
  type: NodePort

Nginx 配置:

    worker_processes auto;

    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;


    events {
    worker_connections 1024;
    }


http {
        #Allow CORS
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range';
        add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

        log_format gzip '[$time_local] ' '"$request" $status $bytes_sent';
        index         index.html;
        include       /etc/nginx/mime.types;
        default_type  application/javascript;

        access_log /dev/stdout;
        charset utf-8;

        sendfile        on;
        keepalive_timeout  65;

        #include /etc/nginx/conf.d/*.conf;

        server {
            listen       80;
            listen       [::]:80;
            server_name  localhost;

            access_log /dev/stdout;

            root /usr/share/nginx/html;

            location / {
                try_files $uri $uri/ /index.html;
            }

            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
            root   /usr/share/nginx/html;
            }

            location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            try_files $uri $uri/ =404;
            }

            location /healthz {
            return 200 'no content';
            }

        }
        # Compression
        #include       /etc/nginx/gzip.conf;
}

入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: main-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - http:
        paths:
          - path: /
            backend:
              serviceName: front
              servicePort: 80

每当我访问外部 IP 地址时,带有 index.html 的 Angular 应用响应都无法加载资源。

我很确定它在某种程度上与入口配置有关,但我认为自己已经筋疲力尽地试图弄清楚这一点。

我在这里做错了什么?

附带说明,我已将 ingress-nginx 安装到我的集群中,它似乎工作正常。 基本 href 存在于 index.html 中。 docker 镜像在本地运行良好。

【问题讨论】:

  • 注解nginx.ingress.kubernetes.io/rewrite-target是否正确?我不需要此注释,因为您在路径中没有使用正则表达式。见rewrite example
  • 是的,这里实际上不需要重写。谢谢
  • 去掉注释后是否也遇到了同样的问题?
  • 不,不管有没有重写注释,它实际上都可以正常工作

标签: angular nginx kubernetes


【解决方案1】:

配置按原样工作。似乎入口需要以删除它并再次应用的方式强制重启。

【讨论】:

    【解决方案2】:

    您如何以及从何处访问它。能否请您粘贴 curl -vvv EXTERNAL-IP/path 的结果?

    您还可以在 pod 内卷曲相同的服务 curl -vvv front.svc.cluster.local:80 吗?

    我也不确定 env 变量 API URL,这个值看起来很奇怪。

    【讨论】:

    • 我刚刚重新启动了入口,由于某种原因,它可以工作。我不知道是什么导致了这个问题。从 API_URL 开始,我试图将 dns 传递给另一个服务 back.svc.cluster.local:8080 但它似乎不起作用。我将尝试再次查看文档,也许找不到任何内容会发布有关它的另一个问题。感谢您的快速回复。
    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-15
    • 2019-12-16
    相关资源
    最近更新 更多