Ресурс входа Nginx - Перенаправление с на www (SSL не работает)

Пример использования

Я развернул контроллер входящего трафика nginx в своем кластере Kubernetes, используя эту диаграмму управления:

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

Я создал входной ресурс для своего веб-сервера, обслуживающего интерфейс, и он должен перенаправлять с не-www на версию с www. Я тоже использую SSL.

Проблема

Когда я захожу на www-версию своего веб-сайта, все в порядке, и nginx обслуживает страницу, используя мой SSL-сертификат Lets Encrypt (который существует как секрет в правом пространстве имен). Однако, когда я посещаю версию веб-сайта без www, я получаю страницу с ошибочным сертификатом SSL в моем браузере (NET :: ERR_CERT_AUTHORITY_INVALID), и можно видеть, что страница обслуживается с использованием поддельного входящего сертификата 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?


person kentor    schedule 12.10.2018    source источник


Ответы (2)


Похоже, вы устранили проблему получения недействительного сертификата, добавив дополнительное правило.

Проблема с перенаправлением выглядит так, как будто она связана с этим и не исправлена ​​на это письмо. Однако есть обходной путь, описанный по той же ссылке:

nginx.ingress.kubernetes.io/configuration-snippet: |
  if ($host = 'foo.com' ) {
    rewrite ^ https://www.foo.com$request_uri permanent;
  }
person Rico    schedule 12.10.2018
comment
Я использую certmanager для получения сертификатов. Я только что проверил секретный сертификат и расшифровал tls.crt. В нем указаны версии моего домена с www и без www в поле Subject Alternative Name. Я считаю, что проблема не в этом - person kentor; 12.10.2018

Я исправил это, добавив в правила версию без www. Перенаправление по-прежнему не работает, но страница обслуживается с использованием правильного сертификата SSL.

  - host: example.io
    http:
      paths:
      - backend:
          serviceName: example-frontend
          servicePort: http
        path: /
person kentor    schedule 12.10.2018
comment
Ага. У вас не было серверной части для другого домена, поэтому она использовалась по умолчанию, для которой не настроен TLS. - person Rico; 12.10.2018
comment
Понятно, а вы хоть понимаете, почему перенаправление не работает? - person kentor; 12.10.2018
comment
Похоже, это известная проблема, проверьте ответ сейчас. - person Rico; 12.10.2018