Kubernetes群集中不允许的主机Django部署:无效的HTTP\U主机头
我在我的Azure Kubernetes集群中为前端服务部署了Django,并进行了一些基本配置。但是请注意,同样的问题也适用于我的本地Minikube集群。我从远程容器注册表中获取Django前端容器映像,并公开端口8010。我的服务配置也很简单 frontend.deployment.yaml frontend.service.yaml 现在,当我在浏览器中访问部署的前端服务时,即使用Django的设置DEBUG=True,我会得到以下错误:Kubernetes群集中不允许的主机Django部署:无效的HTTP\U主机头,django,kubernetes,azure-aks,Django,Kubernetes,Azure Aks,我在我的Azure Kubernetes集群中为前端服务部署了Django,并进行了一些基本配置。但是请注意,同样的问题也适用于我的本地Minikube集群。我从远程容器注册表中获取Django前端容器映像,并公开端口8010。我的服务配置也很简单 frontend.deployment.yaml frontend.service.yaml 现在,当我在浏览器中访问部署的前端服务时,即使用Django的设置DEBUG=True,我会得到以下错误: Traceback (most recent c
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/dist-packages/django/utils/deprecation.py", line 93, in __call__
response = self.process_request(request)
File "/usr/local/lib/python3.6/dist-packages/django/middleware/common.py", line 48, in process_request
host = request.get_host()
File "/usr/local/lib/python3.6/dist-packages/django/http/request.py", line 122, in get_host
raise DisallowedHost(msg)
Exception Type: DisallowedHost at /
Exception Value: Invalid HTTP_HOST header: '172.17.194.253:31436'. You may need to add '172.17.194.253' to ALLOWED_HOSTS.
但是如何将动态创建的pod主机IP绑定到Django允许的\u主机?由于Kubernetes 1.7,可以在Kubernetes部署文件中请求pod主机IP 首先调整部署文件以设置HostIp所需的环境变量。在下面的场景中,我设置了POD_IP和HOST_IP,因为它们不同。您可以在Kubernetes部署文件中使用环境变量注入各种Kubernetes应用程序数据变量,以了解有关此主题的更多信息 frontend.service.yaml 现在,在Django设置中,调整允许的\u HOSTS配置以指向HOST\u IP环境变量 设置.py 注意,这允许pod的HostIP以及als localhost用于本地开发目的 警告!一些博客帖子或教程建议您设置允许的_HOSTS=['*']以接受所有主机IP,但这是一个严重的安全漏洞。别这样
现在重新部署pod,Django应用程序将再次顺利运行。它在您的情况下是如何工作的?hostIp是内部节点的ip,而service loadbalancer外部ip不同,我无法从pod的ip访问它status@Sheed这是一个不同的问题,也许这会有帮助:谢谢你的链接,但我已经探索了这个解决方案,问题是我目前没有可能购买一个链接到我的集群Ip的域名,我正在寻找一个更具动态性的解决方案,否则我会选择Ingres+clusterIp,甚至在外部ip分配之后手动编辑部署您在哪个云提供商平台上工作?即AKS、EKS或?我在供应商的文档中找到了一种方法:
kind: Service
apiVersion: v1
metadata:
name: frontend-v1
spec:
selector:
app: frontend-v1
ports:
- NodePort:
protocol: TCP
port: 8010
targetPort: 8010
type: NodePort
Traceback (most recent call last):
File "/usr/local/lib/python3.6/dist-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.6/dist-packages/django/utils/deprecation.py", line 93, in __call__
response = self.process_request(request)
File "/usr/local/lib/python3.6/dist-packages/django/middleware/common.py", line 48, in process_request
host = request.get_host()
File "/usr/local/lib/python3.6/dist-packages/django/http/request.py", line 122, in get_host
raise DisallowedHost(msg)
Exception Type: DisallowedHost at /
Exception Value: Invalid HTTP_HOST header: '172.17.194.253:31436'. You may need to add '172.17.194.253' to ALLOWED_HOSTS.
apiVersion: apps/v1
kind: Deployment
metadata:
name: frontend-v1
labels:
app: frontend-v1
spec:
replicas: 1
selector:
matchLabels:
app: frontend-v1
template:
metadata:
labels:
app: frontend-v1
spec:
containers:
- name: frontend-v1
imagePullPolicy: Always
image: yourremotename.azurecr.io/frontend-remote:v1
ports:
- containerPort: 8010
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: HOST_IP
valueFrom:
fieldRef:
fieldPath: status.hostIP
imagePullSecrets:
- name: acr-secret
import os
...
ALLOWED_HOSTS = [os.environ.get('HOST_IP'), '127.0.0.1']
....