Udostępnij za pośrednictwem


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

Dowiedz się więcej na temat wskazówek dotyczących rozwiązywania problemów dotyczących połączeń wychodzących w usłudze Azure Load Balancer. Obejmuje to zrozumienie tłumaczenia adresów sieciowych źródła (SNAT) i jego wpływu na połączenia, używanie poszczególnych 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ą, która występuje u klientów, wynika z 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 Source Network Address Translation for outbound connections (Translacja adresów sieciowych źródła 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ć usługi 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 w celu zmniejszenia ryzyka wyczerpania sieci SNAT. 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 lub złagodzić problemy z łącznością wychodzącą.

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

Usługa 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 korzystania z portów SNAT bramy translatora adresów sieciowych pomaga rozwiązać typowe problemy z wyczerpaniem i połączeniem SNAT. 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?

    Usługa 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 dla każdego wystąpienia w podsieci. Ta dynamiczna alokacja umożliwia wystąpieniom maszyn wirtualnych używanie liczby portów SNAT potrzebnych z dostępnej puli portów dla nowych połączeń. Alokacja dynamiczna zmniejsza ryzyko wyczerpania SNAT.

    Diagram usługi Azure Load Balancer a azure NAT Gateway.

  • 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 portu i ponowne użycie bramy translatora adresów sieciowych sprawia, że jest mniej prawdopodobne, że występują przekroczenia limitu czasu połączenia.

    Aby dowiedzieć się więcej o sposobie działania protokołu SNAT i użycia 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 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 występują błędy SNAT lub błędy połączeń, upewnij się, że używasz reguł ruchu wychodzącego z ręczną alokacją portów. W przeciwnym razie prawdopodobnie korzystasz z domyślnej alokacji portów modułu równoważenia obciążenia. Domyślna alokacja portów automatycznie przypisuje konserwatywną liczbę portów, która jest oparta na liczbie wystąpień w puli zaplecza. Domyślna alokacja portów nie jest zalecaną metodą włączania połączeń wychodzących. W przypadku skalowania puli zaplecza połączenia mogą mieć wpływ na porty, które należy przydzielić.

Aby dowiedzieć się więcej na temat domyślnej alokacji portów, zobacz Source Network Address Translation for outbound connections (Translacja adresów sieciowych źródła 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ą, a nie domyślnie 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 większej liczby 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 do łą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 innymi dostępnymi usługami platformy Azure, możesz użyć usługi Azure Private Link, aby całkowicie uniknąć SNAT. Usługa Azure Private Link wysyła ruch z sieci wirtualnej do usług platformy Azure za pośrednictwem sieci szkieletowej platformy Azure zamiast przez Internet.

Usługa Private Link jest zalecaną opcją dla 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 usługą 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 korzystają z połączeń wydajnie. 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 w celu 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 domyślne. 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 w stałym zestawie 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 równoczesnych operacji, gdy jedno połączenie blokuje odpowiedź operacji.

Buforowanie połączeń może już istnieć w ramach struktury używanej do tworzenia aplikacji lub ustawień konfiguracji aplikacji. Możesz 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 próby siłowe bez rozpadu i wycofywania logiki powodują wyczerpanie lub trwałość. 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ą 4-minutowy limit czasu bezczynności, który jest regulowany do 100 minut. Aby odświeżyć przepływ bezczynności i zresetować ten limit czasu bezczynności w razie potrzeby, możesz użyć elementów keepalives protokołu TCP. W przypadku korzystania z elementów utrzymania 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 zachowanie tcp. Istnieją podobne pojęcia dotyczące warstwy aplikacji, w tym konfiguracje klient-serwer bazy danych. Sprawdź stronę serwera, aby dowiedzieć się, jakie opcje istnieją dla zachowań 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: