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.