Пример использования
Я развернул контроллер входящего трафика 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?