В моем кластере kubernetes настроен входной контроллер Nginx, который по умолчанию выполняет перенаправление https для всех полученных запросов, поэтому http://example.com
автоматически перенаправляется на https://example.com
.
Теперь у меня есть хост, который мне нужно обслуживать через http, а не через https, по сути исключая его из перенаправления ssl. Я обнаружил, что я могу отключить перенаправление ssl для всего входа, но не для конкретного хоста.
My Ingress yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
tls:
- hosts:
- mysslsite.co.uk
secretName: tls-secret
rules:
- host: my-ssl-site.co.uk
http:
paths:
- path: /
backend:
serviceName: my-service
servicePort: 80
- host: my-non-ssl-site.co.uk
http:
paths:
- path: /
backend:
serviceName: my-other-service
servicePort: 80
Моя карта конфигурации:
apiVersion: v1
kind: ConfigMap
metadata:
labels:
app: nginx-ingress
chart: nginx-ingress-0.28.3
component: controller
heritage: Tiller
release: nginx-ingress
name: undercooked-moth-nginx-ingress-controller
namespace: default
data:
proxy-buffer-size: "512k"
client-header-buffer-size: "512k"
proxy-body-size: "100m"
large-client-header-buffers: "4 512k"
http2-max-field-size: "512k"
http2-max-header-size: "512k"
fastcgi_buffers: "16 16k"
fastcgi_buffer_size: "32k"
Что я пробовал:
Попытайтесь отключить ssl-перенаправление по всей плате и задайте правило для перенаправления на сайт, требующий ssl-https, установив аннотацию nginx.ingress.kubernetes.io/ssl-redirect: "false"
и добавив следующий фрагмент конфигурации:
nginx.ingress.kubernetes.io/configuration-snippet: |
if ($host = 'my-ssl-site.co.uk' ) {
rewrite ^ https://my-ssl-site.co.uk$request_uri permanent;
}
Это удаляет перенаправление https, но приводит к ошибке too many redirects
для сайта, требующего ssl.
Попытка добавить правила в ConfigMap согласно этому ответу для отключения перенаправления ssl и обработки условного перенаправления в фрагменте конфигурации сервера, но это все равно привело к перенаправлению ssl.
Попытался добавить второй входной контроллер, чтобы на одном можно было включить ssl-перенаправление, а на другом - отключить его. Я создал контроллер, но я думаю, что мне также нужно создать второй вход nginx и настроить и пометить приложения, которые будут возвращены каждому? Это кажется излишним, когда все, что я хочу сделать, это исключить одну службу в кластере из перенаправления ssl.
Есть ли что-то очевидное, чего мне не хватает? Такое ощущение, что не должно быть так сложно добавить простое правило для исключения одного хоста из ssl-redirect.