Перенаправление с http на https не работает для пользовательской серверной службы в Kubernetes Nginx Ingress Controller - PullRequest
0 голосов
/ 28 сентября 2018

Я настроил пользовательский входной контроллер Nginx с ресурсом Ingress в Kubernetes, и вместо «default-http-backend service» я использовал пользовательское приложение в качестве бэкэнд-службы по умолчанию, которая будет обслуживаться для запросов по умолчанию.Я также использовал собственный SSL, который установлен как секрет kubernetes, для моей службы.Проблема в том, что когда я запрашиваю имена хостов, которые упоминаются в правилах, перенаправление https работает.Но когда выполняются запросы, отличные от хостов, упомянутых в правилах, это приложение по умолчанию, но перенаправление https не работает.

Как перенаправить запросы с http на https для всех запросов, включая запросы по умолчанию.Другими словами, как настроить перенаправление https для подстановочных доменов во входном ресурсе.

Пожалуйста, найдите мои файлы yaml для входного ресурса.

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-resource
  namespace: default
  annotations:
   kubernetes.io/ingress.class: "nginx"
   kubernetes.io/ingress.allow-http: "false"
   ingress.kubernetes.io/rewrite-target: /
   ingress.kubernetes.io/ssl-redirect: "true"
   ingress.kubernetes.io/proxy-connect-timeout: "14400"
   ingress.kubernetes.io/proxy-send-timeout: "14400"
   ingress.kubernetes.io/proxy-read-timeout: "14400"
spec:
  tls:
  - secretName: tls-secret

  rules:

  - host: service1.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service1
          servicePort: 80

  - host: service2.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service2
          servicePort: 80

---

1 Ответ

0 голосов
/ 01 октября 2018

Мне нужно было настроить пользовательский сервис (не default-http-backend service) для запросов по умолчанию, для которых не установлены правила, и этот пользовательский сервис должен использовать собственный SSL.В настоящее время nginx-ingress-controller ничего не делает, если доменные имена опущены в правилах Ingress (с целью использования сертификата TLS «подстановочный знак»).Поэтому я добавил следующий код во входной yaml, который я использовал, и это работает отлично.Я добавил подстановочное имя tls в правила входа внизу для пользовательского сервиса по умолчанию.Пожалуйста, найдите код ниже:

  rules:

  - host: service1.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service1
          servicePort: 80

  - host: service2.example.com
    http:
      paths:
      - path: /
        backend:
          serviceName: service2
          servicePort: 80

  - host: '*.example.com'
    http:
      paths:
      - path: /
        backend:
          serviceName: custom-backend-service
          servicePort: 80
...