GCP Classic VPN Terraformissa: tee tunnelista reittipohjainen
Classic VPN:ssä tunniste ei päätä käyttäytymistä. Reittipohjainen tarkoittaa paikallista valitsinta 0.0.0.0/0, vastaavia etävalitsimia ja eksplisiittistä reittiä.
Suunnitelma toteutuu siististi, tunneli nousee ja konsoli kutsuu sitä käytäntöpohjaiseksi. Liikenne ei silti kulje, eikä reittipohjaisen kytkimen etsiminen Terraform-resurssista johda mihinkään, koska sellaista kenttää ei ole. Classic VPN:ssä reittipohjainen käyttäytyminen ei ole tila, jonka valitset. Sen saa, kun paikallinen liikennevalitsin on 0.0.0.0/0, etävalitsimet listaavat verkot, jotka todella haluat, ja reitti osoittaa tunneliin. Kolme asiaa, ja tunniste seuraa.
Myytti: tunnelin tilakenttä
Konsolin tunniste heijastaa sitä, mitä API näkee valitsimissa. Mikään resurssissa ei sano reittipohjainen, joten mitään ei voi asettaa todeksi.
Sen kentän etsiminen vie ongelman ensimmäisen tunnin, kun taas valitsimien arvojen lukeminen vie viimeiset viisi minuuttia.
Mitä reittipohjainen tarkoittaa tässä
Google dokumentoi Classic VPN:n reittipohjaiset tunnelit käytäntöpohjaisiksi tunneleiksi, joiden paikallinen valitsin on 0.0.0.0/0. Vain etäalueet nimetään, ja paikallista puolta kohdellaan mielivaltaisena osoitteena. Siksi kokoonpanosi merkki on arvo eikä tila. Kirjoita molemmat valitsimet eksplisiittisesti ja lue ne suunnitelman tulosteesta:
local_traffic_selector = ["0.0.0.0/0"]
remote_traffic_selector = ["10.20.0.0/16"]
Kumppanin etuliite tuossa katkelmassa on havainnollinen; muoto on se, jolla on merkitystä.
Reitti on erillinen objekti
Tunnelioli ei asenna reittiä. Paketit voivat vastata tunnelin käytäntöä ja silti jäädä ilman paikkaa, jonne mennä, koska VPC:n reititystaulu päättää seuraavan hypyn. Reitti tarvitsee kohdealueen, verkon, tunnelin seuraavana hyppynä ja prioriteetin, joka voittaa kaiken laajemman. Jos sen unohtaa, saa tunnelin, joka ilmoittaa yhteyden muodosteteksi, ja tarkistuksen, joka ei koskaan poistu VPC:stä.
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
}
Luo reitti samaan moduuliin kuin tunneli, jotta ne eivät erkaannu katselmoinnissa.
Peilaa valitsimet kumppanille
Etälaite on määritettävä peilikuvaksi: sen paikallinen alue on sinun etävalitsimesi, ja sen etäalueen on katettava ne GCP-aliverkot, joita aiot käyttää. Jos kumpi tahansa puoli kaventaa, vaihe 2 epäonnistuu vaikka vaihe 1 onnistuu. Tämä on yleisin muoto kokoonpanosta, joka näyttää konsolissa oikealta eikä välitä liikennettä.
Tulosta molempien puolten valitsimet vierekkäin muutoksen katselmoinnissa.
Jaa staattinen osoite kahteen sovellukseen
Varatun osoitteen ja siihen viittaavan tunnelin luominen yhdessä sovelluksessa on tunnettu epävakauden lähde, koska osoitteen on oltava olemassa ennen kuin välityssääntö voi käyttää sitä. Käytä ensin vain osoiteresurssia, lisää sitten yhdyskäytävä, välityssäännöt ja tunneli ja käytä uudelleen. Terraform lukee olemassa olevan osoitteen tilasta toisella ajokerralla ja käyttää sitä uudelleen. Jos sen ohittaa, tunneli voi saada uuden julkisen osoitteen joka sovelluksella, mikä rikkoo kumppanin kokoonpanon joka kerta.
Kaksi sovellusta nyt on halvempaa kuin kumppanin muutos joka julkaisulla.
Varmista neuvottelu, älä tunniste
Tarkista käytön jälkeen kolme erillistä tosiasiaa: tunneli ilmoittaa yhteyden muodosteteksi, reitti on olemassa aiotulla seuraavalla hypyllä ja kumppani ilmoittaa sekä vaiheen 1 että vaiheen 2 olevan ylhäällä.
Tunneli, joka on ylhäällä mutta vaihe 2 alhaalla, tarkoittaa, että kaksi puolta eivät sovi valitsimista:
- Toinen puoli listaa aliverkon, jota toinen ei listaa.
- Toinen puoli käyttää koostetta, jota toinen on kaventanut.
- Reitti on olemassa mutta osoittaa toiseen tunneliin.
Classic VPN on yksi tunneli, jonka SLA on matalampi kuin HA VPN:llä, ja HA VPN käyttää kahta rajapintaa, kahta tunnelia ja BGP:tä eri resurssityypeillä. Klassisen esimerkin kopioiminen HA-kokoonpanoon ja odotus siitä, että valitsinkentät käyttäytyvät samoin, on erillinen virhe, joka kannattaa välttää. Itse tunnelikentät on dokumentoitu google_compute_vpn_tunnel-viitteessä.