Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Настройка 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

  1. На стороне 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
  2. При последующем создании 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"
  3. Для 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"