Особенности работы с TLS в кластерах OKD/OpenShift
DUMP-2022 / РТК ИТ
О компании
Обо мне
Руслан Тагиров
Ростелеком Информационные Технологии�Региональный центр разработки ИС (Екатеринбург) / Руководитель проектов
email: tagirov-rur@ural.rt.ru / telegram: @ruslantagirov
Предметная область или “о чём рассказ”?
Постановка задачи
Напомним о TLS
Стандартный путь любого запроса в кластер OKD
Основные точки контроля входящего трафика
На более низком уровне
Версии SSL и TLS - что актуально?
Протокол | Дата публикации | Статус |
SSL 1.0 | не публиковался | не публиковался |
SSL 2.0 | 1995 | Признан устаревшим в 2011 году (RFC 6176) |
SSL 3.0 | 1996 | Признан устаревшим в 2015 году (RFC 7568) |
TLS 1.0 | 1999 | Признан устаревшим в 2020 году (RFC 8996) |
TLS 1.1 | 2006 | Признан устаревшим в 2020 году (RFC 8996) |
TLS 1.2 | 2008 | Действует уже 14 лет, скоро может быть признан устаревшим |
TLS 1.3 | 2018 | Действует 4 года |
Основные проблемы с публикацией TLS-приложений в OKD
Значит, не все клиенты смогут установить TLS сессию (не поддерживается TLS v1.2 или SNI)
И ещё:
Терминация TLS - варианты (стандартные)
Перед кластером
(1) TLS Offload proxy
В кластере
(2) Edge
(3) Re-Encrypt
(4) Pass-thru
Схема публикации приложения (как сделали сначала)
Маршрутизация HTTP в OKD
Приложение + OS клиента
OKD
Вспомним SNI
Маршрутизация HTTPS/TLS в OKD (зачем нужен SNI)
Приложение + OS клиента
OKD
Как подключить “старое” приложение
На стороне клиента
(1) Client-Side TLS Proxy
В кластере
(2) NodePort
(3) ExternalIP
Почему нельзя просто обновить клиентское ПО?
Итоговая схема
(на выбор) с дедлайном по отключению
Проблемы с балансировкой TLS Pass-Thru
$ oc get deployment -n openshift-ingress router-default -o yaml | \
grep -A 1 -E "ROUTER_LOAD_BALANCE_ALGORITHM|ROUTER_TCP_BALANCE_SCHEME"
- name: ROUTER_LOAD_BALANCE_ALGORITHM
value: leastconn
--
- name: ROUTER_TCP_BALANCE_SCHEME
value: source
Загрузка подов при балансировке по source
Загрузка подов при балансировке leastconn
Средства диагностики TLS трафика
openssl s_client -connect myservice.rt.ru:443
openssl s_client -showcerts -servername myservice.rt.ru -tlsextdebug -state -debug -connect 10.10.10.1:443
openssl s_client -showcerts -servername myservice.rt.ru -tlsextdebug -state -debug -tls1_2 -connect 10.10.10.1:443
curl -v -k --resolve myservice.rt.ru:443:10.10.10.1 https://myservice.rt.ru
curl -v -k --tls-max 1.2 https://myservice.rt.ru
tcpdump -c10 -i eth1 -n -A port 443 | grep "myservice.rt.ru"
Организационные заметки (для Enterpise)
Спасибо!