Есть изолированное от внешнего мира окружение в GCP с кластером Kafka, который живет в GKE. Kafka используется как внутри GKE кластера, так и виртуальными машинами, которым Kafka выставлена через внутренний балансировщик. Часть пользователей не приемлют использование консольных команд чтобы подключиться к Kafka и хотят пользоваться привычными им инструментами вроде Offset Explorer и ему подобными.
Итого у нас есть три брокера Kafka, которые доступны внутри кластера как kafka-0.kafka-headless.default.svc.cluster.local:9092
, kafka-1.kafka-headless.default.svc.cluster.local:9092
и kafka-2.kafka-headless.default.svc.cluster.local:9092
. Для виртуальных машин создано три балансировщика с адресами 172.16.0.16:19092
, 172.16.0.17:19092
и 172.16.0.18:19092
.
Если просто пробросить порты на локальную машину, то ничего работать не будет, т.к. после подключения к Kafka брокеру клиент получит метаданные в которых будет фигурировать Kafka advertised listeners и клиент будет пытаться подключиться к ним вместо работы с проброшенными портами.
Чтобы решить эту проблему нужно сделать две вещи:
- На балансирощиках открыть дополнительный порт (например 29092)
- В Kafka сконфигурировать дополнительный Listener для 0.0.0.0:29092 и что самое важное добавить в Advertised listeners конфигурацию с локальными адресами, которые будет использовать проброс портов.
Например проброс портов с локальной машины будет следующим:
- 127.0.0.1:29092 -> 172.16.0.16:29092
- 127.0.1.1:29092 -> 172.16.0.17:29092
- 127.0.2.1:29092 -> 172.16.0.18:29092
Для Google Cloud проброс портов через gcloud
выглядит следующим образом
gcloud compute ssh <jumphost> --project <project_id> --zone <zone> -- \ -L 127.0.0.1:29092:172.16.0.16:29092 \ -L 127.0.1.1:29092:172.16.0.17:29092 \ -L 127.0.2.1:29092:172.16.0.18:29092
В моем случае GKE кластер приватный и подключиться к его API можно только с jumphost, но если имеете дело с публичным кластером, то по аналогии можно пробросить порты через kubectl port-forward
.
Осталось только настроить клиент Kafka - в свойствах подключения нужно указывать следующие адреса брокеров: 127.0.0.1:29092,127.0.1.1:29092,127.0.2.1:29092
.
Комментариев нет:
Отправить комментарий