Балансировка нагрузки GCP (внутренний трафик по HTTPS)

У меня есть группа экземпляров GCP с 2 экземплярами. Оба работают. Я хочу настроить балансировщик нагрузки (HTTPS) для управления трафиком.

Я установил правило пересылки с HTTP-протоколом и сертификатом, управляемым Google. Все это работает, но только тогда, когда трафик между балансировщиком нагрузки и серверной частью (экземплярами) является обычным HTTP.

Шаги, которые я сделал на данный момент

  • Я создаю шаблон, и этот шаблон представляет собой обычную машину серии N1. Я установил флажки, чтобы создать правила брандмауэра, разрешающие трафик http и https.
  • Я создаю правило брандмауэра с именем «allow-ports». Это правило брандмауэра нацелено на все экземпляры в сети, имеет диапазон IP-адресов 0.0.0.0/0 и разрешает порт tcp = 80, 443. Как я вижу, это правило брандмауэра должно открывать как http (80), так и https (443). порт.
  • Создаю группу экземпляров с сопоставлением портов. "http-port" = 80, "https-port" = 443. Я использую только что созданный шаблон.
  • Когда группа экземпляров создана, я проверяю, работает ли она. С помощью SSH я получаю доступ к экземплярам и устанавливаю apache (sudo apt-get install -y apache2) на обоих. При переходе к их внешним IP-адресам в браузере я вижу их обоих.
  • Я создаю балансировщик нагрузки HTTP (S) с опцией «Из Интернета на мои виртуальные машины». Для конфигурации серверной части я добавляю серверную службу с моей группой экземпляров, протоколом HTTP, с именем порта "http-port". Для настройки внешнего интерфейса я настроил протокол HTTPS, создал IP-адрес IPv4, создал ssl-сертификат, управляемый Google, и все готово. Я также добавил проверки здоровья, кстати.

Теперь ... эти шаги работают (через несколько минут). В облачном DNS я установил доменное имя, которое указывает на IP-адрес балансировщика нагрузки. Когда захожу, я вижу страницу apache.

Что не работает?

Когда я меняю конфигурацию бэкэнда на HTTPS (и называю порт «https-port»), я получаю ошибку сервера 502. Так мне кажется, что какая-то связь есть, но есть ошибка. Может быть, это ошибка apache?

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

Чего я хочу достичь?

Мне нужно не только безопасное (HTTPS) соединение между клиентом и балансировщиком нагрузки, но и безопасное соединение между балансировщиком нагрузки и серверной службой (группой экземпляров). Поскольку GCP предлагает возможность использовать протокол HTTPS при создании серверной службы, я считаю, что это можно сделать.

Честно говоря: я читаю статьи о том, что внутренний трафик защищен, поэтому HTTPS-соединение не требуется. Но для меня это не имеет значения, я действительно хочу знать, как это работает!

ИЗМЕНИТЬ

Я использую правильный VPC (по умолчанию). Я также отредактировал правило брандмауэра с 0.0.0.0/0 на 130.211.0.0/22 ​​и 35.191.0.0/16 (см .: https://cloud.google.com/compute/docs/tutorials/globally-autoscaling-a-web-service-on-compute-engine?hl=nl#configure_the_load_balancer).


person yesterday    schedule 20.01.2020    source источник
comment
Вы настроили HTTPS на бэкэндах? В противном случае вы не можете использовать HTTPS между балансировщиком нагрузки и серверными модулями.   -  person John Hanley    schedule 21.01.2020
comment
Проведу простой эксперимент - я вам еще вернусь с результатами :)   -  person Wojtek_B    schedule 21.01.2020
comment
@Wojciech Bogacz, спасибо, это очень любезно!   -  person yesterday    schedule 21.01.2020
comment
@John Hanley: вы имеете в виду, что мне нужно установить сертификат SSL на серверах apache в экземплярах?   -  person yesterday    schedule 21.01.2020
comment
Да, если вы хотите использовать HTTPS для бэкэндов,   -  person John Hanley    schedule 21.01.2020
comment
SSL-сертификаты необходимы также на сервере, если вам нужен HTTPS, и вы даже можете использовать самозаверяющие сертификаты или сертификаты с истекшим сроком действия - они все равно будут работать. Я хочу провести этот эксперимент, чтобы дать вам список шагов, как настроить его в GCE.   -  person Wojtek_B    schedule 21.01.2020
comment
Ошибка 502 - это неверный ответ шлюза. Вы изменили проверку работоспособности с HTTP по умолчанию на HTTPS при переключении серверной части на HTTPS? Взгляните на cloud.google. ru / load-balancing / docs /.   -  person Serhii Rohoza    schedule 21.01.2020


Ответы (1)


В дополнение к моему предыдущему комментарию. Я следил за вашими действиями в своем тестовом проекте, чтобы выяснить причину вашей проблемы. Я установил ту же конфигурацию и проверил ее с помощью HTTP на сервере. Как и ожидалось, ошибок не обнаружил. После этого я установил SSL-сертификаты в серверную часть и в балансировщик нагрузки. Затем я переключил свой сервер, балансировщик нагрузки и проверки работоспособности на HTTPS и отключил HTTP на сервере. На этом этапе я также не обнаружил ошибок.

Итак, я решил каким-то образом получить ошибку 502 в моей тестовой конфигурации. Я переключил проверку работоспособности на балансировщике нагрузки на HTTP. Через несколько минут я снова попытался связаться со своей тестовой службой и получил ошибку 502. Когда я вернул проверку работоспособности на HTTPS 502, ошибка исчезла.

Во время этого теста я не менял правила брандмауэра, но разрешил трафик HTTP и HTTPS в моем шаблоне экземпляра и использовал сеть по умолчанию.

person Serhii Rohoza    schedule 23.01.2020
comment
Я не устанавливал HTTPS на свой сервер, думаю, в этом была проблема. Спасибо за ответ, думаю, сейчас смогу воспроизвести. - person yesterday; 23.01.2020