nginx入口控制器和基本django应用程序的路由问题

nginx入口控制器和基本django应用程序的路由问题,django,kubernetes,kubernetes-ingress,nginx-ingress,Django,Kubernetes,Kubernetes Ingress,Nginx Ingress,编辑:我用一个完全可复制的例子重写了这个问题 我有一个示例Django应用程序,它的基础是入门,即有两个路径/admin和/polls 如果我使用NodePort部署应用程序,我可以访问这两个路径而不会出现问题。然而,我还没有在Nginx入口控制器上做到这一点。我尝试了几种注释和路径的组合,但都无济于事 因此,假设这个yaml: apiVersion: apps/v1 kind: Deployment metadata: labels: app: django name: dja

编辑:我用一个完全可复制的例子重写了这个问题

我有一个示例Django应用程序,它的基础是入门,即有两个路径
/admin
/polls

如果我使用NodePort部署应用程序,我可以访问这两个路径而不会出现问题。然而,我还没有在Nginx入口控制器上做到这一点。我尝试了几种注释和路径的组合,但都无济于事

因此,假设这个yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: django
  name: django
spec:
  selector:
    matchLabels:
      app: django
  template:
    metadata:
      labels:
        app: django
    spec:
      containers:
      - image: "ay0o/django-ingress:latest"
        name: django
# ---
# apiVersion: v1
# kind: Service
# metadata:
#   name: django
# spec:
#   ports:
#   - nodePort: 31000
#     port: 8000
#     targetPort: 8000
#   selector:
#     app: django
#   type: NodePort
---
apiVersion: v1
kind: Service
metadata:
  name: django
spec:
  ports:
  - port: 8000
  selector:
    app: django
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: django
spec:
  rules:
  - http:
      paths:
      - path: /django
        pathType: Prefix
        backend:
          service:
            name: django
            port:
              number: 8000

当我使用NodePort时,
http://localhost:31000/admin
http://localhost:31000/polls
工作正常

当我使用入口时,
http://localhost/django
从django返回404(因为路径既不是admin也不是polls),但是
http://localhost/django/admin
http://localhost/django/polls
从nginx返回404,意味着入口没有正确路由


那么,我应该改变什么,以便
http://localhost/django/admin
http://localhost/django/polls
不会返回404?

我得出的结论是,Django应用程序不可能使用基于路径的入口,这可能是由于与Django内部相关的原因

每一个例子都使用基于主机的规则,事实上,这是可行的。例如,可以将上面的入口更改为下面的入口,并且可以正常工作

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: django
spec:
  rules:
  - host: localhost
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: django
            port:
              number: 8000

如果有人提出使用基于路径的路由的解决方案,请随时回答问题。

Hello@Ay0。请检查控制器和应用程序的日志,好吗?看看那里到底发生了什么是有用的。请通过提供这些信息来编辑您的问题。@WytrzymałyWiktor用一个可复制的示例编辑了整个问题