Rozwiązywanie Azure Load Balancer problemów z łącznością wychodzącą

Zapoznaj się ze wskazówkami dotyczącymi rozwiązywania problemów z połączeniami wychodzącym w Azure Load Balancer. Obejmuje to zrozumienie translacji adresów sieciowych (SNAT) źródłowego i ma to wpływ na połączenia, używanie pojedynczych publicznych adresów IP na maszynach wirtualnych oraz projektowanie aplikacji pod kątem wydajności połączeń w celu uniknięcia wyczerpania portów SNAT. Większość problemów z łącznością wychodzącą, z powodu wyczerpania portów SNAT i przekroczenia limitu czasu połączenia, co prowadzi do porzuconych pakietów.

Aby dowiedzieć się więcej na temat portów SNAT, zobacz Translacja adresów sieciowych źródłowych dla połączeń wychodzących.

Omówienie użycia portów SNAT

Postępuj zgodnie z diagnostyką modułu równoważenia obciążenia w warstwie Standardowa z metrykami, alertami i kondycją zasobów, aby monitorować użycie i alokację portów SNAT istniejącego modułu równoważenia obciążenia. Monitoruj, aby potwierdzić lub określić ryzyko wyczerpania SNAT. Jeśli masz problemy ze zrozumieniem zachowania połączenia wychodzącego, użyj statystyk stosu adresów IP (netstat) lub zbierz przechwytywanie pakietów. Te przechwytywanie pakietów można wykonać w systemie operacyjnym gościa wystąpienia lub użyć Network Watcher do przechwytywania pakietów. W przypadku większości scenariuszy platforma Azure zaleca użycie bramy translatora adresów sieciowych na potrzeby łączności wychodzącej, aby zmniejszyć ryzyko wyczerpania translatora adresów sieciowych. Brama translatora adresów sieciowych jest zdecydowanie zalecana, jeśli usługa inicjuje powtarzające się połączenia wychodzące TCP lub UDP z tym samym miejscem docelowym.

Optymalizowanie wdrożeń platformy Azure pod kątem łączności wychodzącej

Ważne jest, aby zoptymalizować wdrożenia platformy Azure pod kątem łączności wychodzącej. Optymalizacja może zapobiec problemom z łącznością wychodzącą lub je złagodzić.

Wdrażanie bramy translatora adresów sieciowych na potrzeby wychodzącej łączności z Internetem

Azure NAT Gateway to wysoce odporna i skalowalna usługa platformy Azure, która zapewnia łączność wychodzącą z Internetu z sieci wirtualnej. Unikatowa metoda używania portów SNAT przez bramę translatora adresów sieciowych translatora adresów sieciowych ułatwia rozwiązywanie typowych problemów z wyczerpaniem i połączeniem translatora adresów sieciowych. Aby uzyskać więcej informacji na temat usługi Azure NAT Gateway, zobacz Co to jest usługa Azure NAT Gateway?.

  • Jak brama translatora adresów sieciowych zmniejsza ryzyko wyczerpania portów SNAT?

    Azure Load Balancer przydziela stałe ilości portów SNAT do każdego wystąpienia maszyny wirtualnej w puli zaplecza. Ta metoda alokacji może prowadzić do wyczerpania SNAT, zwłaszcza jeśli nierówne wzorce ruchu powodują wysłanie większej liczby połączeń wychodzących przez określoną maszynę wirtualną. W przeciwieństwie do modułu równoważenia obciążenia brama translatora adresów sieciowych dynamicznie przydziela porty SNAT we wszystkich wystąpieniach maszyn wirtualnych w podsieci.

    Brama translatora adresów sieciowych udostępnia porty SNAT wszystkim wystąpieniom w podsieci. Ta dynamiczna alokacja umożliwia wystąpieniom maszyn wirtualnych korzystanie z liczby portów SNAT potrzebnych z dostępnej puli portów dla nowych połączeń. Alokacja dynamiczna zmniejsza ryzyko wyczerpania SNAT.

    Diagram Azure Load Balancer a brama translatora adresów sieciowych platformy Azure.

  • Wybór portów i ponowne użycie zachowania.

    Brama translatora adresów sieciowych wybiera porty losowo z dostępnej puli portów. Jeśli nie ma dostępnych portów, porty SNAT są ponownie używane, o ile nie ma istniejącego połączenia z tym samym docelowym publicznym adresem IP i portem. Ten wybór portów i ponowne użycie bramy translatora adresów sieciowych sprawia, że występuje mniejsze prawdopodobieństwo przekroczenia limitu czasu połączenia.

    Aby dowiedzieć się więcej na temat sposobu działania translatora adresów sieciowych i portów dla bramy translatora adresów sieciowych, zobacz Podstawowe informacje dotyczące translatora adresów sieciowych. Istnieje kilka warunków, w których nie będzie można używać bramy translatora adresów sieciowych dla połączeń wychodzących. Aby uzyskać więcej informacji na temat ograniczeń bramy translatora adresów sieciowych, zobacz Ograniczenia bramy translatora adresów sieciowych.

    Jeśli nie możesz użyć bramy translatora adresów sieciowych na potrzeby łączności wychodzącej, zapoznaj się z innymi opcjami migracji opisanymi w tym artykule.

Konfigurowanie reguł ruchu wychodzącego modułu równoważenia obciążenia w celu zmaksymalizowania portów SNAT na maszynę wirtualną

Jeśli używasz publicznego modułu równoważenia obciążenia w warstwie Standardowa i doświadczasz wyczerpania portów SNAT lub awarii połączenia, upewnij się, że używasz reguł ruchu wychodzącego z ręczną alokacją portów. W przeciwnym razie prawdopodobnie korzystasz z domyślnego dostępu wychodzącego modułu równoważenia obciążenia. Domyślny dostęp wychodzący automatycznie przydziela konserwatywną liczbę portów, która jest oparta na liczbie wystąpień w puli zaplecza. Domyślny dostęp wychodzący nie jest zalecaną metodą włączania połączeń wychodzących. W przypadku skalowania puli zaplecza może mieć to wpływ na połączenia, jeśli konieczne będzie ponowne przydziały portów.

Aby dowiedzieć się więcej o domyślnym dostępie wychodzącym i domyślnej alokacji portów, zobacz Source Network Address Translation for outbound connections (Translacja adresów sieciowych źródłowych dla połączeń wychodzących).

Aby zwiększyć liczbę dostępnych portów SNAT na maszynę wirtualną, skonfiguruj reguły ruchu wychodzącego z ręczną alokacją portów w module równoważenia obciążenia. Jeśli na przykład wiesz, że masz maksymalnie 10 maszyn wirtualnych w puli zaplecza, możesz przydzielić maksymalnie 6400 portów SNAT na maszynę wirtualną zamiast domyślnego 1024. Jeśli potrzebujesz więcej portów SNAT, możesz dodać wiele adresów IP frontonu dla połączeń wychodzących, aby pomnożyć liczbę dostępnych portów SNAT. Przed dodaniem kolejnych adresów IP frontonu upewnij się, dlaczego wyczerpano porty SNAT.

Aby uzyskać szczegółowe wskazówki, zobacz Projektowanie aplikacji pod kątem efektywnego korzystania z połączeń w dalszej części tego artykułu. Aby dodać więcej adresów IP dla połączeń wychodzących, utwórz konfigurację adresu IP frontonu dla każdego nowego adresu IP. Po skonfigurowaniu reguł ruchu wychodzącego można wybrać wiele konfiguracji adresów IP frontonu dla puli zaplecza. Zaleca się używanie różnych adresów IP na potrzeby łączności przychodzącej i wychodzącej. Różne adresy IP izolować ruch w celu lepszego monitorowania i rozwiązywania problemów.

Konfigurowanie pojedynczego publicznego adresu IP na maszynie wirtualnej

W przypadku wdrożeń o mniejszej skali można rozważyć przypisanie publicznego adresu IP do maszyny wirtualnej. Jeśli publiczny adres IP jest przypisany do maszyny wirtualnej, wszystkie porty udostępniane przez publiczny adres IP są dostępne dla maszyny wirtualnej. W przeciwieństwie do modułu równoważenia obciążenia lub bramy translatora adresów sieciowych porty są dostępne tylko dla pojedynczej maszyny wirtualnej skojarzonej z adresem IP.

Zdecydowanie zalecamy rozważenie użycia bramy translatora adresów sieciowych, ponieważ przypisywanie poszczególnych publicznych adresów IP nie jest skalowalnym rozwiązaniem.

Uwaga

Jeśli musisz połączyć sieć wirtualną platformy Azure z usługami PaaS platformy Azure, takimi jak Azure Storage, Azure SQL, Azure Cosmos DB lub inne dostępne usługi platformy Azure, możesz użyć Azure Private Link, aby całkowicie uniknąć translatora SNAT. Azure Private Link wysyła ruch z sieci wirtualnej do usług platformy Azure za pośrednictwem sieci szkieletowej platformy Azure zamiast przez Internet.

