Настройка TLS-Passthrough на ingress-контроллере nginx
1. При использовании TLS-PassThrough на Nginx Ingress-контроллер необходимо учитывать следующие особенности
-
для Ingress объектов с активированным TLS-PassThrough не работает path-based routing, так как path зашифрован
-
все запросы Ingress отправляет напрямую на IP адрес соответствующего объекта Service, соответственно stickiness и load-balancing настраивается на стороне объекта Service:
-
использование TLS-PassThrough снижает производительность Ingress-контроллера (простой тест при помощи Locust показал 5-10% снижение Average Response Time)
-
не работает для клиентов с версией TLS, не поддерживающей SNI
2. Алгоритм активации tls-passthrough
-
На стороне Ingress-контроллер необходимо добавить команду
--enable-ssl-passthrough=trueк строке аргументов, передаваемых nginx. Для этого необходимо изменить кастомизациюnova-release-ingress-public-main, добавив в нее следующий патч:patches: - patch: |- - op: add path: /spec/template/spec/containers/0/args/1 value: '--enable-ssl-passthrough=true' target: kind: DaemonSet name: nova-ingress-public-controller namespace: nova-ingress-public -
При последующем создании ingress-обьектов, для активации tls-passthough необходимо добавить следующие аннотации:
annotations: nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" nginx.ingress.kubernetes.io/ssl-passthrough: "true" nginx.ingress.kubernetes.io/ssl-redirect: "true" -
Для ingress-обьектов с
nginx.ingress.kubernetes.io/ssl-passthrough: "true"Nginx работает в режиме TCP-proxy, при этом клиентские сертификаты не передаются бэкенду, что препятствует реализации mTLS. Для корректной работы mTLS необходимо добавить следующую аннотацию к ingress-обьекту:nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"