Kubernetes 集群中的 DisallowedHost Django 部署:无效的 HTTP_HOST 标头

2024-02-14

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

前端.deployment.yaml

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
      imagePullSecrets:
        - name: acr-secret

前端.service.yaml

kind: Service
apiVersion: v1
metadata:
  name: frontend-v1
spec:
  selector:
    app: frontend-v1
  ports:
  - NodePort:
    protocol: TCP
    port: 8010
    targetPort: 8010
  type: NodePort

现在,当我在浏览器中访问我部署的前端服务时i.e. http://172.17.194.253:31436 http://172.17.194.253:31436与 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 动态创建的 HostIp 绑定到 Django 的 HostIpALLOWED_HOSTS?


从 Kubernetes 1.7 开始,可以在 Kubernetes 部署文件中请求 pod 的 HostIp。(1) https://github.com/kubernetes/kubernetes/issues/24657

首先调整部署文件,设置HostIp所需的环境变量。在下面的场景中,我设置了 POD_IP 和 HOST_IP,因为它们是不同的。您可以使用 Kubernetes 部署文件中的环境变量注入各种 Kubernetes 应用程序数据变量,有关此主题的更多信息请查看here https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/.

前端.service.yaml

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

现在在 Django 设置中调整ALLOWED_HOSTS配置指向HOST_IP环境变量。

设置.py

import os
...
ALLOWED_HOSTS = [os.environ.get('HOST_IP'), '127.0.0.1']
....

请注意,这允许 pod 的 HostIP 以及 localhost 用于本地开发目的。

Warning!一些博客文章或教程建议您设置ALLOWED_HOSTS = ['*']接受所有主机IP,但这是一个严重的安全漏洞。不要这样做!

现在重新部署您的 pod,您的 Django 应用程序应该会再次顺利运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kubernetes 集群中的 DisallowedHost Django 部署:无效的 HTTP_HOST 标头 的相关文章

  • 如何链接 Django 的“in”和“iexact”查询集字段查找?

    我有一个名字列表 例如 name list Alpha bEtA omegA 目前我有以下查询集 MyModel objects filter name in name list 我希望能够以不区分大小写的方式过滤名称 我的第一个想法是使用
  • 限制 django 应用程序模型中的单个记录?

    我想使用模型来保存 django 应用程序的系统设置 因此 我想限制该模型 使其只能有一条记录 极限怎么办 尝试这个 class MyModel models Model onefield models CharField The fiel
  • 具有自定义值的 Django 管理外键下拉列表

    我有 3 个 Django 模型 class Test models Model pass class Page models Model test models ForeignKey Test class Question model M
  • python-social-auth 部分管道无法恢复

    我正在尝试使用 python social auth 的部分管道收集新用户的密码 由于某种未知的原因 我无法恢复管道 提交表单后页面呈现回密码收集页面 值得注意的是 即使我输入 http complete backend name 页面也会
  • Django DateField 表单在 clean_data 中生成 None

    从 django 中的 DateField 表单中选择日期并点击提交按钮后 is valid 成功 但 clean data 显示 None 有谁知道是什么问题 谢谢 forms py class DateForm forms Form d
  • 在 Django OAuth Toolkit 中安全创建新应用程序

    如何将 IsAdminUser 权限添加到 Django OAuth Toolkit 中的 o applications 视图 REST FRAMEWORK DEFAULT PERMISSION CLASSES rest framework
  • Geodjango距离查询未检索到正确的结果

    我正在尝试根据地理位置的接近程度来检索一些帖子 正如您在代码中看到的 我正在使用 GeoDjango 并且代码在视图中执行 问题是距离过滤器似乎被完全忽略了 当我检查查询集上的距离时 我得到了预期距离 1m 和 18km 但 18km 的帖
  • Django 基于类的视图上的 success_url 的反向抱怨循环导入

    当使用基于方法的视图时 重定向为reverse没有抱怨这一点 并且仍然可以找到 root url conf 但是 在基于阶级的观点中 它抱怨 ImproperlyConfigured at blog new post The include
  • 连接mysql和python.3

    我是 django 的新手 使用 django 1 5 和 python 3 3 有没有办法在 python 3 3 上安装 mysqlDB 或 有其他方法可以连接它们吗 PyMySQL https github com petehunt
  • Prettier vscode 扩展不支持 Django 模板标签 {% tag %}

    Prettier Visual Studio 代码扩展不支持 Django 模板标签 tag 现在我该如何解决这个问题 我是否必须禁用 html 文件的 Prettier 扩展 或者还有其他解决方案吗 github 中的问题 5581 不支
  • 如何在Django中编写sql COALESCE

    我是姜戈的新手 如何将 COALESCE sql 查询集写入 django orm query SELECT COALESCE max CAST order no as UNSIGNED 0 as o id from nanossc Sal
  • 表单输入框不显示

    我正在尝试使用 Django 显示一个简单的表单输入文本框 我正在亚马逊 AWS 上部署 该网站在不同的服务器 pythonanywhere 上运行良好 但在 AWS 上存在主要问题 具体来说 输入框没有被显示 我使用的模板如下 首页 ht
  • 什么是 Kubernetes 清单?

    我在网上搜索过 大多数链接似乎都提到了清单 但没有实际解释它们是什么 什么是清单 它基本上是 Kubernetes API 对象描述 配置文件可以包含其中的一个或多个 即 Deployment ConfigMap Secret Daemon
  • 如何从 Django 中的链接设置预定义的表单值?

    我的项目是这样布局的 1 page has many categories 2 category belongs to page has many items 3 item belongs to category 当我进入一个页面时 我想修
  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • 当我这样做时什么也没有发生: python manage.py 命令

    我是 django 新手 目前正在学习主要教程 尽管它早些时候工作过 但当我执行 python manage py runserver 或 python manage py h 或使用任何其他命令时 shell 不会输出任何内容 想知道我做
  • 使用代理协议的 kubernetes nginx 入口最终出现损坏的标头

    我尝试使用代理协议在 google 容器上设置 nginx 入口 nodeport 以便可以将真实 IP 转发到后端服务 但最终导致标头损坏 2017 02 05 13 48 52 error 18 18 2 broken header H
  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • ECONNREFUSED:无法连接到集群内默认端口上的 RabbitMQ pod

    我的本地集群中有一个运行 RabbitMQ 的 pod 我已经将其配置为 apiVersion v1 kind Service metadata name service rabbitmq spec selector app service
  • nslookup 无法解析 Kubernetes.default

    我在我的 minikube 设置上尝试了以下命令来验证 dns 是否正常工作 kubectl exec ti busybox nslookup kubernetes default 但这是我得到的输出 服务器 10 96 0 10 地址1

随机推荐

  • Linux Eclipse CDT 分析器

    我在 Linux 下使用 Eclipse CDT 请问有人可以在该环境下推荐一个好的分析器吗 我也是 C 和多线程编程的新手 任何人都可以提供一些关于如何运行多线程应用程序分析的建议 例如 寻找性能瓶颈等 Thanks 我不知道这是否是最好
  • 运行hadoop时出错

    haduser user laptop usr local hadoop bin hadoop dfs copyFromLocal tmp input user haduser input 11 12 14 14 21 00 INFO ip
  • 中断并行流执行

    考虑这段代码 Thread thread new Thread gt tasks parallelStream forEach Runnable run 任务是应并行执行的 Runnable 列表 当我们启动这个线程并开始执行时 根据一些计
  • Twitter Bootstrap 默认值的 Flash 消息的自定义类和格式

    我正在将 twitter bootstrap css 集成到我的应用程序中 进展顺利 但我不知道如何为我的 Flash 消息自定义 CSS 和包装器 我希望我的 Flash 消息能够使用默认的 Bootstrap 类进行格式化 div cl
  • 在 Swift 中将 JSON 转换为 NSData,以及将 NSData 转换为 JSON

    我在转换时遇到问题JSON元素进入NSData 和NSData变量返回到JSON在斯威夫特 首先 我想提取encryptedData以下 JSON 数据的元素 transactionID 12345 encryptedData 67 51
  • 如何在laravel eloquent中从多个表中检索数据

    Model relation language php public function attributeDetail return this gt hasMany AttributeDetail class language id att
  • LINQ-to-SQL 中的多个 where 子句和 && 运算符有什么区别?

    看来我可以写一个where x a 1 x b 1 as where x a 1 where x b 1 据我了解后者变成 Where x gt x a 1 Where x gt x b 1 但这如何转化为 DB 呢 哪个在优化方面会更好
  • 如何通过Gitlab CI成功安装fbprophet?

    我正在尝试使用 Gitlab CI 将我的代码 使用 fbprophet 部署为 EC2 实例 my requirements txt file i https pypi org simple cmdstanpy 0 4 convertda
  • 架构arm64的未定义符号

    每次从 CocoaPods 导入文件时 我都会收到 Apple Mach O 链接器错误 Undefined symbols for architecture arm64 OBJC CLASS FBSession referenced fr
  • 如何更改 Material UI 自动完成字体大小?

    我正在尝试将自定义 css 应用到 Material UI Autocomplete 组件 具体来说 我想更改输入字段的字体大小 这是我现在所拥有的
  • 在 Macos High Sierra 上创建并绑定套接字

    我在 Hight Sierra 应用程序中创建套接字时遇到严重且奇怪的问题 如果我创建命令行工具 一切都好 我创建套接字 绑定套接字 但是如果我尝试创建 Cocoa 应用程序 我无法绑定我的套接字 如果我在Cocoa App中使用CFSoc
  • C++ 风格:Stroustrup 指针星号的放置

    有谁知道为什么Stroustrup的风格是指针的放置如下 具体来说 Stroustrup 就此事提供了哪些指导 int p vs int p 因为声明多个变量需要每个变量名称旁边加星号 这会导致 int p x vs int p x 在 K
  • 增加字符串值

    如何增加字符串值 例如 string RECONCILIATION COUNT if thing happens RECONCILIATION COUNT 这通常不起作用 因为不可能以与 int 值相同的方式递增字符串变量 RECONCIL
  • 棋盘游戏胜局 - 搜索算法

    我正在寻找可能有效的算法来检测在 19x19 棋盘上玩的五子棋 五连棋 游戏中的 获胜 情况 当其中一名玩家设法连续获得五颗且不超过五颗 石子 水平 对角线或垂直 时 就会出现获胜情况 我可以轻松访问以下数据 两个玩家之前的动作 石头 存储
  • 如何在选择查询(MySQL)中仅消除连续重复项而不是所有重复项?

    我有一个这样的表 01 Jul 17 100 02 Jul 17 100 03 Jul 17 300 04 Jul 17 300 05 Jul 17 500 06 Jul 17 500 07 Jul 17 300 08 Jul 17 400
  • 如何检测隐藏字段篡改?

    在我的网络应用程序的一种形式上 我有一个隐藏字段 出于安全原因 我需要保护它免遭篡改 我正在尝试提出一个解决方案 通过该解决方案 我可以检测隐藏字段的值是否已更改 并做出适当的反应 即使用通用的 出现问题 请重试 错误消息 该解决方案应该足
  • 对成员 'tableView(_:numberOfRowsInSection:)' 的引用不明确 为什么会出现此错误?

    这是我的代码 其中出现错误 错误出现在第 3 行 if let indexpath override func prepare for segue UIStoryboardSegue sender Any if segue identifi
  • 像一维一样循环二维子图

    我正在尝试使用子图绘制许多数据 并且没有遇到麻烦 但我想知道是否有一种方便的方法可以做到这一点 下面是示例代码 import numpy as np import math import matplotlib pyplot as plt q
  • spectj可以向java.lang.String添加方法吗

    我读过aspectj的一些文章 我知道它可以增强类 这很有吸引力 我有一个非常愚蠢的问题 我找不到明确的答案 spectj可以向java lang String添加方法吗 或者类似的问题 如果我无法获取某些类的源代码 我可以通过aspect
  • Kubernetes 集群中的 DisallowedHost Django 部署:无效的 HTTP_HOST 标头

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