如何禁用 nginx 入口控制器的自动 https 重定向?

Posted

技术标签:

【中文标题】如何禁用 nginx 入口控制器的自动 https 重定向?【英文标题】:How can I disable automatic https redirect for nginx ingress controller? 【发布时间】:2019-10-06 08:00:21 【问题描述】:

我为我的本地 minikube 启用了入口插件,并创建了一个自定义 pod、服务和入口。之后,我将入口主机添加到我的主机文件中,它指向 minikube ip,以便我可以使用浏览器访问它。访问 url 时,浏览器告诉我,由于“HTTP Strict Transport Security (HSTS)”标头,我被重定向到该 url 的 https 版本。 Firefox 和 chrome 不允许我继续,因为他们说证书(Kubernetes Ingress Controller Fake Certificate)仅对 url “ingress.local”有效。使用 IE11,我可以接受风险并实际继续。我可以做些什么来防止被重定向到 https?我不想要https,只想要http。这是我的服务和入口的 yaml 文件。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: foobar-ingress
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
  - host: foobar.app
    http:
      paths:
      - path: /
        backend:
          serviceName: foobar-frontend
          servicePort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: foobar-frontend
spec:
  ports:
  - port: 80
    targetPort: 8080
  selector:
    app: foobar-frontend

【问题讨论】:

【参考方案1】:

你需要在 Nginx configmap 中禁用 ssl-redirect(通常在 ingress-nginx 命名空间中命名为 nginx-configuration),如下所示:

kind: ConfigMap
metadata:
  labels:
    app: ingress-nginx
  name: nginx-configuration
  namespace: ingress-nginx
data:
  ssl-redirect: "false"

之后你需要重启 Nginx ingress pod。

您可能还需要清除浏览器重定向缓存:How long does Chrome remember a 301 redirect?

【讨论】:

【参考方案2】:

看来我已经猜对了。浏览器只是粗暴地缓存了 HSTS 标头,这就是我总是被重定向的原因。即使清理缓存也没有用。所以我不得不把我的 ingress 改成另一个名字,然后它就起作用了。

【讨论】:

你可能要故意删除chrome://net-internals/#hsts底部获取的HSTS记录

以上是关于如何禁用 nginx 入口控制器的自动 https 重定向?的主要内容,如果未能解决你的问题,请参考以下文章

Nginx 入口控制器返回 404 Kubernetes

Nginx Ingress 给 404 未找到任何入口资源

Kubernetes NGINX 入口控制器未获取 TLS 证书

如何在 nginx 入口控制器和 kong 上增加最大请求正文大小

如何修复 nginx 入口的“无法确保负载均衡器”错误

具有多个入口资源对象的 Kubernetes nginx 入口控制器