GCP Classic VPN в Terraform: направете тунела маршрутизиран
В Classic VPN етикетът не определя поведението. Маршрутизиран означава локален селектор 0.0.0.0/0, съответстващи отдалечени селектори и явен маршрут.
Планът се прилага чисто, тунелът се вдига и конзолата го нарича базиран на правила. Трафикът все още не минава, а търсенето на превключвател за маршрутизиран режим в ресурса на Terraform не води доникъде, защото такова поле не съществува. В Classic VPN маршрутизираното поведение не е режим, който избирате. То се получава, когато локалният селектор на трафика е 0.0.0.0/0, отдалечените селектори изброяват мрежите, които наистина искате, и маршрут сочи към тунела. Три неща, а етикетът следва.
Митът: поле за режим на тунела
Етикетът в конзолата отразява това, което API вижда в селекторите. Нищо в ресурса не казва маршрутизиран, така че няма какво да се зададе на стойност вярно.
Търсенето на това поле изяжда първия час от проблема, а четенето на стойностите на селекторите отнема последните пет минути.
Какво означава маршрутизиран тук
Google описва маршрутизираните тунели на Classic VPN като тунели, базирани на правила, чийто локален селектор е 0.0.0.0/0. Назовават се само отдалечените диапазони, а локалната страна се третира като всеки адрес. Затова маркерът в конфигурацията ви е стойност, а не режим. Запишете двата селектора явно и ги прочетете в изхода на плана:
local_traffic_selector = ["0.0.0.0/0"]
remote_traffic_selector = ["10.20.0.0/16"]
Префиксът на партньора в този фрагмент е илюстративен; важна е формата.
Маршрутът е отделен обект
Обектът тунел не инсталира маршрут. Пакетите могат да съответстват на правилата на тунела и пак да нямат къде да отидат, защото следващият хоп се решава от таблицата за маршрутизиране на VPC. Маршрутът се нуждае от диапазона местоназначение, мрежата, тунела като следващ хоп и приоритет, който побеждава всичко по-широко. Ако го забравите, ще получите тунел, който отчита установена връзка, и проверка, която никога не напуска VPC.
resource "google_compute_route" "office" {
name = "office-via-vpn"
dest_range = "10.20.0.0/16"
network = google_compute_network.vpc.name
next_hop_vpn_tunnel = google_compute_vpn_tunnel.to_office.id
priority = 1000
}
Създайте маршрута в същия модул като тунела, за да не се разминат двата при преглед.
Огледайте селекторите на партньора
Отдалеченото устройство трябва да е конфигурирано огледално: неговият локален диапазон е вашият отдалечен селектор, а отдалеченият му диапазон трябва да покрива подмрежите на GCP, които смятате да използвате. Ако някоя страна стесни, фаза 2 се проваля, въпреки че фаза 1 успява. Това е най-честата форма на конфигурация, която изглежда правилна в конзолата и не носи трафик.
Отпечатайте селекторите на двете страни един до друг при прегледа на промяната.
Разделете статичния адрес на две прилагания
Създаването на резервирания адрес и тунела, който го реферира, в едно прилагане е известен източник на преработки, защото адресът трябва да съществува, преди правилото за препращане да го използва. Приложете първо само ресурса на адреса, после добавете шлюза, правилата за препращане и тунела и приложете отново. Terraform чете съществуващия адрес от състоянието при второто пускане и го използва повторно. Ако пропуснете това, тунелът може да получи нов публичен адрес при всяко прилагане, което чупи конфигурацията на партньора всеки път.
Две прилагания сега е по-евтино от промяна на партньора при всяко издание.
Проверявайте преговорите, не етикета
След прилагането проверете три отделни факта: тунелът отчита установена връзка, маршрутът съществува с предвидения следващ хоп, а партньорът отчита работещи фази 1 и 2.
Тунел, който работи, но фаза 2 е паднала, означава, че двете страни не са съгласни за селекторите:
- Едната страна изброява подмрежа, която другата не изброява.
- Едната страна използва агрегат, който другата е стеснила.
- Маршрутът съществува, но сочи към друг тунел.
Classic VPN е един тунел с по-нисък SLA от HA VPN, а HA VPN използва два интерфейса, два тунела и BGP с различни типове ресурси. Копирането на класически пример в HA конфигурация с очакване полетата на селекторите да се държат по същия начин е отделна грешка, която си струва да се избегне. Самите полета на тунела са документирани в справката за google_compute_vpn_tunnel.