无法使用Minikube +入口+ Django路由流量

时间:2019-11-22 04:43:30

标签: django kubernetes-ingress minikube kubernetes-service

在我的本地开发设置中,我使用Django作为网络服务器(a-la python manage.py runserver 8000),并且能够kubectl port-forward <django_pod> 8000将流量访问我的本地开发机器,以便与通过浏览到http://localhost:8000/testpage访问我的网站。我已将ALLOWED_HOSTS配置为包括localhost以启用此功能。

但是,我想避免使用port-forward,而是通过Kubernetes入口控制器和服务使用更合适的路由来运行流量。 在同一Minikube集群上,我已将Ingress配置为将某些流量URL指向非常基本的nginx Pod,以确认我的Ingress + service + pod网络正常运行。所有其他URL应该路由到我的Django应用。唯一的区别是nginx流量全部在端口80上。

在我的入口控制器日志中,我可以看到将流量发送到Django应用程序的k8s服务: 192.168.64.1 - [192.168.64.1] - - [22/Nov/2019:03:50:52 +0000] "GET /testpage HTTP/2.0" 502 565 "-" "browser" 24 0.002 [default-django-service-8000] [] 172.17.0.5:8000, 172.17.0.5:8000, 172.17.0.5:8000 0, 0, 0 0.000, 0.000, 0.000 502, 502, 502 aa2682896e4d7a2052617f7d12b1a02b

当我查看Django日志时,看不到任何流量。

我的入口servicePort8000django-service端口是8000(我只是将其默认设置为ClusterIP),吊舱的{{ 1}}是spec.containers.ports.containerPort,并且如上所述,该进程已设置为侦听端口8000

当我检查8000时,它正确地向我显示了一个端点已连接到端口8000(并且当我重新启动它们时,它正确地更改为新容器的IP)。

我已经使用以下指南进行调试:

我的猜测是kubectl get endpoints可能有问题,但是我在列表中添加了ALLOWED_HOSTS通配符,但仍然无法使用。

我的设置有什么问题?

1 个答案:

答案 0 :(得分:1)

您需要通过运行python manage.py runserver 0.0.0.0:<port>来指示服务器在所有接口上进行监听。

默认情况下,Django的运行服务器在本地环回接口(localhost / 127.0.0.1)上进行侦听,因此,如果运行python manage.py runserver 8000,则只能从运行服务器的计算机通过端口8000访问该服务器。

关于这方面有很多文档,但是这里只是几个示例: