Мы пытаемся настроить сервер удаленного доступа OpenVPN в кластере Kubernetes, чтобы заменить службу, ранее размещавшуюся на локальном брандмауэре.
Наша более широкая сеть частично находится на GCP / GCE, с динамической маршрутизацией BGP на наши локальные сайты через IPsec.
В настоящее время на существующем локальном сервере OpenVPN IP-адреса, выделенные подключенным клиентам, маршрутизируются из остальной сети, поэтому мы можем передавать им входящие и исходящие сообщения без NAT.
Мы хотели бы перенести сервис на Kubernetes Engine, поскольку именно там переносятся все наши другие рабочие нагрузки Linux, и мы предпочитаем рабочий процесс в стиле DevOps, с которым он управляет доступностью и восстановлением.
Итак, предположим, что у нашего контейнера OpenVPN есть клиенты, подключенные в диапазоне 10.30.50.0/24, с IP-адресом Pod, динамически выделяемым в 10.50.30.0/20, как бы мы сказали GCP направить этот диапазон 10.30.50.0/24 к службе OpenVPN в Под? И возможно ли это вообще?
Одна мысль заключалась в том, чтобы вызвать API-интерфейсы GCE при запуске Pod, чтобы добавить статический маршрут, направленный к IP-адресу Pod, но я не уверен, пройдет ли трафик через кластер и достигнет OpenVPN в Pod.
В GCP невозможно создать маршрут для маршрутизации подсети 10.30.50.0/24 из вторичного диапазона IP-адресов 10.30.0.0/20 для использования OpenVPN. Итак, есть 2 возможных решения для достижения желаемого:
1.- Вы можете создать экземпляр виртуальной машины в GCP для настройки туннеля OpenVPN. Затем вы можете добавить статический маршрут в GCP с помощью nexthop этого экземпляра виртуальной машины. Кластер GKE в той же сети VPC, что и экземпляр OpenVPN, будет использовать его в качестве следующего узла, поэтому весь трафик от узлов будет использовать туннель OpenVPN. Если вы не хотите перенаправлять весь трафик со всего узла в кластере через экземпляр VPN, вы можете указать тег и прикрепите его во время создания кластера или пула узлов.
Помните, что с обоими решениями вы должны включить Псевдоним IP в каждом кластере GKE, чтобы разрешить обмен данными от вашей локальной сети до модулей.