App Engine kan nå VPN-databasen din: hva som må stemme overens
Standard App Engine når faktisk en database over Cloud VPN, men bare når egress, kildeområde og forespørselssti stemmer overens. Her er hva du må justere.
Påstanden om at App Engine Standard ikke kan nå en privat database over Cloud VPN, er en rest fra en tidligere generasjon av plattformen. Standard-instanser får ikke en VPC-nativ adresse slik enkelte andre kjøretidsmiljøer gjør, men de kan sende egress gjennom en Serverless VPC Access-tilkobling som ligger i nettverket ditt. Når den veien først finnes, ser Cloud VPN og den eksterne brannmuren tilkoblingens trafikk som enhver annen kilde. Det som feiler, er sjelden selve evnen. Det er én av tre innstillinger som aldri ble justert.
Hvor det gamle svaret kom fra
Før tilkoblinger fantes, var det praktiske svaret faktisk at Standard bare kunne snakke med offentlige endepunkter, og team flyttet til en proxy-VM eller et annet kjøretidsmiljø for å omgå det. Plattformen endret seg, folkloren ikke. Mye rådgivning på nettet gjenspeiler fortsatt epoken da det ikke fantes noen egress-mulighet i det hele tatt.
Korreksjonen er smalere enn den høres ut. Standard kan nå det private nettverket, men bare gjennom en støttet egress-integrasjon, og bare for destinasjonene den integrasjonen faktisk fanger.
Velg egress-veien først
En tilkobling som er knyttet til tjenesten, er det som bringer trafikken inn i VPC-en. Dokumentasjonen for tilkoblingen lister opp det regionale forutsetningskravet og egress-innstillingene; tilkoblingen må finnes i tjenestens region og kunne brukes av identiteten som distribuerer.
vpc_access_connector:
name: projects/PROJECT_ID/locations/REGION/connectors/CONNECTOR_NAME
egress_setting: private-ranges-only
private-ranges-only sender private destinasjoner inn i VPC-en og lar alt annet bli på den normale internettveien, som vanligvis er det en databaseforbindelse trenger. all-traffic presser utgående trafikk bredt gjennom VPC-en, så vanlige internettkall arver også VPC-ens NAT- og brannmurposisjon.
Redigering av filen lokalt endrer ingenting før du distribuerer. En kjørende versjon beholder konfigurasjonen den ble opprettet med.
Kildeadressen er tilkoblingen, ikke laptopen din
Det er her mesteparten av feilsøkingstiden går. Den eksterne VPN-gatewayen og brannmuren til databasen må tillate området som er tildelt tilkoblingen inne i VPC-en, ikke kontoradressen din og ikke tjenestens offentlige egress-adresse. Slå opp området i konsollen før du skriver én eneste regel.
To andre steder må stemme overens. VPC-rutetabellen trenger en rute til det eksterne databasenettverket, og den eksterne siden trenger en returrute for tilkoblingens område. Hvis tunnelen bruker trafikkvelgere, bekreft at tilkoblingens område ligger innenfor det forhandlede omfanget. En rute som bare finnes i retningen fra ekstern til lokal, er en vanlig feil, og den slipper ping gjennom uten noensinne å fullføre et TCP-håndtrykk.
En tunnel som bare tillater et VM-subnett, vil droppe tilkoblingens pakker uten en nyttig feilmelding, og derfor ser databasens tidsavbrudd ut som et legitimasjonsproblem.
DNS reiser en annen vei
Et privat databasevertsnavn må løses innenfor nettverket tilkoblingen når, gjennom Cloud DNS-peering eller en videresendingssone som VPC-en kan bruke. Å løse det på arbeidsstasjonen din beviser ingenting om den distribuerte tjenesten, fordi laptopen din ikke bruker den oppløseren.
Hvis navnet løses til en offentlig adresse fra innsiden av VPC-en, er du i ferd med å feilsøke feil brannmur.
URL Fetch bruker ikke tilkoblingen
Egress-innstillingen dekker kjøretidsmiljøets normale utgående sockets, og den eldre URL Fetch-tjenesten er ikke en del av den veien. En forespørsel som sendes via urlfetch, ignorerer tilkoblingen uansett hva konfigurasjonen sier. Når det feilende kallet ligger i et eldre bibliotek som fortsatt bruker URL Fetch, er løsningen å flytte kallet til den standard HTTP-klienten.
For en databasedriver er dette sjelden problemet, men det er den klassiske grunnen til at ett endepunkt virker og et annet ikke fra samme tjeneste.
Verifiser med én smal spørring
Distribuer, og kjør deretter én tillatt databaseoperasjon fra den distribuerte versjonen mens du overvåker den eksterne siden. Kildeadressen som logges av databasen eller VPN-gatewayen, bør være tilkoblingens. Hvis ikke, kom forespørselen aldri inn i VPC-en, og ingen tunnelkonfigurasjon retter det. Sammenlign den med området du slo opp i konsollen; et avvik betyr vanligvis at en andre tilkobling betjener versjonen.
En vellykket spørring fra en VM inne i VPC-en fastslår at ruten finnes. Den fastslår ikke at tjenesten valgte den.