微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

我有一个示例 Django 应用,基本入门 https://docs.djangoproject.com/en/3.2/intro/tutorial01/,即有两个路径 /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/adminhttp://localhost:31000/polls 工作正常。

当我使用 Ingress 时,http://localhost/django 从 django 返回 404(因为路径既不是 admin 也不是 polls),但是 http://localhost/django/adminhttp://localhost/django/pollsNginx 返回 404,意思是入口未正确路由。

那么,我应该如何更改以使 http://localhost/django/adminhttp://localhost/django/polls 不会返回 404?

解决方法

我得出的结论是,不可能对 Django 应用程序使用基于路径的 Ingress,这可能是由于与 Django 的内部结构有关。

那里的每个示例都使用基于主机的规则,而且确实有效。比如上面的Ingress可以改成下面的,就可以了。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。