Как выставить TCP сервис на IPv6 (GKE) - PullRequest
1 голос
/ 21 апреля 2020

Я пытаюсь выставить kubernetes TCP-сервис на publi c IPv6-адрес. Приложение работает нормально на IPv4, но я не могу настроить его на IPv6. Проблема в том, что это не служба HTTP. Текущий сервис выполняется по типу: LoadBalancer на нестандартном порту 11042. Поэтому я думаю, что он создает балансировщик сетевой нагрузки.

В соответствии с правилами пересылки документации, поддерживающими IPv6: Целевой прокси-сервер HTTP Целевой прокси-сервер HTTPS, Целевой прокси-сервер SSL, Целевой прокси-сервер TCP, но прокси-сервер TCP имеет закрытый список портов, которые можно использовать. Я также пытался использовать Ingress, но, похоже, в Google он поддерживает только HTTP / S. Есть ли другой способ выставить службу TCP на publi c IPv6?

Спасибо

1 Ответ

1 голос
/ 22 апреля 2020

На данный момент Сетевой балансировщик нагрузки не поддерживает IPv6 . Обратите внимание, что это единственный сквозной балансировщик нагрузки, доступный в настоящее время на GCP . Сравните это с Сводка балансировщиков нагрузки Google Cloud таблица.

Только прокси балансировщики нагрузки, такие как HTTP / HTTPS Loadbalancers и TCP Proxy / SSL Proxy поддерживает IPv6 (сравните с IPv6-завершением для HTTP (S), SSL-прокси и балансировки нагрузки TCP-прокси )

Как вы можете читать в docs :

Поскольку балансировщик нагрузки является сквозным балансировщиком нагрузки, ваши серверные части завершают соединение TCP с балансировкой нагрузки или сами пакеты UDP.

Как вы, возможно, уже знаете (и вы можете прочитать об этом здесь ), в настоящее время GCP VP C и GCE экземпляры поддерживают только IPv4-подключение :

VP C сети поддерживают только IPv4 одноадресная передача traffi c. Они не поддерживают широковещательную , многоадресную или трафик IPv6 в сети; Виртуальные машины в сети VP C могут отправлять только адресаты IPv4 и получать трафик c только от источников IPv4. Однако можно создать IPv6-адрес для глобального балансировщика нагрузки .

Как вы уже упоминали TCP Proxy и SSL Proxy не поддерживают произвольные порты назначения . Поддерживаются только известные порты, перечисленные здесь , здесь . Произвольные порты могут использоваться только с внешней сетью TCP / UDP loadbalancer, но из-за отсутствия поддержки IPv6 вы не можете использовать его.

Что касается В вашем конкретном случае использования вывод заключается в том, что на данный момент это не может быть сделано так, как вы хотите.

Действительно ли ваш бэкэнд должен быть открыт для этого нестандартного порта? - Я полагаю, у вас есть веские причины для его использования, поэтому, скорее всего, его замена на какой-то известный порт даже не вариант.

Проблема в том, что это не служба HTTP. - Если это была служба http , но доступная только для некоторого произвольного порта, тогда вы можете использовать ingress . Если бы это было так, вы бы просто создали ingress , который перенаправляет запрос одному из ваших бэкэндов Services, как в этом примере. Входные бэкэнды могут действительно использовать произвольные порты , но не произвольные протоколы - в этом суть. Основной протокол прикладного уровня должен быть http . Поэтому, если ваша служба использует совершенно другой протокол, вы можете сразу забыть о ingress .

Вы действительно ответили на свой вопрос самостоятельно. Я вижу, что вы просмотрели документы и уже достаточно тщательно проанализировали все доступные решения, исключая те, которые не соответствуют вашим требованиям. Ну ... я могу подтвердить это только этим резюме. Я надеюсь, что это может быть полезно, даже если оно не обеспечивает решение, которое вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...