【发布时间】:2020-03-01 21:52:56
【问题描述】:
所以我有一个在 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,我尝试使用前导斜杠和不使用。因为我在这里的这个 stackoverflow 线程中找到了这些信息。 Kubernetes Ingress Nginx loading resources 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 组件处理流量,我不想使用另一个 pod。
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 应用程序 pod 之一中。我检查了他们是否在里面,他们也是。 我还尝试了这样的重写 sn-p,以匹配之前的 nginx 配置。它也不起作用。
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite (.*)/media/(.*) /website/media/$2 break;
rewrite (.*)/static/(.*) /website/static/$2 break;
顺便说一句。如果我使用像 xip.io 这样的主机,我根本无法访问我的应用程序。所以我真的不知道我最后搞砸了什么。域会很好,但更重要的是能够加载所需的资源。
欢迎提供任何帮助、提示和技巧。
来自柏林的亲切问候。
【问题讨论】:
-
您使用的是什么版本的 kubernetes 和 nginx 入口控制器?这里是link 来指导如何检查 nginx 版本。要检查 kubernetes 版本,请使用
kubectl version。 -
Kubernetes 1.14 和最新的 Ingress Nginx 最新的 0.26.1。
标签: python django gunicorn kubernetes-ingress nginx-ingress