Kubernetes群集中不允许的主机Django部署:无效的HTTP\U主机头

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

我在我的Azure Kubernetes集群中为前端服务部署了Django,并进行了一些基本配置。但是请注意,同样的问题也适用于我的本地Minikube集群。我从远程容器注册表中获取Django前端容器映像,并公开端口8010。我的服务配置也很简单

frontend.deployment.yaml

frontend.service.yaml

现在,当我在浏览器中访问部署的前端服务时,即使用Django的设置DEBUG=True,我会得到以下错误:

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']
....