Как упоминалось в комментариях, использование аннотации во входном 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 .