Private Link jest zalecaną opcją za pośrednictwem punktów końcowych usługi w celu uzyskania prywatnego dostępu do usług hostowanych na platformie Azure. Aby uzyskać więcej informacji na temat różnicy między Private Link i punktami końcowymi usługi, zobacz Porównanie prywatnych punktów końcowych i punktów końcowych usługi.

Projektowanie aplikacji wydajnych pod względem połączenia

Podczas projektowania aplikacji upewnij się, że efektywnie korzystają z połączeń. Wydajność połączenia może zmniejszyć lub wyeliminować wyczerpanie portów SNAT we wdrożonych aplikacjach.

Modyfikowanie aplikacji w celu ponownego używania połączeń

Zamiast generować pojedyncze, niepodzielne połączenia TCP dla każdego żądania, zalecamy skonfigurowanie aplikacji do ponownego użycia połączeń. Ponowne użycie połączenia powoduje bardziej wydajne transakcje TCP i jest szczególnie istotne w przypadku protokołów, takich jak HTTP/1.1, gdzie ponowne użycie połączenia jest ustawieniem domyślnym. To ponowne użycie dotyczy innych protokołów, które używają protokołu HTTP jako transportu, takiego jak REST.

Modyfikowanie aplikacji w celu używania puli połączeń

Zastosuj schemat buforowania połączeń w aplikacji, w którym żądania są wewnętrznie dystrybuowane między stały zestaw połączeń i ponownie używane, gdy jest to możliwe. Ten schemat ogranicza liczbę używanych portów SNAT i tworzy bardziej przewidywalne środowisko.

Ten schemat może zwiększyć przepływność żądań, zezwalając na wiele jednoczesnych operacji, gdy jedno połączenie blokuje odpowiedź operacji.

Buforowanie połączeń może już istnieć w ramach używanej platformy do tworzenia aplikacji lub ustawień konfiguracji aplikacji. Można połączyć buforowanie połączeń z ponownym użyciem połączenia. Następnie wiele żądań używa stałej, przewidywalnej liczby portów do tego samego docelowego adresu IP i portu.

Żądania korzystają z wydajnego korzystania z transakcji TCP, zmniejszając opóźnienia i wykorzystanie zasobów. Transakcje UDP mogą również przynieść korzyści. Zarządzanie liczbą przepływów UDP może uniknąć warunków wyczerpania i zarządzać wykorzystaniem portów SNAT.

Modyfikowanie aplikacji w celu używania łagodniejszej logiki ponawiania prób

Gdy porty SNAT są wyczerpane lub występują błędy aplikacji, agresywne lub brutalne ponawianie prób bez rozpadu i wycofywania logiki powodują wyczerpanie lub utrwalone. Możesz zmniejszyć zapotrzebowanie na porty SNAT przy użyciu mniej agresywnej logiki ponawiania prób.

W zależności od skonfigurowanego limitu czasu bezczynności, jeśli ponowne próby są zbyt agresywne, połączenia mogą nie mieć wystarczająco dużo czasu, aby zamknąć i zwolnić porty SNAT do ponownego użycia.

Używanie elementów utrzymywania aktywności w celu resetowania limitu czasu bezczynności połączeń wychodzących

Reguły ruchu wychodzącego modułu równoważenia obciążenia domyślnie mają domyślnie 4-minutowy limit czasu bezczynności, który można dostosować do 100 minut. Aby odświeżyć bezczynny przepływ i zresetować ten limit czasu bezczynności w razie potrzeby, możesz użyć utrzymywania protokołu TCP. W przypadku korzystania z elementów utrzymania protokołu TCP wystarczy włączyć je po jednej stronie połączenia.

Na przykład wystarczy włączyć je po stronie serwera tylko w celu zresetowania czasomierza bezczynności przepływu i nie jest konieczne, aby obie strony zainicjowały elementy utrzymania tcp. Istnieją podobne pojęcia dotyczące warstwy aplikacji, w tym konfiguracji klient-serwer bazy danych. Sprawdź stronę serwera, aby dowiedzieć się, jakie opcje istnieją dla elementów utrzymania specyficznych dla aplikacji.

Następne kroki

Aby uzyskać więcej informacji na temat wyczerpania portów SNAT, opcji łączności wychodzącej i domyślnego dostępu wychodzącego, zobacz: