gRPC support in Azure Front Door (preview)

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:

  1. I Azure-portalen öppnar du din Front Door-profil.
  2. Under Inställningar väljer du Ursprungsgrupper och lägger till eller redigerar ursprungsgruppen för din gRPC-tjänst.
  3. 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.
  4. Konfigurera hälsoprober med hjälp av följande tabell.
  5. 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ärmdump som visar en ursprungsgrupp med aktiverade ursprung och gRPC valt som hälsoprobeprotokoll.

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:

  1. I din Front Door-profil, under Inställningar, välj Front Door manager.
  2. Välj slutpunkt och lägg sedan till eller redigera en rutt.
  3. Välj domänen och ursprungsgruppen som innehåller dina gRPC-aktiverade origins.
  4. Slå på Aktivera gRPC.
  5. Konfigurera rutten med följande tabell.
  6. 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ärmdump som visar Aktivera gRPC, ett metodspecifikt ruttmönster och endast HTTPS som accepterade och vidarebefordrade protokoll.

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.