Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: ✔️ Front Door Standard ✔️ Front Door Premium
W tym artykule dowiesz się, jak konfigurować i testować natywne usługi gRPC za pomocą Azure Front Door Standard i Premium. Możesz kierować wywołania na podstawie usługi i metody, rozkładać ruch pomiędzy sprawnymi źródłami oraz stosować obsługiwane mechanizmy sterowania metadanymi żądań.
Important
Wsparcie gRPC w Azure Front Door jest obecnie dostępne w publicznym podglądzie. Zobacz dodatkowe warunki użytkowania dla wersji zapoznawczych platformy Microsoft Azure, aby zapoznać się z postanowieniami prawnymi dotyczącymi funkcji platformy Azure, które są w wersji beta, wersji zapoznawczej lub w inny sposób nie zostały jeszcze wydane w wersji ogólnodostępnej.
Publiczna wersja zapoznawcza jest dostępna dla wszystkich klientów Azure Front Door Standard i Premium. Nie musisz rejestrować się w podglądzie ani spełniać dodatkowych wymagań dotyczących dostępu do podglądu.
Co to jest gRPC?
gRPC to otwartoźródłowy framework zdalnych wywołań procedur. Klient wywołuje metodę na zdalnej usłudze poprzez zdefiniowaną umowę usługową. Natywne gRPC używa HTTP/2 i powszechnie korzysta z Protocol Buffers do serializacji wiadomości.
gRPC zapewnia następujące korzyści:
- Efektywny transport poprzez ramowanie binarne HTTP/2, kompresję nagłówków i multipleksowanie połączeń.
- Silnie typowane kontrakty usług oraz generowany kod klienta i serwera w obsługiwanych językach.
- Połączenia unarne, streaming klienta, streaming serwera oraz dwukierunkowy streaming, z obsługą limitów czasu, anulowania, metadanych i kodów statusu.
Więcej informacji można znaleźć w artykule o podstawowych koncepcjach, architekturze i cyklu życia gRPC.
Protocol Buffers i ścieżki metod
Protocol Buffers zapewniają neutralną językowo i platformowo neutralną serializację danych strukturalnych. Plik .proto definiuje wiadomości, usługi i metody RPC. Kompilator Protocol Buffers, protoc, generuje odpowiedni kod.
Poniższy greet.proto przykład definiuje metodę unarną SayHello :
syntax = "proto3";
package greet;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
W pełni określona ścieżka żądania to /greet.Greeter/SayHello. Użyj tej ścieżki, aby dopasować metodę w trasie Azure Front Door.
Jak gRPC działa z Azure Front Door
Połączenie TLS klienta jest terminowane na krawędzi Azure Front Door. Front Door dopasowuje trasę gRPC, ocenia wspierane polityki względem metadanych żądań HTTP/2, wybiera sprawny serwer źródłowy i przekazuje wywołanie przez osobne połączenie HTTPS i HTTP/2. Wiadomości odpowiedzi i trailery gRPC wracają do klienta.
Następujące zachowanie dotyczy tras z włączonym gRPC w wersji zapoznawczej:
| Area | Zachowanie lub ograniczenie |
|---|---|
| Poziomy | Tylko Standard i Premium. |
| Transport | HTTPS i HTTP/2 są wymagane od klienta do Front Door oraz od Front Door do origin. |
| Wzorce RPC | Obsługiwane są wywołania unary, client-streaming, server-streaming oraz z dwukierunkowym strumieniowaniem. |
| Dopasowywanie tras | Użyj pełnej ścieżki /package.Service/Method lub celowo użyj szerokiego wzorca, takiego jak /*. |
| Caching | Nie jest obsługiwane buforowanie i jest wyłączone na trasach obsługujących gRPC. |
| Przekierowania i przekazywanie dalej | Przekierowania nie są prawidłowe dla ruchu gRPC. Utrzymuj skonfigurowane dla protokołu HTTPS trasy i przekazywanie zestawów reguł. |
| Zestawy reguł i akcje Edge | Obsługiwane, z zastrzeżeniem wymagań dotyczących przekierowania HTTPS oraz ograniczeń podglądowych opisanych w tej tabeli. |
| Private Link | Private Link nie jest obsługiwany dla źródeł z obsługą gRPC w wersji zapoznawczej. |
| Zastąpienia konfiguracji tras | Grupa źródeł z obsługą gRPC nie może być celem reguły zastępowania konfiguracji trasy w wersji zapoznawczej. |
| Zapora aplikacji internetowej | Obsługiwane kontrole metadanych żądań mają zastosowanie. Komunikaty Protobuf nie są dekodowane na potrzeby inspekcji treści żądania. |
Prerequisites
- Profil usługi Azure Front Door w warstwie Standardowa lub Premium. Aby go utworzyć, zobacz Tworzenie profilu usługi Azure Front Door.
- Źródło gRPC akceptujące TLS i HTTP/2 na skonfigurowanym porcie źródła HTTPS. Każde źródło w grupie źródeł trasy musi być włączone dla gRPC.
Konfiguruj źródła i sondy kondycji
Skonfiguruj grupę origin przed dołączeniem jej do ścieżki gRPC:
- W portalu Azure otwórz swój profil Front Door.
- W obszarze Ustawienia wybierz Grupy origin i dodaj lub edytuj grupę origin dla swojej usługi gRPC.
- Dodaj lub edytuj każde źródło. Włącz gRPC dla każdego źródła i skonfiguruj jego port HTTPS tak, aby był zgodny z usługą gRPC. Nie włączaj funkcji Private Link dla tych źródeł w wersji zapoznawczej.
- Konfiguruj sondy zdrowotne, korzystając z poniższej tabeli.
- Zapisz grupę początkową.
| Setting | Configuration |
|---|---|
| Sondy kondycji | Włącz sondy do sprawdzania kondycji źródła. |
| Protocol | Wybierz gRPC dla natywnej sondy gRPC. Każde źródło musi implementować standardowy grpc.health.v1.Health/Check RPC. |
| Sondy HTTP lub HTTPS | Jako alternatywę dla natywnych sond gRPC wybierz HTTP lub HTTPS i skonfiguruj punkt końcowy kontroli kondycji HTTP w źródłach. |
| Interwał sondy i równoważenie obciążenia | Wybierz wartości spełniające wymagania aplikacji dotyczące sprawdzania kondycji i obciążenia serwera źródłowego. |
Natywna sonda gRPC wymaga standardowej usługi kondycji gRPC, a nie tylko aplikacyjnego RPC, takiego jak SayHello. Więcej informacji można znaleźć w sekcji gRPC health checking. W przypadku sond HTTP i HTTPS zobacz Azure Front Door health probes.
Zrzut ekranu pokazuje przykładowe ustawienia sondy i równoważenia obciążenia. Wybierz wartości spełniające wymagania Twojej aplikacji.
Konfiguruj trasę gRPC
Utwórz lub zaktualizuj trasę, aby wysyłać wywołania gRPC do grupy źródłowej:
- W profilu Front Door, w ustawieniach, wybierz Front Door manager.
- Wybierz endpoint, a następnie dodaj lub edytuj trasę routingu.
- Wybierz domenę i grupę źródeł, która zawiera Twoje źródła z włączonym gRPC.
- Włącz opcję włączenia gRPC.
- Skonfiguruj trasę, korzystając z poniższej tabeli.
- Zachowaj trasę.
| Setting | Configuration |
|---|---|
| Wzorce do dopasowania | Dla jednego RPC wpisz pełną ścieżkę /package.Service/Method , taką jak /greet.Greeter/SayHello. Szerokiej trasy /* używaj tylko wtedy, gdy zamierzasz udostępnić wiele metod lub refleksję serwera. |
| Przyjęty protokół | Włączenie gRPC automatycznie ustawia tę wartość na tylko HTTPS. |
| Protokół przekazywania | Włączenie gRPC automatycznie ustawia tę wartość na tylko HTTPS. |
| Caching | Wyłączone dla tras obsługujących gRPC. |
Zrzut ekranu pokazuje przykładową trasę. Użyj własnej domeny, grupy origin i ścieżki metody RPC.
Zestawy reguł i Edge Actions są obsługiwane na trasach obsługujących gRPC. Jeśli zestaw reguł konfiguruje protokół przekazywania na HTTP, usługa Azure Front Door zwraca klientowi gRPC odpowiedź 301 HTTP. Ta odpowiedź nie obsługuje przekierowań dla ruchu gRPC. Utrzymuj skonfigurowane dla protokołu HTTPS trasy i przesyłanie dalej zestawów reguł.
Jeśli konfigurujesz trasę przez infrastrukturę jako kod, wyraźnie użyj kompatybilnych ustawień HTTPS i gRPC. Niekompatybilne kombinacje protokołów HTTP są odrzucane.
Testowanie za pomocą grpcurl
Aby uruchomić poniższe przykłady testowe, zainstaluj grpcurl. Nie potrzebujesz tego narzędzia do konfiguracji wsparcia gRPC w Azure Front Door.
Użyj pliku lub skompilowanego deskryptora wdrożonej usługi .proto , aby przetestować trasę specyficzną dla metody bez polegania na odbiciu serwera. Reflection serwera to opcjonalna alternatywa. Poniższe przykłady wykorzystują pokazaną wcześniej umowę greet.Greeter.
Zamień contoso.azurefd.net na swój endpoint Front Door lub domenę niestandardową. Użyj domeny, która odpowiada certyfikatowi TLS punktu końcowego. Wszystkie przykłady łączą się przez TLS na porcie 443; nie dodawaj -plaintext.
Przetestuj trasę specyficzną dla metody za pomocą lokalnego pliku proto
Zapisz definicję usługi jako greet.proto w swoim aktualnym katalogu. Dla trasy odpowiadającej /greet.Greeter/SayHello, wykonaj:
grpcurl -import-path "." -proto "greet.proto" -d "{}" contoso.azurefd.net:443 greet.Greeter/SayHello
| Argument | Purpose |
|---|---|
-import-path "." |
Katalog zawierający pliki proto. Zastąp ., jeśli pliki znajdują się w innym katalogu. |
-proto "greet.proto" |
Definicja usługi, która odpowiada wdrożonemu źródłu. |
-d "{}" |
Ciało żądania JSON. Zastąp go wiadomością wymaganą przez twoją usługę. |
contoso.azurefd.net:443 |
Punkt końcowy Front Door lub domena niestandardowa i port HTTPS. |
greet.Greeter/SayHello |
W pełni kwalifikowana nazwa RPC, bez początkowego / używanego we wzorcu trasy. |
Podanie lokalnego proto pozwala grpcurl wywołać metodę aplikacji bez wstępnego wywołania mechanizmu refleksji. Możesz też dostarczyć skompilowany deskryptor grpcurl zamiast pliku proto.
Przetestuj celowo szeroką ścieżkę z odzwierciedleniem serwera
Refleksja serwera jest opcjonalna. Jeśli nie dostarczysz lokalnego prototypu lub deskryptora, grpcurl używa refleksji serwera, aby odnaleźć kontrakt usługi. Origin musi implementować refleksję, a trasa Front Door musi odpowiadać jego ścieżce RPC.
Na przykład RPC odbicia grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo korzysta ze ścieżki żądania /grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo. Ścieżka ograniczona do /greet.Greeter/SayHello nie odpowiada tej ścieżce. Test może zakończyć się niepowodzeniem przed wywołaniem RPC aplikacji, nawet jeśli trasa aplikacji jest poprawna.
Jeśli celowo konfigurowałeś /* szeroką trasę i włączyłeś odbijanie dla origin, wymień usługi:
grpcurl contoso.azurefd.net:443 list
Następnie wywołaj metodę, używając kontraktu refleksyjnego:
grpcurl -d "{}" contoso.azurefd.net:443 greet.Greeter/SayHello
Important
Eksponuj refleksję tylko wtedy, gdy jest to zamierzone. Używaj lokalnych plików proto lub deskryptorów podczas testowania tras specyficznych dla metody, zamiast rozszerzać trasę tylko po to, by wykrywanie działało.
Rozwiązywanie problemów z testami grpcurl
| Objaw | Sprawdź lub wykonaj akcję |
|---|---|
grpcurl list kończy się niepowodzeniem, ale wywołanie z -proto kończy się powodzeniem. |
Sprawdź, czy trasa zgadza się z RPC aplikacji, ale nie z RPC refleksji. Kontynuuj używanie lokalnego proto lub deskryptoru dla trasy specyficznej dla metody. |
| Odnajdywanie refleksji kończy się niepowodzeniem. | Sprawdź, czy źródło implementuje refleksję i czy trasa odpowiada ścieżce RPC. W przeciwnym razie dostarcz lokalny proto-szablon lub deskryptor. |
| Żądana metoda nie odpowiada ścieżce. | Porównaj pakiet, usługę i metodę we wdrożonym proto z pełną ścieżką trasy. Uwzględnij początkowy znak / we wzorze trasy, ale nie w argumencie RPC przekazywanym do grpcurl. |
| Występuje błąd nazwy hosta lub certyfikatu TLS. | Sprawdź, czy nazwa hosta podana w grpcurl odpowiada domenie i certyfikatowi usługi Front Door. Używaj TLS, nie -plaintext. |
Zagadnienia dotyczące usługi Web Application Firewall
Azure Front Door WAF może oceniać metadane obsługiwanych żądań HTTP/2, takie jak identyfikator URI, nagłówki, adres IP klienta oraz lokalizacja geograficzna. Obsługiwane scenariusze ograniczania szybkości oparte na metadanych mogą również mieć zastosowanie.
Front Door nie dekoduje wiadomości protobuf. Reguły WAF zależne od inspekcji ciała wiadomości gRPC nie zapewniają inspekcji ładunku protobuf. Weryfikuj wiadomości w aplikacji gRPC lub innym komponentie, który rozumie schemat protobuf. Nie traktuj sprawdzania metadanych jako ochrony na poziomie wiadomości.
Aby uzyskać więcej informacji, zobacz Web Application Firewall w witrynie Azure Front Door.
Monitorowanie ruchu gRPC
Konfiguruj logi diagnostyczne i koreluj logi dostępu Front Door z logami aplikacji gRPC po stronie źródła. Sprawdź zarówno status HTTP, jak i status gRPC zwrócony w nagłówkach końcowych. Odpowiedź HTTP 200 może nadal zawierać status aplikacji gRPC nie-OK.
Jeśli wysyłasz logi dostępu do tabeli AzureDiagnostics w przestrzeni roboczej Log Analytics, użyj następującego zapytania, aby sprawdzić metadane HTTP dla przykładowej usługi:
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
Zamień /greet.Greeter/ na ścieżkę swojej usługi. Zapytanie pokazuje URI żądań, wersje HTTP i kody statusu HTTP, a nie status gRPC w zwiastunach odpowiedzi. Używaj logów gRPC po stronie źródła do analizowania stanu aplikacji i korelowania awarii z logami dostępu usługi Front Door.