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



在我的本地开发设置中,我使用 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 集群上,我配置了入口,将某些流量 url 指向一个非常基本的nginx pod,以确认我的入口+服务+pod 网络是否正常工作。所有其他网址都应该路由到我的 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(,pod的spec.containers.ports.containerPort8000,并且进程已设置为侦听端口8000,如前所述。

当我检查kubectl get endpoints时,它正确地向我显示端口 8000 上连接了一个端点(并且在我重新启动新 pod 时它会正确更改为新 pod 的 IP(。

我使用以下指南来尝试调试:

  • https://kubernetes.io/docs/tasks/debug-application-cluster/debug-service/
  • https://medium.com/@ManagedKube/kubernetes-troubleshooting-ingress-and-services-traffic-flows-547ea867b120

我的猜测可能是ALLOWED_HOSTS的问题,但我在列表中添加了*通配符,但它仍然不起作用。

我的设置有什么问题?

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

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

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

  • 关于 Django 中的 IP 0.0.0.0
  • http://www.holeintheceiling.com/blog/2012/06/21/django-and-runserver-0-0-0-0/

最新更新