Создание маршрутов Istio#
Для корректной работы сети с использованием Istio необходимо создать и настроить соответствующие сетевые маршруты. Это включает указание:
конечных адресов (IP или DNS имя)
используемых портов
параметров SSL/TLS (если требуется).
Все необходимые манифесты для создания маршрутов уже включены в дистрибутив. Пользователю требуется лишь заполнить переменные, чтобы адаптировать их под конкретную инфраструктуру.
Формат описания маршрутов в переменных#
Параметры создания маршрутов описываются в переменных (стендозависимых параметрах).
Если создание какого либо маршрута не требуется, например не используется система логирования Apache Kafka, то блок с переменными маршрута необходимо оставить пустым:
istio:
egress_route:
# Маршрут для доступа к kafka, для отправки журналов
fluentbit:
hostname: ""
ip_address: ""
internal_port:
external_port:
protocol: "HTTPS"
ssl:
enabled: false
Одинаковый «internal» и «external» порты#
В системах вроде Kafka, после первого соединения с сервером клиент начинает использовать адрес и порт, полученные из метаданных сервера.
Это может вызвать проблемы, если маршрут в Istio настроен на использование internal_port — виртуального порта, предназначенного только для внутренней работы внутри сервисной сети (Service Mesh). В то же время сервер Kafka возвращает клиентам реальный порт, на котором он работает (external_port), что может привести к нарушению соединения.
Если конфигурация сервера Kafka не учитывает эту особенность, fluentbit может потерять возможность корректного взаимодействия с Kafka.
Для решения этой проблемы рекомендуется использовать только internal_port, а параметр external_port оставлять пустым. В этом случае будет использоваться один и тот же порт как внутри Service Mesh, так и при внешнем подключении.
istio:
egress_route:
# Образец маршрута к серверу Apache Kafka, используя одинаковый "внутренний" и "внешний" порты
fluentbit :
hostname: "sowa-kafka.ru"
ip_address: ""
internal_port: 9092
external_port:
protocol: "kafka"
ssl:
enabled: false
TLS-шифрование трафика#
При использовании Istio терминация трафика происходит на уровне Service Mesh, это означает, что указание TLS-сертификатов должно происходить в конфигурации маршрутов Istio.
Файлы сертификатов, должны храниться в поде граничного прокси. Для загрузки этих файлов из системы хранения секретов, необходимо заполнить соответствующий блок параметров.
После получения сертификатов, в переменных достаточно указать только имя нужного сертификата — создание и конфигурация DestinationRule будет произведено автоматически.
Входящие соединения#
Сертификаты для терминации входящего трафика описаны в переменных (файл values.yaml):
Образец блока переменных бекенда:
istio:
tls:
ingress_agent:
# Серверный сертификат
serverCertificate: "cert.crt"
# Закрытый ключ
privateKey: "cert.key"
# Корневой сертификат
caCertificates: "cert_ca.crt"
# Список отозванных сертификатов
caCrl: ""
Аналогичный блок переменных описан для каждого входящего интерфейса, предоставляемого компонентом.
Исходящие соединения#
Сертификаты для шифрования исходящего трафика описываются в блоке конфигурации маршрута, к соответствующему внешнему сервису.
Образец конфигурации маршрута к Apache Kafka (файл values.yaml компонента sowa):
istio:
egress_route:
fluentbit :
hostname: "sowa-kafka.ru"
ip_address: ""
internal_port: 9092
external_port:
protocol: "kafka"
ssl:
enabled: true
clientCertificate: "cert.crt"
privateKey: "cert.key"
caCertificates: "cert_ca.crt"