Ingress Nginx не будет загружать ресурсы приложения Django - PullRequest
0 голосов
/ 05 ноября 2019

так что у меня в K8 работает приложение django, но мой ресурс, такой как .css, не будет загружен. Я всегда получаю 404 на них. Я использую Ingress-Nginx для маршрутизации входящего трафика.

Входная конфигурация выглядит следующим образом:

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress-aboi
  annotations:
    kubernetes.io/ingress.class: nginx
    ingress.kubernetes.io/rewrite-target: /
spec:
  tls:
  - secretName: tls-cert
  rules:
  #- host: dev.<ip>.xip.io
  - http:
      paths:
      - path: /
        backend:
          serviceName: django-service
          servicePort: 8000

Для index.html, который я пробовал с косой чертой и без нее. Потому что я нашел эту информацию в этой теме. Kubernetes Ingress Nginx загрузка ресурсов 404 К сожалению, это не решает мою проблему.

Index.html

<html lang="en">
    <head>
    <title>Log in | Django site admin</title>
    <link rel="stylesheet" type="text/css" href="static/admin/css/base.css">
    <link rel="stylesheet" type="text/css" href="static/admin/css/login.css">
    <link rel="stylesheet" type="text/css" href="static/admin/css/responsive.css">
    </head>
<body>
</body>
</html>

До того, как я использовал nginx с этой конфигурацией, но я не хочу использовать другой модуль, если могу обрабатывать трафиктолько с компонентом ingress-nginx.

nginx.conf

server {
   listen      443 ssl;
   location /media  {
       alias /website/media;
   }

   location /static {
       alias /website/static;
   }
   location / {
       uwsgi_pass  django;
       include     /etc/nginx/uwsgi_params;
       uwsgi_read_timeout 300;
       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       proxy_set_header X-Forwarded-Proto https;
       proxy_set_header Host $http_host;
       proxy_redirect off;
   }

Итак, подведем итог. Я могу использовать приложение, но без ресурсов. Ресурсы находятся в одном из модулей приложения django. Я проверил, если они внутри, и они тоже. Я также попытался переписать фрагмент, как этот, чтобы соответствовать конфигурации nginx из ранее. Это тоже не работает.

    nginx.ingress.kubernetes.io/configuration-snippet: |
     rewrite (.*)/media/(.*) /website/media/$2 break;
     rewrite (.*)/static/(.*) /website/static/$2 break;

Кстати. Если я использую хост, такой как xip.io, я вообще не могу получить доступ к своему приложению. Так что я действительно не знаю, что я испортил в конце. Домен был бы хорош, но важнее иметь возможность загружать необходимые ресурсы.

Любая помощь, советы и рекомендации приветствуются.

С уважением из Берлина.

1 Ответ

1 голос
/ 06 ноября 2019

Я узнал, что статические файлы не должны обслуживаться Ingess. Он должен обрабатываться веб-сервером, таким как nginx или cdn. Вход для маршрутизации, он не должен рассматриваться как веб-сервер. Поскольку я не хочу раскручивать и лишний модуль для nginx, я буду использовать Middleware для приложения Django, которое сейчас называется whitenoise. Это доставит статические файлы через gunicorn. Я должен переосмыслить, каким будет лучшее решение в будущем и, вероятно, будет использовать CDN от Google или AWS.

...