Nginx Ingress - использовать https для серверной части в зависимости от пути - PullRequest
1 голос
/ 19 июня 2020

Я настраиваю входящий трафик для передачи запросов к бэкэндам на основе пути. Только service-external должен использовать HTTPS. Если я добавлю аннотацию nginx.ingress.kubernetes.io/backend-protocol: 'HTTPS', входящий трафик будет использовать https для обоих бэкэндов, что нежелательно. Есть ли способ использовать https только для выбранных серверных ВМ?

ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: 'true'
  tls:
  - secretName: my-tls
    hosts:
    - myhost.com
  rules:
  - host: myhost.com
    paths:
    - path: /external/
      serviceName: service-external
      servicePort: 443
    - path: /
      serviceName: service-api

1 Ответ

0 голосов
/ 24 июня 2020

Как упоминалось в комментариях, использование аннотации во входном SPE c включит эту функцию для всех путей.

Единственный способ добиться желаемого - это создать новый входящий SPE c с желаемым путем. Таким образом, у вас будет 2 входа для одного и того же host, см. Этот пример:

Я настраиваю вход для передачи запросов к бэкэндам на основе пути. Только service-external должен использовать HTTPS. Если я добавлю аннотацию nginx.ingress.kubernetes.io/backend-protocol: 'HTTPS', входящий трафик будет использовать https для обоих бэкэндов, что нежелательно. Есть ли способ использовать https только для выбранных бэкэндов?

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-https-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/backend-protocol:  "HTTPS"
spec:
  tls:
    - hosts:
      - myapp.com
      secretName: myapp.com
  rules:
  - host: myapp.com
    http:
      paths:
      - path: "/"
        backend:
          serviceName: my-https-service
          servicePort: 443
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-http-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
spec:
  tls:
    - hosts:
      - myapp.com
      secretName: myapp.com
  rules:
  - host: myapp.com
    http:
      paths:
      - path: "/notsecure"
        backend:
          serviceName: my-http-service
          servicePort: 80

Первый вход перенаправляет каждый запрос для https://myapp.com/ на my-https-service, и если запрос был на https://myapp.com/notsecure, запрос будет перенаправлен на служба my-http-service через HTTP, но для конечного пользователя соединение по-прежнему HTTPS .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...