Kubernetes 入口 nginx 重定向到 https

Cod*_*der 14 kubernetes nginx-ingress

要将任何 HTTP 流量重定向到启用 tls 的主机上的 HTTPS,我已将以下注释添加到我的入口资源中

nignx.ingress.kubernetes.io/force-ssl-redirect: true
Run Code Online (Sandbox Code Playgroud)

这样,当我卷曲有问题的主机时,我会按预期重定向

在此输入图像描述

但是当我使用浏览器时,HTTP 请求超时。

现在,我不确定在curl工作时我在Nginx ingress conf中是否做错了什么?请问有什么指点吗?谢谢!

完整注释:

   annotations:
    kubernetes.io/ingress.class: nginx-ingress
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/proxy-body-size: 100m
    nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
    nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
    nginx.ingress.kubernetes.io/ssl-passthrough: "false"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
Run Code Online (Sandbox Code Playgroud)

规则

 rules:
  - host: hostX
    http:
      paths:
      - backend:
          serviceName: svcX
          servicePort: 8080
        path: /
  - host: hostY
    http:
      paths:
      - backend:
          serviceName: svcX
          servicePort: 8080
        path: /
  tls:
  - hosts:
    - hostX
  - hosts:
    - hostY
    secretName: hostY-secret-tls
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. 提到的curl是上面规则中的hostY。
  2. 通过浏览器到 hostY 的 HTTPS 有效,因此证书是有效的。

Mal*_*ata 9

正如 @mdaniel 提到的,您的代码片段显示nignx.ingress.kubernetes.io/force-ssl-redirect: true但注释应该是字符串。请注意,在您的“完整”配置中,您同时拥有force-ssl-redirect: "true" (现在正确的是字符串)ssl-redirect: "false".

只需删除注释 nginx.ingress.kubernetes.io/ssl-redirect: "false"并保留nignx.ingress.kubernetes.io/force-ssl-redirect: "true" Also enable即可--enable-ssl-passthrough。这是在 Ingress 对象中启用直通后端所必需的。

您的注释应如下所示:

kubernetes.io/ingress.class: nginx-ingress
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
nginx.ingress.kubernetes.io/ssl-passthrough: "true"
nginx.ingress.kubernetes.io/proxy-body-size: 100m
nginx.ingress.kubernetes.io/proxy-connect-timeout: "300"
nginx.ingress.kubernetes.io/proxy-read-timeout: "300"
nginx.ingress.kubernetes.io/proxy-send-timeout: "300"
Run Code Online (Sandbox Code Playgroud)

如果您在 TLS 部分下定义了主机,则只能使用 https 来访问它们。HTTP 请求将被重定向为使用 HTTPS。这就是为什么你不能通过 HTTP 访问主机。此外,您还必须为 host 指定 Secret hostX,否则将使用默认证书进行入口。或者,如果您不想hostX通过 HTTPS 连接到主机,只需创建不带 TLS 部分的不同入口。

看一看: