【问题标题】:Nginx ingress resource - Redirect from to www (SSL doesn't work)Nginx 入口资源 - 从 www 重定向(SSL 不起作用)
【发布时间】:2019-03-17 23:41:12
【问题描述】:

用例

我使用这个 helm chart 在我的 Kubernetes 集群中部署了 nginx 入口控制器:

https://github.com/helm/charts/tree/master/stable/nginx-ingress

我为我的前端服务网络服务器创建了一个入口资源,它应该从非 www 重定向到 www 版本。我也在使用 SSL。

问题

当我访问我网站的 www 版本时,一切都很好,nginx 使用我的 Lets Encrypt SSL 证书(在正确的命名空间中作为秘密存在)为页面提供服务。但是,当我访问该网站的非 www 版本时,我在浏览器 (NET::ERR_CERT_AUTHORITY_INVALID) 中看到失败的 SSL 证书页面,并且可以看到该页面是使用 Kubernetes 入口假证书提供的。我认为这也是重定向到 www 版本根本不起作用的原因。

这是我的入口资源(实际主机名已被编辑):

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
    kubernetes.io/tls-acme: "true"
    nginx.ingress.kubernetes.io/from-to-www-redirect: "true"
  creationTimestamp: 2018-10-03T19:34:41Z
  generation: 3
  labels:
    app: nodejs
    chart: nodejs-1.0.1
    heritage: Tiller
    release: example-frontend
  name: example-frontend
  namespace: microservices
  resourceVersion: "5700380"
  selfLink: /apis/extensions/v1beta1/namespaces/microservices/ingresses/example-frontend
  uid: 5f6d6500-c743-11e8-8aaf-42010a8401fa
spec:
  rules:
  - host: www.example.io
    http:
      paths:
      - backend:
          serviceName: example-frontend
          servicePort: http
        path: /
  tls:
  - hosts:
    - example.io
    - www.example.io
    secretName: example-frontend-tls

问题

为什么 nginx 不在非 www 版本上也使用提供的证书?

【问题讨论】:

    标签: nginx kubernetes kubernetes-ingress nginx-ingress


    【解决方案1】:

    您似乎通过添加附加规则解决了接收无效证书的问题。

    重定向问题看起来与this 有关,并且在撰写本文时尚未修复。但是,有一个解决方法,如同一链接所述:

    nginx.ingress.kubernetes.io/configuration-snippet: |
      if ($host = 'foo.com' ) {
        rewrite ^ https://www.foo.com$request_uri permanent;
      }
    

    【讨论】:

    • 我正在使用 certmanager 获取证书。我刚刚检查了秘密证书并解码了 tls.crt 。它确实在“主题备用名称”字段中列出了我的域的 www 和非 www 版本。我相信这不是问题
    【解决方案2】:

    我通过在规则中添加非 www 版本来修复它。重定向仍然不起作用,但页面是使用正确的 SSL 证书提供的。

      - host: example.io
        http:
          paths:
          - backend:
              serviceName: example-frontend
              servicePort: http
            path: /
    

    【讨论】:

    • 是的。您没有其他域的后端,因此它会转到您没有配置任何 TLS 的默认后端。
    • 我明白了,你知道为什么重定向不起作用吗?
    • 看起来这是一个已知问题,现在检查答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2016-04-02
    • 2021-09-16
    相关资源
    最近更新 更多