Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: ✔️ Front Door Standard ✔️ Front Door Premium
I den här artikeln lär du dig hur man konfigurerar och testar inbyggda gRPC-tjänster via Azure Front Door Standard och Premium. Du kan dirigera anrop efter tjänst och metod, distribuera trafik över friska originservrar och tillämpa stödda kontroller för begäran-metadata.
Important
gRPC-stödet i Azure Front Door finns för närvarande i offentlig förhandsvisning. Se Tilläggsvillkor för användning av Microsoft Azure-förhandsversioner för juridiska villkor som gäller för Azure-funktioner som är i beta, förhandsvisning eller på annat sätt ännu inte släppta för allmän tillgänglighet.
Den publika förhandsversionen är tillgänglig för alla Azure Front Door Standard- och Premium-kunder. Du behöver inte registrera dig i förhandsvisningen eller uppfylla ytterligare krav på förhandsvisning.
Vad är gRPC?
gRPC är ett öppet källkodsramverk för fjärrproceduranrop. En klient anropar en metod på en fjärrtjänst via ett definierat tjänstekontrakt. Inbyggd gRPC använder HTTP/2 och använder ofta protokollbuffertar för att serialisera meddelanden.
gRPC erbjuder följande fördelar:
- Effektiv transport genom HTTP/2-binär inramning, headerkomprimering och anslutningsmultiplexering.
- Starkt typade tjänstekontrakt och genererade klient- och serverkod över stödda språk.
- Unära anrop, klientströmning, serverströmning och tvåvägsströmning, med stöd för deadlines, avbrytning, metadata och statuskoder.
För mer information, se gRPC:s kärnkoncept, arkitektur och livscykel.
Protocol Buffers och methodsökvägar
Protocol Buffers erbjuder språkneutral, plattformsneutral strukturerad dataserialisering. En .proto fil definierar meddelanden, tjänster och RPC-metoder. Protocol Buffers-kompilatorn, protoc, genererar motsvarande kod.
Följande greet.proto exempel definierar en unär SayHello metod:
syntax = "proto3";
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
Den fullt kvalificerade sökvägen för begäran är /greet.Greeter/SayHello. Använd denna väg för att matcha metoden i en Azure Front Door-rutt.
Hur gRPC fungerar med Azure Front Door
Klientens TLS-anslutning avslutas vid Azure Front Door-kanten. Front Door matchar gRPC-rutten, utvärderar stödda policyer mot HTTP/2-begärandets metadata, väljer ett felfritt ursprung och vidarebefordrar anropet över en separat HTTPS- och HTTP/2-anslutning. Svarsmeddelanden och gRPC-trailers återvänder till klienten.
Följande beteende gäller för gRPC-aktiverade rutter under förhandsvisningen:
| Area | Beteende eller begränsning |
|---|---|
| Nivåer | Endast Standard och Premium. |
| Transport | HTTPS och HTTP/2 krävs från klient till Front Door och från Front Door till origin. |
| RPC-mönster | Unary-, klientströmnings-, serverströmnings- och tvåvägsströmningsanrop stöds. |
| Vägmatchning | Använd en komplett /package.Service/Method sökväg, eller använd medvetet ett brett mönster som /*. |
| Caching | Caching stöds inte och är inaktiverat på gRPC-aktiverade rutter. |
| Omdirigeringar och vidarebefordran | Omdirigeringar är inte giltiga för gRPC-trafik. Behåll vidarebefordran för rutter och regeluppsättningar konfigurerad för HTTPS. |
| Regeluppsättningar och Edge-åtgärder | Stöds, med förbehåll för krav för HTTPS-vidarebefordran och förhandsgranskningsbegränsningar i denna tabell. |
| Private Link | Private Link stöds inte för gRPC-aktiverade origins under förhandsvisningen. |
| Åsidosättningar för ruttkonfiguration | En gRPC-aktiverad ursprungsgrupp kan inte vara målet för en regel för ruttkonfigurationsöverskrivning under förhandsvisningen. |
| Brandvägg för webbaserade program (WAF) | Kontroller av metadata för begäran stöds. Protobuf-meddelanden avkodas inte för inspektion av begärandetexten. |
Prerequisites
- En Azure Front Door Standard- eller Premium-profil. För att skapa en, se Skapa en Azure Front Door-profil.
- Ett gRPC-ursprung som accepterar TLS och HTTP/2 på sin konfigurerade HTTPS-ursprungsport. Varje ursprung i ruttens ursprungsgrupp måste vara aktiverat för gRPC.
Konfigurera ursprungskällor och hälsoprober
Konfigurera ursprungsgruppen innan du kopplar den till en gRPC-rutt:
- I Azure-portalen öppnar du din Front Door-profil.
- Under Inställningar väljer du Ursprungsgrupper och lägger till eller redigerar ursprungsgruppen för din gRPC-tjänst.
- Lägg till eller redigera varje ursprung. Aktivera gRPC för varje origin och konfigurera HTTPS-porten så att den överensstämmer med den port som gRPC-tjänsten använder. Aktivera inte Private Link för dessa ursprungsservrar under förhandsvisningen.
- Konfigurera hälsoprober med hjälp av följande tabell.
- Spara ursprungsgruppen.
| Setting | Configuration |
|---|---|
| Hälsoundersökningar | Aktivera prober för att kontrollera origin-hälsan. |
| Protocol | Välj gRPC för en intern gRPC-avsökning. Varje origin måste implementera den standardiserade grpc.health.v1.Health/Check RPC. |
| HTTP- eller HTTPS-avsökningar | Som ett alternativ till inbyggda gRPC-prober väljer du HTTP eller HTTPS och konfigurerar en HTTP-hälso-slutpunkt på ursprungsservrarna. |
| Probeintervall och lastbalansering | Välj värden som uppfyller din applikations krav på hälsoidentifiering och ursprungsserverbelastning. |
En inbyggd gRPC-probe kräver den standardiserade gRPC-hälsotjänsten, inte bara en applikations-RPC som SayHello. För mer information, se gRPC:s hälsokontroll. För HTTP- och HTTPS-prober, se Azure Front Door-hälsoavsökningar.
Skärmdumpen visar exempel på probe- och lastbalanseringsinställningar. Välj värden som uppfyller din applikations krav.
Konfigurera en gRPC-rutt
Skapa eller uppdatera en rutt för att skicka gRPC-anrop till ursprungsgruppen:
- I din Front Door-profil, under Inställningar, välj Front Door manager.
- Välj slutpunkt och lägg sedan till eller redigera en rutt.
- Välj domänen och ursprungsgruppen som innehåller dina gRPC-aktiverade origins.
- Slå på Aktivera gRPC.
- Konfigurera rutten med följande tabell.
- Spara rutten.
| Setting | Configuration |
|---|---|
| Mönster som ska matcha | För en RPC, ange hela /package.Service/Method vägen, såsom /greet.Greeter/SayHello. Använd en bred /* rutt endast när du tänker exponera flera metoder eller server reflection. |
| Accepterat protokoll | Att aktivera gRPC sätter automatiskt detta värde till endast HTTPS. |
| Vidarebefordran av protokoll | Att aktivera gRPC sätter automatiskt detta värde till endast HTTPS. |
| Caching | Avstängd för gRPC-aktiverade rutter. |
Skärmdumpen visar ett exempel på rutt. Använd din egen domän, ursprungsgrupp och RPC-metodväg.
Regeluppsättningar och Edge Actions stöds på gRPC-aktiverade rutter. Om en regeluppsättning konfigurerar vidarebefordringsprotokollet till HTTP returnerar Azure Front Door ett 301HTTP-svar till gRPC-klienten. Detta svar möjliggör inte omdirigeringsstöd för gRPC-trafik. Behåll vidarebefordran för rutter och regeluppsättningar konfigurerad för HTTPS.
Om du konfigurerar rutten genom infrastruktur som kod, använd explicit kompatibla HTTPS- och gRPC-inställningar. Inkompatibla HTTP-protokollkombinationer avvisas.
Testa med grpcurl
För att köra följande testexempel, installera grpcurl. Du behöver inte detta verktyg för att konfigurera gRPC-stöd i Azure Front Door.
Använd filen eller den kompilerade deskriptorn .proto för din distribuerade tjänst för att testa en metodspecifik rutt utan att förlita dig på serverreflektion. Server reflection är ett valfritt alternativ. Följande exempel använder greet.Greeter kontraktet som visades tidigare.
Byt ut contoso.azurefd.net mot din Front Door-endpoint eller anpassade domän. Använd domänen som matchar endpointens TLS-certifikat. Alla exempel kopplas över TLS på porten 443; lägg inte till -plaintext.
Testa en metodspecifik rutt med en lokal protofil
Spara tjänstedefinitionen som greet.proto i din nuvarande katalog. För en rutt som matchar /greet.Greeter/SayHello, kör:
grpcurl -import-path "." -proto "greet.proto" -d "{}" contoso.azurefd.net:443 greet.Greeter/SayHello
| Argument | Purpose |
|---|---|
-import-path "." |
Katalog som innehåller dina protofiler. Byt ut . om filerna finns i en annan katalog. |
-proto "greet.proto" |
Tjänstedefinition som matchar det driftsatta ursprunget. |
-d "{}" |
JSON-begärandetext. Ersätt det med det meddelande som krävs av din tjänst. |
contoso.azurefd.net:443 |
Front Door-endpoint eller anpassad domän och HTTPS-port. |
greet.Greeter/SayHello |
Fullt kvalificerat RPC-namn, utan det inledande / som används i ruttmönstret. |
Genom att tillhandahålla den lokala prototypen låter grpcurl anropa applikationsmetoden utan ett preliminärt reflektionsanrop. Du kan också tillhandahålla en kompilerad deskriptor med grpcurl istället för en protofil.
Testa en avsiktligt omfattande rutt med serverreflektion
Serverreflektion är valfri. Om du inte tillhandahåller en lokal proto eller beskrivare använder grpcurl serverreflektion för att hitta serviceavtalet. Ursprungsservern måste implementera reflektion, och Front Door-rutten måste matcha dess RPC-väg.
Till exempel använder reflektions-RPC grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo begäransökvägen /grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo. En rutt begränsad till /greet.Greeter/SayHello matchar inte den vägen. Testet kan misslyckas innan applikationens RPC anropas, även om applikationsrutten är korrekt.
Om du medvetet konfigurerade en bred /* route och aktiverade reflektion på ursprunget, lista tjänsterna:
grpcurl contoso.azurefd.net:443 list
Anropa sedan metoden genom att använda det reflekterade kontraktet:
grpcurl -d "{}" contoso.azurefd.net:443 greet.Greeter/SayHello
Important
Exponera bara reflection när det är avsiktligt. Föredra lokala proto- eller deskriptorfiler när du testar metodspecifika rutter istället för att bredda rutten bara för att få upptäckten att fungera.
Felsök grpcurl-tester
| Symtom | Kontrollera eller vidta åtgärd |
|---|---|
grpcurl list misslyckas, men ett samtal med -proto lyckas. |
Kontrollera om rutten matchar applikationens RPC men inte reflektions-RPC:n. Fortsätt använda den lokala proto eller deskriptorn för en metodspecifik rutt. |
| Identifiering av reflection misslyckas. | Kontrollera att ursprung implementerar reflektion och att route matchar sin RPC-sökväg. Annars, ange en lokal proto eller deskriptor. |
| Den begärda metoden matchar inte rutten. | Jämför paketet, tjänsten och metoden i den distribuerade protofilen med hela ruttvägen. Inkludera inledande / i ruttmönstret, men inte i RPC-argumentet till grpcurl. |
| Ett TLS-värdnamns- eller certifikatfel uppstår. | Kontrollera att värdnamnet som angetts för grpcurl matchar Front Door-domänen och certifikatet. Använd TLS, inte -plaintext. |
Överväganden för Web Application Firewall
Azure Front Door WAF kan utvärdera stödda HTTP/2-förfrågningsmetadata, såsom URI, rubriker, klientens IP-adress och geografi. Stödda metadatabaserade hastighetsbegränsningsscenarier kan också tillämpas.
Front Door avkodar inte protobuf-meddelanden. WAF-regler som är beroende av inspektion av gRPC-meddelandekroppen ger inte protobuf-nyttolastinspektion. Validera meddelanden i gRPC-applikationen eller en annan komponent som förstår protobuf-schemat. Behandla inte metadatakontroller som skydd på meddelandenivå.
Mer information finns i Brandvägg för webbprogram på Azure Front Door.
Övervaka gRPC-trafik
Konfigurera diagnostiska loggar och korrelera Front Door-åtkomstloggar med gRPC-applikationsloggar på ursprungssidan. Kontrollera både HTTP-statusen och gRPC-statusen som returneras i trailer-fälten. Ett HTTP-svar 200 kan fortfarande bära en icke-OK gRPC-applikationsstatus.
Om du skickar åtkomstloggar till tabellen AzureDiagnostics i en Log Analytics-arbetsyta använder du följande fråga för att granska HTTP-metadata för exempeltjänsten:
AzureDiagnostics
| where ResourceProvider == "MICROSOFT.CDN"
and Category == "FrontDoorAccessLog"
| where TimeGenerated > ago(1d)
| where requestUri_s contains "/greet.Greeter/"
| project TimeGenerated, ResourceId, requestUri_s,
httpVersion_s, httpStatusCode_s
Byt ut /greet.Greeter/ med sökväg till tjänsten. Sökfrågan visar request-URI:er, HTTP-versioner och HTTP-statuskoder, inte gRPC-statusen i response trailers. Använd gRPC-loggar på originservern för att undersöka applikationsstatus och korrelera fel med Front Door-åtkomstloggarna.