Używanie publicznego standardowego modułu równoważenia obciążenia w usłudze Azure Kubernetes Service (AKS)
Usługa Azure Load Balancer działa w warstwie 4 modelu Open SystemsConnect (OSI), który obsługuje zarówno scenariusze ruchu przychodzącego, jak i wychodzącego. Dystrybuuje przepływy przychodzące, które docierają do frontonu modułu równoważenia obciążenia do wystąpień puli zaplecza.
Publiczny moduł równoważenia obciążenia zintegrowany z usługą AKS służy do dwóch celów:
- Aby zapewnić połączenia wychodzące z węzłami klastra wewnątrz sieci wirtualnej usługi AKS, tłumacząc prywatny adres IP na część publicznego adresu IP w puli wychodzącej.
- Aby zapewnić dostęp do aplikacji za pośrednictwem usług typu
LoadBalancer
Kubernetes, umożliwia łatwe skalowanie aplikacji i tworzenie usług o wysokiej dostępności.
Wewnętrzny (lub prywatny) moduł równoważenia obciążenia jest używany, gdy tylko prywatne adresy IP są dozwolone jako fronton. Wewnętrzne moduły równoważenia obciążenia służą do równoważenia obciążenia ruchu wewnątrz sieci wirtualnej. Dostęp do frontonu modułu równoważenia obciążenia można również uzyskać z sieci lokalnej w scenariuszu hybrydowym.
W tym artykule opisano integrację z publicznym modułem równoważenia obciążenia w usłudze AKS. Aby uzyskać informacje na temat integracji wewnętrznego modułu równoważenia obciążenia, zobacz Używanie wewnętrznego modułu równoważenia obciążenia w usłudze AKS.
Zanim rozpoczniesz
- Usługa Azure Load Balancer jest dostępna w dwóch jednostkach SKU: Podstawowa i Standardowa. Jednostka SKU w warstwie Standardowa jest używana domyślnie podczas tworzenia klastra usługi AKS. Jednostka SKU w warstwie Standardowa zapewnia dostęp do dodanych funkcji, takich jak większa pula zaplecza, wiele pul węzłów, Strefy dostępności i jest domyślnie bezpieczna. Jest to zalecana jednostka SKU modułu równoważenia obciążenia dla usługi AKS. Aby uzyskać więcej informacji na temat jednostek SKU w warstwie Podstawowa i Standardowa, zobacz Porównanie jednostek SKU usługi Azure Load Balancer.
- Aby uzyskać pełną listę obsługiwanych adnotacji dla usług Kubernetes z typem
LoadBalancer
, zobacz Adnotacje modułu LoadBalancer. - W tym artykule założono, że masz klaster usługi AKS z usługą Azure Load Balancer w warstwie Standardowa . Jeśli potrzebujesz klastra usługi AKS, możesz go utworzyć przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal.
- Usługa AKS zarządza cyklem życia i operacjami węzłów agenta. Modyfikowanie zasobów IaaS skojarzonych z węzłami agenta nie jest obsługiwane. Przykładem nieobsługiwanej operacji jest ręczne wprowadzanie zmian w grupie zasobów modułu równoważenia obciążenia.
Ważne
Jeśli wolisz używać własnej bramy, zapory lub serwera proxy w celu zapewnienia połączenia wychodzącego, możesz pominąć tworzenie puli wychodzącej modułu równoważenia obciążenia i odpowiedniego adresu IP frontonu przy użyciu typu wychodzącego jako UserDefinedRouting (UDR). Typ ruchu wychodzącego definiuje metodę ruchu wychodzącego dla klastra i domyślnie określa typ LoadBalancer
.
Korzystanie z publicznego modułu równoważenia obciążenia w warstwie Standardowa
Po utworzeniu klastra usługi AKS z typem LoadBalancer
ruchu wychodzącego (ustawienie domyślne) klaster jest gotowy do udostępnienia usług za pomocą modułu równoważenia obciążenia.
Utwórz manifest usługi o nazwie public-svc.yaml
, który tworzy usługę publiczną typu LoadBalancer
.
apiVersion: v1
kind: Service
metadata:
name: public-svc
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: public-app
Określanie adresu IP modułu równoważenia obciążenia
Jeśli chcesz użyć określonego adresu IP z modułem równoważenia obciążenia, istnieją dwa sposoby:
Ważne
Dodanie właściwości LoadBalancerIP do manifestu YAML modułu równoważenia obciążenia jest przestarzałe po nadrzędnym rozwiązaniu Kubernetes. Chociaż bieżące użycie pozostaje takie same, a istniejące usługi powinny działać bez modyfikacji, zdecydowanie zalecamy ustawienie adnotacji usługi.
- Ustawianie adnotacji usługi: użyj dla
service.beta.kubernetes.io/azure-load-balancer-ipv4
adresu IPv4 iservice.beta.kubernetes.io/azure-load-balancer-ipv6
adresu IPv6. - Dodaj właściwość LoadBalancerIP do manifestu YAML modułu równoważenia obciążenia: dodaj właściwość Service.Spec.LoadBalancerIP do manifestu YAML modułu równoważenia obciążenia. To pole jest przestarzałe po nadrzędnym rozwiązaniu Kubernetes i nie może obsługiwać podwójnego stosu. Bieżące użycie pozostaje takie same, a istniejące usługi powinny działać bez modyfikacji.
Wdrażanie manifestu usługi
Wdróż manifest usługi publicznej przy użyciu polecenia kubectl apply
i określ nazwę manifestu YAML.
kubectl apply -f public-svc.yaml
Usługa Azure Load Balancer jest skonfigurowana przy użyciu nowego publicznego adresu IP, który jest frontonem nowej usługi. Ponieważ usługa Azure Load Balancer może mieć wiele adresów IP frontonu, każda nowa wdrażana usługa uzyskuje unikatowy dostęp do nowego dedykowanego adresu IP frontonu.
Upewnij się, że usługa została utworzona, a moduł równoważenia obciążenia został skonfigurowany przy użyciu następującego polecenia.
kubectl get service public-svc
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default public-svc LoadBalancer 10.0.39.110 203.0.113.187 80:32068/TCP 52s
Podczas wyświetlania szczegółów usługi publiczny adres IP utworzony dla tej usługi w module równoważenia obciążenia jest wyświetlany w kolumnie EXTERNAL-IP . Zmiana adresu IP z <oczekiwania> na rzeczywisty publiczny adres IP może potrwać kilka minut.
Aby uzyskać bardziej szczegółowe informacje o usłudze, użyj następującego polecenia.
kubectl describe service public-svc
Poniższe przykładowe dane wyjściowe to skrócona wersja danych wyjściowych po uruchomieniu polecenia kubectl describe service
. Ruch przychodzący modułu LoadBalancer pokazuje zewnętrzny adres IP uwidoczniony przez usługę. Adres IP pokazuje adresy wewnętrzne.
Name: public-svc
Namespace: default
Labels: <none>
Annotations: <none>
Selector: app=public-app
...
IP: 10.0.39.110
...
LoadBalancer Ingress: 203.0.113.187
...
TargetPort: 80/TCP
NodePort: 32068/TCP
...
Session Affinity: None
External Traffic Policy: Cluster
...
Konfigurowanie publicznego modułu równoważenia obciążenia w warstwie Standardowa
Możesz dostosować różne ustawienia dla standardowego publicznego modułu równoważenia obciążenia w czasie tworzenia klastra lub przez zaktualizowanie klastra. Te opcje dostosowywania umożliwiają utworzenie modułu równoważenia obciążenia spełniającego potrzeby związane z obciążeniem. Za pomocą modułu równoważenia obciążenia w warstwie Standardowa można wykonywać następujące czynności:
- Ustaw lub skaluj liczbę zarządzanych wychodzących adresów IP.
- Używanie własnych niestandardowych adresów IP ruchu wychodzącego lub prefiksu wychodzącego adresu IP.
- Dostosuj liczbę przydzielonych portów wychodzących do każdego węzła w klastrze.
- Skonfiguruj ustawienie limitu czasu dla bezczynnych połączeń.
Ważne
W danym momencie można użyć tylko jednej opcji adresów IP dla ruchu wychodzącego (zarządzane adresy IP, bring your own IP lub prefiksu IP).
Zmienianie typu puli przychodzącej
Do węzłów usługi AKS można odwoływać się w pulach zaplecza modułu równoważenia obciążenia przez konfigurację adresu IP (członkostwo oparte na usłudze Azure Virtual Machine Scale Sets) lub tylko za pomocą ich adresu IP. Użycie członkostwa w puli zaplecza opartego na adresach IP zapewnia większą wydajność podczas aktualizowania usług i aprowizacji modułów równoważenia obciążenia, szczególnie w przypadku dużej liczby węzłów. Aprowizowanie nowych klastrów przy użyciu pul zaplecza opartych na adresach IP i konwertowanie istniejących klastrów jest teraz obsługiwane. W połączeniu z bramą translatora adresów sieciowych lub typami ruchu wychodzącego zdefiniowanego przez użytkownika aprowizowanie nowych węzłów i usług jest bardziej wydajne.
Dostępne są dwa różne typy członkostwa w puli:
nodeIPConfiguration
— starszy typ członkostwa puli opartej na adresach IP zestawów skalowania maszyn wirtualnychnodeIP
- Typ członkostwa opartego na adresach IP
Wymagania
- Klaster usługi AKS musi być w wersji 1.23 lub nowszej.
- Klaster usługi AKS musi używać standardowych modułów równoważenia obciążenia i zestawów skalowania maszyn wirtualnych.
Tworzenie nowego klastra usługi AKS z członkostwem w puli przychodzącej opartej na adresach IP
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-backend-pool-type=nodeIP \
--generate-ssh-keys
Aktualizowanie istniejącego klastra usługi AKS w celu korzystania z członkostwa w puli przychodzącej opartej na adresach IP
Ostrzeżenie
Ta operacja powoduje tymczasowe zakłócenia ruchu przychodzącego usługi w klastrze. Czas wpływu zwiększa się wraz z większymi klastrami, które mają wiele węzłów.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-backend-pool-type=nodeIP
Skalowanie liczby zarządzanych publicznych adresów IP wychodzących
Usługa Azure Load Balancer zapewnia łączność wychodzącą i przychodzącą z sieci wirtualnej. Reguły ruchu wychodzącego ułatwiają konfigurowanie tłumaczenia adresów sieciowych dla publicznego standardowego modułu równoważenia obciążenia.
Reguły ruchu wychodzącego są zgodne z tą samą składnią co równoważenie obciążenia i reguły NAT dla ruchu przychodzącego:
Adresy IP frontonu i parametry i pula zaplecza
Reguła ruchu wychodzącego konfiguruje translator adresów sieciowych dla wszystkich maszyn wirtualnych zidentyfikowanych przez pulę zaplecza do tłumaczenia na fronton. Parametry zapewniają większą kontrolę nad algorytmem NAT ruchu wychodzącego.
Chociaż można użyć reguły ruchu wychodzącego z pojedynczym publicznym adresem IP, reguły ruchu wychodzącego doskonale nadają się do skalowania translatora adresów sieciowych wychodzących, ponieważ ułatwiają one obciążenie konfiguracją. Można użyć wielu adresów IP, aby zaplanować scenariusze na dużą skalę i reguły ruchu wychodzącego w celu ograniczenia podatnych na wyczerpanie SNAT wzorców. Każdy adres IP dostarczony przez fronton zapewnia 64k portów efemerycznych dla modułu równoważenia obciążenia do użycia jako portów SNAT.
W przypadku korzystania z modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa z zarządzanymi publicznymi adresami IP wychodzącymi (które są tworzone domyślnie), można skalować liczbę zarządzanych publicznych adresów IP wychodzących przy użyciu parametru --load-balancer-managed-outbound-ip-count
.
Użyj następującego polecenia, aby zaktualizować istniejący klaster. Można również ustawić ten parametr tak, aby mieć wiele zarządzanych publicznych adresów IP ruchu wychodzącego.
Ważne
Nie zalecamy używania witryny Azure Portal do wprowadzania żadnych zmian reguł ruchu wychodzącego. Podczas wprowadzania tych zmian należy przejść przez klaster usługi AKS, a nie bezpośrednio w zasobie usługi Load Balancer.
Zmiany reguły ruchu wychodzącego wprowadzone bezpośrednio w zasobie usługi Load Balancer są usuwane za każdym razem, gdy klaster zostanie uzgodniony, na przykład po zatrzymaniu, uruchomieniu, uaktualnieniu lub skalowaniu.
Użyj interfejsu wiersza polecenia platformy Azure, jak pokazano w przykładach. Zmiany reguły ruchu wychodzącego wprowadzone przy użyciu az aks
poleceń interfejsu wiersza polecenia są trwałe w ramach przestoju klastra.
Aby uzyskać więcej informacji, zobacz Reguły ruchu wychodzącego usługi Azure Load Balancer.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-managed-outbound-ip-count 2
W powyższym przykładzie ustawiono liczbę zarządzanych publicznych adresów IP ruchu wychodzącego na 2 dla klastra myAKSCluster w grupie myResourceGroup.
W czasie tworzenia klastra można również ustawić początkową liczbę zarządzanych publicznych adresów IP wychodzących, dołączając parametr i ustawiając --load-balancer-managed-outbound-ip-count
go na żądaną wartość. Domyślna liczba zarządzanych publicznych adresów IP dla ruchu wychodzącego to 1.
Podaj własne publiczne adresy IP lub prefiksy dla ruchu wychodzącego
W przypadku korzystania z modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa klaster usługi AKS automatycznie tworzy publiczny adres IP w grupie zasobów infrastruktury zarządzanej przez usługę AKS i domyślnie przypisuje go do puli wychodzącej modułu równoważenia obciążenia.
Publiczny adres IP utworzony przez usługę AKS jest zasobem zarządzanym przez usługę AKS, co oznacza, że usługa AKS zarządza cyklem życia tego publicznego adresu IP i nie wymaga akcji użytkownika bezpośrednio w zasobie publicznego adresu IP. Alternatywnie możesz przypisać własny niestandardowy publiczny adres IP lub prefiks publicznego adresu IP w czasie tworzenia klastra. Niestandardowe adresy IP można również zaktualizować we właściwościach modułu równoważenia obciążenia istniejącego klastra.
Wymagania dotyczące używania własnego publicznego adresu IP lub prefiksu obejmują:
- Użytkownicy muszą tworzyć i posiadać niestandardowe publiczne adresy IP. Zarządzane publiczne adresy IP utworzone przez usługę AKS nie mogą być ponownie używane jako "przynieś własny niestandardowy adres IP", ponieważ mogą powodować konflikty zarządzania.
- Upewnij się, że tożsamość klastra usługi AKS (jednostka usługi lub tożsamość zarządzana) ma uprawnienia dostępu do wychodzącego adresu IP zgodnie z wymaganą listą uprawnień publicznego adresu IP.
- Upewnij się, że spełnisz wymagania wstępne i ograniczenia niezbędne do skonfigurowania wychodzących adresów IP lub prefiksów adresów IP dla ruchu wychodzącego.
Aktualizowanie klastra przy użyciu własnego publicznego adresu IP ruchu wychodzącego
Użyj polecenia , az network public-ip show
aby wyświetlić listę identyfikatorów publicznych adresów IP.
az network public-ip show --resource-group myResourceGroup --name myPublicIP --query id -o tsv
Powyższe polecenie pokazuje identyfikator publicznego adresu IP myPublicIP w grupie zasobów myResourceGroup .
az aks update
Użyj polecenia z parametrem load-balancer-outbound-ips
, aby zaktualizować klaster za pomocą publicznych adresów IP.
W poniższym przykładzie użyto parametru load-balancer-outbound-ips
z identyfikatorami z poprzedniego polecenia.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-outbound-ips <publicIpId1>,<publicIpId2>
Aktualizowanie klastra przy użyciu własnego prefiksu publicznego adresu IP dla ruchu wychodzącego
Możesz również użyć publicznych prefiksów adresów IP dla ruchu wychodzącego z modułem równoważenia obciążenia jednostki SKU w warstwie Standardowa . W poniższym przykładzie użyto polecenia az network public-ip prefix show , aby wyświetlić listę identyfikatorów prefiksów publicznych adresów IP.
az network public-ip prefix show --resource-group myResourceGroup --name myPublicIPPrefix --query id -o tsv
Powyższe polecenie pokazuje identyfikator publicznego prefiksu IP myPublicIPPrefix w grupie zasobów myResourceGroup .
W poniższym przykładzie użyto parametru load-balancer-outbound-ip-prefixes z identyfikatorami z poprzedniego polecenia.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-outbound-ip-prefixes <publicIpPrefixId1>,<publicIpPrefixId2>
Tworzenie klastra przy użyciu własnego publicznego adresu IP lub prefiksów
Podczas tworzenia klastra możesz wprowadzić własne adresy IP lub prefiksy adresów IP dla ruchu wychodzącego w celu obsługi scenariuszy, takich jak dodawanie punktów końcowych ruchu wychodzącego do listy dozwolonych. Aby zdefiniować własne publiczne adresy IP i prefiksy IP w czasie tworzenia klastra, dołącz te same parametry pokazane w poprzednim poleceniu.
az aks create
Użyj polecenia z parametrem , load-balancer-outbound-ips
aby utworzyć nowy klaster z własnymi publicznymi adresami IP.
az aks create \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-outbound-ips <publicIpId1>,<publicIpId2> \
--generate-ssh-keys
az aks create
Użyj polecenia z parametrem , load-balancer-outbound-ip-prefixes
aby utworzyć nowy klaster z własnymi prefiksami publicznych adresów IP.
az aks create \
--resource-group myResourceGroup \
--load-balancer-outbound-ip-prefixes <publicIpPrefixId1>,<publicIpPrefixId2> \
--generate-ssh-keys
Konfigurowanie przydzielonych portów wychodzących
Ważne
Jeśli masz aplikacje w klastrze, które mogą ustanowić dużą liczbę połączeń z małym zestawem miejsc docelowych na publicznych adresach IP, takich jak wiele wystąpień aplikacji frontonu łączącej się z bazą danych, może wystąpić scenariusz podatny na wyczerpanie portów SNAT. Wyczerpanie portów SNAT występuje, gdy aplikacja kończy się z portów wychodzących do użycia w celu nawiązania połączenia z inną aplikacją lub hostem. Jeśli istnieje scenariusz podatny na wyczerpanie portów SNAT, zdecydowanie zalecamy zwiększenie przydzielonych portów wychodzących i wychodzących adresów IP frontonu w module równoważenia obciążenia.
Aby uzyskać więcej informacji na temat protokołu SNAT, zobacz Use SNAT for outbound connections (Używanie protokołu SNAT dla połączeń wychodzących).
Domyślnie usługa AKS ustawia wartość AllocatedOutboundPorts dla modułu równoważenia obciążenia na 0
wartość , co umożliwia automatyczne przypisywanie portów wychodzących na podstawie rozmiaru puli zaplecza podczas tworzenia klastra. Jeśli na przykład klaster ma co najmniej 50 węzłów, do każdego węzła przydzielono 1024 porty. Ta wartość umożliwia skalowanie do maksymalnej liczby węzłów klastra bez konieczności ponownej konfiguracji sieci, ale może sprawić, że wyczerpanie portów SNAT będzie bardziej powszechne w miarę dodawania większej liczby węzłów. Wraz ze wzrostem liczby węzłów w klastrze liczba dostępnych portów na węzeł. Zwiększenie liczby węzłów przez granice na wykresie (na przykład przejście z 50 do 51 węzłów lub 100 do 101) może zakłócać łączność, ponieważ porty SNAT przydzielone do istniejących węzłów są ograniczone, aby umożliwić więcej węzłów. Zalecane jest użycie jawnej wartości dla elementu AllocatedOutboundPorts, jak pokazano poniżej.
Aby wyświetlić wartość AllocatedOutboundPorts dla modułu równoważenia obciążenia klastra usługi AKS, użyj polecenia az network lb outbound-rule list
.
NODE_RG=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
az network lb outbound-rule list --resource-group $NODE_RG --lb-name kubernetes -o table
Poniższe przykładowe dane wyjściowe pokazują, że automatyczne przypisanie portu wychodzącego na podstawie rozmiaru puli zaplecza jest włączone dla klastra.
AllocatedOutboundPorts EnableTcpReset IdleTimeoutInMinutes Name Protocol ProvisioningState ResourceGroup
------------------------ ---------------- ---------------------- --------------- ---------- ------------------- -------------
0 True 30 aksOutboundRule All Succeeded MC_myResourceGroup_myAKSCluster_eastus
Aby skonfigurować określoną wartość dla wartości AllocatedOutboundPorts i wychodzącego adresu IP podczas tworzenia lub aktualizowania klastra, użyj polecenia load-balancer-outbound-ports
i load-balancer-managed-outbound-ip-count
, load-balancer-outbound-ips
lub load-balancer-outbound-ip-prefixes
. Przed ustawieniem określonej wartości lub zwiększenie istniejącej wartości dla portów wychodzących lub wychodzących adresów IP należy obliczyć odpowiednią liczbę portów wychodzących i adresów IP. Użyj następującego równania dla tego obliczenia zaokrąglonego do najbliższej liczby całkowitej: 64,000 ports per IP / <outbound ports per node> * <number of outbound IPs> = <maximum number of nodes in the cluster>
.
Ważne
Dodanie większej liczby wychodzących adresów IP do klastra nie zapewni więcej dostępnych portów SNAT dla węzłów, chyba że ustawiono wartość inną niż zero dla parametru AllocatedOutboundPorts . Jeśli parametr AllocatedOutboundPorts pozostanie na wartości domyślnej 0
, porty SNAT dla węzłów będą nadal ustawiane dla tabeli w dokumentacji modułu równoważenia obciążenia, a dodatkowe porty z dodatkowych adresów IP nie będą używane.
Podczas obliczania liczby portów wychodzących i adresów IP oraz ustawiania wartości należy pamiętać o następujących informacjach:
- Liczba portów wychodzących na węzeł jest stała na podstawie ustawionej wartości.
- Wartość portów wychodzących musi być wielokrotną 8.
- Dodanie większej liczby adresów IP nie powoduje dodania większej liczby portów do żadnego węzła, ale zapewnia pojemność dla większej liczby węzłów w klastrze.
- Musisz uwzględnić węzły, które mogą zostać dodane w ramach uaktualnień, w tym liczbę węzłów określonych za pośrednictwem wartości maxCount i maxSurge .
W poniższych przykładach pokazano, jak ustawione wartości wpływają na liczbę portów wychodzących i adresów IP:
- Jeśli są używane wartości domyślne, a klaster ma 48 węzłów, każdy węzeł ma dostępne 1024 porty.
- Jeśli są używane wartości domyślne, a klaster skaluje się z 48 do 52 węzłów, każdy węzeł jest aktualizowany z 1024 portów dostępnych do 512 dostępnych portów.
- Jeśli liczba portów wychodzących jest ustawiona na 1000, a liczba wychodzących adresów IP jest ustawiona na 2, klaster może obsługiwać maksymalnie 128 węzłów:
64,000 ports per IP / 1,000 ports per node * 2 IPs = 128 nodes
. - Jeśli liczba portów wychodzących jest ustawiona na 1000, a liczba wychodzących adresów IP jest ustawiona na 7, klaster może obsługiwać maksymalnie 448 węzłów:
64,000 ports per IP / 1,000 ports per node * 7 IPs = 448 nodes
. - Jeśli liczba portów wychodzących jest ustawiona na 4000, a liczba wychodzących adresów IP jest ustawiona na 2, klaster może obsługiwać maksymalnie 32 węzły:
64,000 ports per IP / 4,000 ports per node * 2 IPs = 32 nodes
. - Jeśli liczba portów wychodzących jest ustawiona na 4000, a liczba wychodzących adresów IP jest ustawiona na 7, klaster może obsługiwać maksymalnie 112 węzłów:
64,000 ports per IP / 4,000 ports per node * 7 IPs = 112 nodes
.
Ważne
Po obliczeniu liczby portów wychodzących i adresów IP sprawdź, czy masz dodatkową pojemność portu wychodzącego, aby obsłużyć wzrost liczby węzłów podczas uaktualniania. Niezwykle ważne jest przydzielenie wystarczającej nadmiarowej liczby portów dla dodatkowych węzłów potrzebnych do uaktualnienia i innych operacji. Usługa AKS domyślnie używa jednego węzła buforu na potrzeby operacji uaktualniania. Jeśli używasz wartości maxSurge, pomnóż porty wychodzące na węzeł przez wartość maxSurge, aby określić wymaganą liczbę portów. Jeśli na przykład obliczysz, że potrzebujesz 4000 portów na węzeł z 7 adresami IP w klastrze z maksymalnie 100 węzłami i maksymalnym wzrostem wynoszącym 2:
- 2 węzły przepięcia * 4000 portów na węzeł = 8000 portów wymaganych do wzrostu węzła podczas uaktualniania.
- 100 węzłów * 4000 portów na węzeł = 400 000 portów wymaganych dla klastra.
- 7 adresów IP * 64000 portów na adres IP = 448 000 portów dostępnych dla klastra.
W powyższym przykładzie pokazano, że klaster ma nadmiarową pojemność 48 000 portów, co jest wystarczające do obsługi 8000 portów wymaganych do wzrostu węzła podczas uaktualniania.
Po obliczeniu i zweryfikowaniu wartości można zastosować te wartości przy użyciu wartości load-balancer-outbound-ports
i load-balancer-managed-outbound-ip-count
, load-balancer-outbound-ips
lub load-balancer-outbound-ip-prefixes
podczas tworzenia lub aktualizowania klastra.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-managed-outbound-ip-count 7 \
--load-balancer-outbound-ports 4000
Konfigurowanie limitu czasu bezczynności modułu równoważenia obciążenia
Po wyczerpaniu zasobów portów SNAT przepływy wychodzące kończą się niepowodzeniem, dopóki istniejące przepływy nie zwolnią portów SNAT. Moduł równoważenia obciążenia odzyskuje porty SNAT po zamknięciu przepływu, a skonfigurowany przez usługę AKS moduł równoważenia obciążenia używa 30-minutowego limitu czasu bezczynności na potrzeby odzyskiwania portów SNAT z przepływów bezczynnych.
Możesz również użyć transportu (na przykład TCP keepalives
lub application-layer keepalives
), aby odświeżyć przepływ bezczynności i zresetować ten limit czasu bezczynności, jeśli to konieczne. Ten limit czasu można skonfigurować zgodnie z poniższym przykładem.
az aks update \
--resource-group myResourceGroup \
--name myAKSCluster \
--load-balancer-idle-timeout 4
Jeśli oczekujesz, że masz wiele krótkotrwałych połączeń i nie masz długotrwałych połączeń, które mogą mieć długi czas bezczynności, na przykład przy użyciu kubectl proxy
lub kubectl port-forward
, rozważ użycie niskiej wartości limitu czasu, takiej jak 4 minuty. 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. Nie jest konieczne, aby obie strony uruchamiały keepalives PROTOKOŁU 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.
Ważne
Usługa AKS domyślnie włącza resetowanie protokołu TCP w stanie bezczynności. Zalecamy zachowanie tej konfiguracji i wykorzystanie jej w celu zapewnienia bardziej przewidywalnego zachowania aplikacji w scenariuszach.
Protokół TCP RST jest wysyłany tylko podczas połączenia TCP w stanie ESTABLISHED. Więcej informacji na ten temat znajduje się tutaj.
Podczas ustawiania wartości IdleTimeoutInMinutes na inną wartość niż domyślna 30 minut należy wziąć pod uwagę, jak długo obciążenia potrzebują połączenia wychodzącego. Należy również wziąć pod uwagę, że domyślna wartość limitu czasu dla modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa używana poza usługą AKS wynosi 4 minuty. Wartość IdleTimeoutInMinutes, która dokładniej odzwierciedla określone obciążenie usługi AKS, może pomóc zmniejszyć wyczerpanie SNAT spowodowane przez wiązanie połączeń, które nie są już używane.
Ostrzeżenie
Zmiana wartości dla wartości AllocatedOutboundPorts i IdleTimeoutInMinutes może znacząco zmienić zachowanie reguły ruchu wychodzącego dla modułu równoważenia obciążenia i nie powinno być wykonywane lekko. Zapoznaj się z sekcją Rozwiązywanie problemów z usługą SNAT i przejrzyj reguły ruchu wychodzącego i połączeń wychodzących usługi Load Balancer na platformie Azure przed zaktualizowaniem tych wartości, aby w pełni zrozumieć wpływ zmian.
Ograniczanie ruchu przychodzącego do określonych zakresów adresów IP
Poniższy manifest używa modułu loadBalancerSourceRanges, aby określić nowy zakres adresów IP dla przychodzącego ruchu zewnętrznego.
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
ports:
- port: 80
selector:
app: azure-vote-front
loadBalancerSourceRanges:
- MY_EXTERNAL_IP_RANGE
W tym przykładzie reguła aktualizuje regułę tak, aby zezwalała na przychodzący ruch zewnętrzny tylko z MY_EXTERNAL_IP_RANGE
zakresu. W przypadku zamiany MY_EXTERNAL_IP_RANGE
na wewnętrzny adres IP podsieci ruch jest ograniczony tylko do wewnętrznych adresów IP klastra. Jeśli ruch jest ograniczony do wewnętrznych adresów IP klastra, klienci spoza klastra Kubernetes nie mogą uzyskać dostępu do modułu równoważenia obciążenia.
Uwaga
- Przychodzący ruch zewnętrzny przepływa z modułu równoważenia obciążenia do sieci wirtualnej dla klastra usługi AKS. Sieć wirtualna ma sieciową grupę zabezpieczeń, która zezwala na cały ruch przychodzący z modułu równoważenia obciążenia. Ta sieciowa grupa zabezpieczeń używa tagu usługi typu LoadBalancer , aby zezwolić na ruch z modułu równoważenia obciążenia.
- Zasobnik CIDR należy dodać do elementu loadBalancerSourceRanges, jeśli istnieją zasobniki wymagające dostępu do adresu IP modułu LoadBalancer usługi dla klastrów w wersji 1.25 lub nowszej.
Obsługa adresu IP klienta w połączeniach przychodzących
Domyślnie usługa typu LoadBalancer
Kubernetes i w usłudze AKS nie utrwala adresu IP klienta w połączeniu z zasobnikiem. Źródłowy adres IP pakietu dostarczonego do zasobnika staje się prywatnym adresem IP węzła. Aby zachować adres IP klienta, musisz ustawić wartość service.spec.externalTrafficPolicy
w local
definicji usługi. Poniższy manifest przedstawia przykład.
apiVersion: v1
kind: Service
metadata:
name: azure-vote-front
spec:
type: LoadBalancer
externalTrafficPolicy: Local
ports:
- port: 80
selector:
app: azure-vote-front
Dostosowania za pomocą adnotacji kubernetes
Następujące adnotacje są obsługiwane w przypadku usług Kubernetes o typie LoadBalancer
i dotyczą tylko przepływów PRZYCHODZĄCYch .
Annotation | Wartość | Opis |
---|---|---|
service.beta.kubernetes.io/azure-load-balancer-internal |
true lub false |
Określ, czy moduł równoważenia obciążenia powinien być wewnętrzny. Jeśli nie zostanie ustawiona, zostanie ustawiona wartość domyślna na publiczną. |
service.beta.kubernetes.io/azure-load-balancer-internal-subnet |
Nazwa podsieci | Określ podsieć, z którą ma być powiązany wewnętrzny moduł równoważenia obciążenia. Jeśli nie zostanie ustawiona, zostanie ona domyślnie ustawiona na podsieć skonfigurowaną w pliku konfiguracji chmury. |
service.beta.kubernetes.io/azure-dns-label-name |
Nazwa etykiety DNS na publicznych adresach IP | Określ nazwę etykiety DNS dla usługi publicznej. Jeśli jest on ustawiony na pusty ciąg, wpis DNS w publicznym adresie IP nie jest używany. |
service.beta.kubernetes.io/azure-shared-securityrule |
true lub false |
Określ uwidacznianie usługi za pośrednictwem potencjalnie udostępnionej reguły zabezpieczeń platformy Azure w celu zwiększenia narażenia na usługę przy użyciu rozszerzonych reguł zabezpieczeń platformy Azure w sieciowych grupach zabezpieczeń. |
service.beta.kubernetes.io/azure-load-balancer-resource-group |
Nazwa grupy zasobów | Określ grupę zasobów publicznych adresów IP modułu równoważenia obciążenia, które nie są w tej samej grupie zasobów co infrastruktura klastra (grupa zasobów węzła). |
service.beta.kubernetes.io/azure-allowed-service-tags |
Lista dozwolonych tagów usługi | Określ listę dozwolonych tagów usługi rozdzielonych przecinkami . |
service.beta.kubernetes.io/azure-load-balancer-tcp-idle-timeout |
Limity czasu bezczynności protokołu TCP w minutach | Określ czas w minutach przekroczenia limitu czasu bezczynności połączenia TCP w module równoważenia obciążenia. Wartość domyślna i minimalna to 4. Maksymalna wartość to 30. Wartość musi być liczbą całkowitą. |
service.beta.kubernetes.io/azure-load-balancer-disable-tcp-reset |
true lub false |
Określ, czy moduł równoważenia obciążenia powinien wyłączyć resetowanie protokołu TCP w przypadku limitu czasu bezczynności. |
service.beta.kubernetes.io/azure-load-balancer-ipv4 |
Adres IPv4 | Określ adres IPv4, który ma zostać przypisany do modułu równoważenia obciążenia. |
service.beta.kubernetes.io/azure-load-balancer-ipv6 |
Adres IPv6 | Określ adres IPv6, który ma zostać przypisany do modułu równoważenia obciążenia. |
Dostosowywanie sondy kondycji modułu równoważenia obciążenia
Annotation | Wartość | Opis |
---|---|---|
service.beta.kubernetes.io/azure-load-balancer-health-probe-interval |
Interwał sondy kondycji | |
service.beta.kubernetes.io/azure-load-balancer-health-probe-num-of-probe |
Minimalna liczba odpowiedzi sondy kondycji w złej kondycji | |
service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path |
Ścieżka żądania sondy kondycji | |
service.beta.kubernetes.io/port_{port}_no_lb_rule |
prawda/fałsz | {port} to numer portu usługi. W przypadku ustawienia wartości true nie jest generowana żadna reguła modułu równoważenia obciążenia ani reguła sondy kondycji dla tego portu. Usługa kontroli kondycji nie powinna być widoczna w publicznym Internecie (np. istio/usługa sprawdzania kondycji wysłana) |
service.beta.kubernetes.io/port_{port}_no_probe_rule |
prawda/fałsz | {port} to numer portu usługi. W przypadku ustawienia wartości true nie jest generowana żadna reguła sondy kondycji dla tego portu. |
service.beta.kubernetes.io/port_{port}_health-probe_protocol |
Protokół sondy kondycji | {port} to numer portu usługi. Jawny protokół sondy kondycji dla portu usługi {port}, przesłaniając port.appProtocol w przypadku ustawienia. |
service.beta.kubernetes.io/port_{port}_health-probe_port |
numer portu lub nazwa portu w manifeście usługi | {port} to numer portu usługi. Jawny port sondy kondycji dla portu usługi {port}, przesłaniając wartość domyślną. |
service.beta.kubernetes.io/port_{port}_health-probe_interval |
Interwał sondy kondycji | {port} to numer portu usługi. |
service.beta.kubernetes.io/port_{port}_health-probe_num-of-probe |
Minimalna liczba odpowiedzi sondy kondycji w złej kondycji | {port} to numer portu usługi. |
service.beta.kubernetes.io/port_{port}_health-probe_request-path |
Ścieżka żądania sondy kondycji | {port} to numer portu usługi. |
Zgodnie z opisem w tym miejscu protokoły Tcp, Http i Https są trzema protokołami obsługiwanymi przez usługę modułu równoważenia obciążenia.
Obecnie domyślny protokół sondy kondycji różni się między usługami z różnymi protokołami transportu, protokołami aplikacji, adnotacjami i zasadami ruchu zewnętrznego.
- w przypadku usług lokalnych używane będą protokoły HTTP i /healthz. Sonda kondycji wykona zapytanie dotyczące węzłaHealthPort, a nie rzeczywistej usługi zaplecza
- w przypadku usług TCP klastra używany jest protokół TCP.
- w przypadku usług UDP klastra nie ma sond kondycji.
Uwaga
W przypadku usług lokalnych z włączoną integracją PLS i protokołem proxy PLS domyślna sonda kondycji HTTP+/healthz nie działa. W związku z tym sonda kondycji może być dostosowywana w taki sam sposób, jak usługi klastra do obsługi tego scenariusza.
Od wersji 1.20 adnotacja service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path
usługi jest wprowadzana w celu określenia zachowania sondy kondycji.
- W przypadku klastrów <=1.23
spec.ports.appProtocol
będzie używany tylko jako protokół sondy, gdyservice.beta.kubernetes.io/azure-load-balancer-health-probe-request-path
jest również ustawiony. - W przypadku klastrów >1.24
spec.ports.appProtocol
będzie używany jako protokół sondy i/
będzie używany jako domyślna ścieżka żądania sondy (service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path
może służyć do zmiany na inną ścieżkę żądania).
Należy pamiętać, że ścieżka żądania zostanie zignorowana podczas korzystania z protokołu TCP lub parametru jest pusta spec.ports.appProtocol
. W szczególności:
jednostka SKU modułu równoważenia obciążenia | externalTrafficPolicy |
spec.ports.Protocol | spec.ports.AppProtocol | service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path |
Protokół sondy modułu równoważenia obciążenia | Ścieżka żądania sondy modułu równoważenia obciążenia |
---|---|---|---|---|---|---|
standardowa | local | dowolny | dowolny | dowolny | http | /healthz |
standardowa | cluster | Udp | dowolny | dowolny | null | null |
standardowa | cluster | tcp | (ignorowane) | tcp | null | |
standardowa | cluster | tcp | tcp | (ignorowane) | tcp | null |
standardowa | cluster | tcp | http/https | TCP(<=1.23) lub http/https(>=1.24) | null(<=1.23) lub / (>=1.24) |
|
standardowa | cluster | tcp | http/https | /custom-path |
http/https | /custom-path |
standardowa | cluster | tcp | nieobsługiwany protokół | /custom-path |
tcp | null |
podstawowy | local | dowolny | dowolny | dowolny | http | /healthz |
podstawowy | cluster | tcp | (ignorowane) | tcp | null | |
podstawowy | cluster | tcp | tcp | (ignorowane) | tcp | null |
podstawowy | cluster | tcp | http | TCP(<=1.23) lub http/https(>=1.24) | null(<=1.23) lub / (>=1.24) |
|
podstawowy | cluster | tcp | http | /custom-path |
http | /custom-path |
podstawowy | cluster | tcp | nieobsługiwany protokół | /custom-path |
tcp | null |
Od wersji 1.21 wprowadzono dwie adnotacje service.beta.kubernetes.io/azure-load-balancer-health-probe-interval
usługi, load-balancer-health-probe-num-of-probe
które dostosowują konfigurację sondy kondycji. Jeśli service.beta.kubernetes.io/azure-load-balancer-health-probe-interval
nie zostanie ustawiona, zostanie zastosowana wartość domyślna 5. Jeśli load-balancer-health-probe-num-of-probe
nie zostanie ustawiona, zostanie zastosowana wartość domyślna 2. Całkowita sonda powinna być mniejsza niż 120 sekund.
Niestandardowa sonda kondycji modułu równoważenia obciążenia dla portu
Różne porty w usłudze mogą wymagać różnych konfiguracji sondy kondycji. Może to być spowodowane projektem usługi (takim jak pojedynczy punkt końcowy kondycji kontrolujący wiele portów) lub funkcjami kubernetes, takimi jak MixedProtocolLBService.
Poniższe adnotacje mogą służyć do dostosowywania konfiguracji sondy na port usługi.
adnotacja specyficzna dla portu | adnotacja sondy globalnej | Użycie |
---|---|---|
service.beta.kubernetes.io/port_{port}_no_lb_rule | N/A (nie jest równoważna globalnie) | jeśli ustawiono wartość true, nie zostaną wygenerowane żadne reguły modułu równoważenia obciążenia i reguły sondy |
service.beta.kubernetes.io/port_{port}_no_probe_rule | N/A (nie jest równoważna globalnie) | jeśli ustawiono wartość true, nie zostaną wygenerowane żadne reguły sondy |
service.beta.kubernetes.io/port_{port}_health-probe_protocol | N/A (nie jest równoważna globalnie) | Ustaw protokół sondy kondycji dla tego portu usługi (np. Http, Https, Tcp) |
service.beta.kubernetes.io/port_{port}_health-probe_port | N/A (nie jest równoważna globalnie) | Ustawia port sondy kondycji dla tego portu usługi (np. 15021) |
service.beta.kubernetes.io/port_{port}_health-probe_request-path | service.beta.kubernetes.io/azure-load-balancer-health-probe-request-path | W przypadku protokołu Http lub Https ustawia ścieżkę żądania sondy kondycji. Wartości domyślne do / |
service.beta.kubernetes.io/port_{port}_health-probe_num-sondy | service.beta.kubernetes.io/azure-load-balancer-health-probe-num-of-probe | Liczba kolejnych niepowodzeń sondy przed rozważenie złej kondycji portu |
service.beta.kubernetes.io/port_{port}_health-probe_interval | service.beta.kubernetes.io/azure-load-balancer-health-probe-interval | Ilość czasu między próbami sondy |
W przypadku następującego manifestu reguła sondy dla portu httpsserver różni się od tej dla serwera httpserver, ponieważ określono adnotacje dla serwera httpsserver portów.
apiVersion: v1
kind: Service
metadata:
name: appservice
annotations:
service.beta.kubernetes.io/azure-load-balancer-health-probe-num-of-probe: "5"
service.beta.kubernetes.io/port_443_health-probe_num-of-probe: "4"
spec:
type: LoadBalancer
selector:
app: server
ports:
- name: httpserver
protocol: TCP
port: 80
targetPort: 30102
- name: httpsserver
protocol: TCP
appProtocol: HTTPS
port: 443
targetPort: 30104
W tym manifeście porty https używają innego portu węzła, sprawdzania gotowości PROTOKOŁU HTTP na porcie 10256 na /healthz(healthz endpoint of kube-proxy).
apiVersion: v1
kind: Service
metadata:
name: istio
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/port_443_health-probe_protocol: "http"
service.beta.kubernetes.io/port_443_health-probe_port: "10256"
service.beta.kubernetes.io/port_443_health-probe_request-path: "/healthz"
spec:
ports:
- name: https
protocol: TCP
port: 443
targetPort: 8443
nodePort: 30104
appProtocol: https
selector:
app: istio-ingressgateway
gateway: istio-ingressgateway
istio: ingressgateway
type: LoadBalancer
sessionAffinity: None
externalTrafficPolicy: Local
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
allocateLoadBalancerNodePorts: true
internalTrafficPolicy: Cluster
W tym manifeście porty https używają innego punktu końcowego sondy kondycji, sprawdzania gotowości PROTOKOŁU HTTP na porcie 30000 na /healthz/ready.
apiVersion: v1
kind: Service
metadata:
name: istio
annotations:
service.beta.kubernetes.io/azure-load-balancer-internal: "true"
service.beta.kubernetes.io/port_443_health-probe_protocol: "http"
service.beta.kubernetes.io/port_443_health-probe_port: "30000"
service.beta.kubernetes.io/port_443_health-probe_request-path: "/healthz/ready"
spec:
ports:
- name: https
protocol: TCP
port: 443
targetPort: 8443
appProtocol: https
selector:
app: istio-ingressgateway
gateway: istio-ingressgateway
istio: ingressgateway
type: LoadBalancer
sessionAffinity: None
externalTrafficPolicy: Local
ipFamilies:
- IPv4
ipFamilyPolicy: SingleStack
allocateLoadBalancerNodePorts: true
internalTrafficPolicy: Cluster
Rozwiązywanie problemów z protokołem SNAT
Jeśli wiesz, że uruchamiasz wiele wychodzących połączeń TCP lub UDP z tym samym docelowym adresem IP i portem, a zauważysz, że kończy się niepowodzeniem połączeń wychodzących lub obsługa powiadamia o wyczerpaniu portów SNAT (wstępnie przeniesionych portów efemerycznych używanych przez pat), masz kilka ogólnych opcji ograniczania ryzyka. Przejrzyj te opcje i zdecyduj, co jest najlepsze dla danego scenariusza. Możliwe, że co najmniej jeden może pomóc w zarządzaniu scenariuszem. Aby uzyskać szczegółowe informacje, zapoznaj się z przewodnikiem rozwiązywania problemów z połączeniami wychodzącym.
Główną przyczyną wyczerpania SNAT jest często antywzór dotyczący tego, jak jest ustanawiana łączność wychodząca, zarządzana lub konfigurowalna czasomierze zmienia się z ich wartości domyślnych. Uważnie przejrzyj tę sekcję.
Kroki
- Sprawdź, czy połączenia pozostają bezczynne przez długi czas i polegają na domyślnym upłynął limit czasu bezczynności w celu zwolnienia tego portu. Jeśli tak, może być konieczne zmniejszenie domyślnego limitu czasu 30 minut dla danego scenariusza.
- Sprawdź, jak aplikacja tworzy łączność wychodzącą (na przykład przegląd kodu lub przechwytywanie pakietów).
- Ustal, czy to działanie jest oczekiwane, czy aplikacja działa nieprawidłowo. Użyj metryk i dzienników w usłudze Azure Monitor, aby uzasadnić wyniki. Na przykład użyj kategorii "Niepowodzenie" dla metryki połączeń SNAT.
- Oceń, czy są przestrzegane odpowiednie wzorce .
- Sprawdź, czy wyczerpanie portów SNAT powinno zostać złagodzone przy użyciu większej liczby wychodzących adresów IP i większej liczby przydzielonych portów wychodzących.
Wzorce projektowe
Korzystaj z ponownego użycia połączenia i buforowania połączeń, jeśli jest to możliwe. Te wzorce pomagają uniknąć problemów z wyczerpaniem zasobów i spowodować przewidywalne zachowanie. Elementy pierwotne dla tych wzorców można znaleźć w wielu bibliotekach i strukturach programistycznych.
- Żądania niepodzielne (jedno żądanie na połączenie) zazwyczaj nie są dobrym wyborem projektowym. Takie anty-wzorce ograniczają skalę, zmniejszają wydajność i zmniejszają niezawodność. Zamiast tego użyj ponownie połączeń HTTP/S, aby zmniejszyć liczbę połączeń i skojarzonych portów SNAT. Skalowanie aplikacji zwiększa się i poprawia wydajność z powodu zmniejszonych uścisków dłoni, narzutów i kosztów operacji kryptograficznych podczas korzystania z protokołu TLS.
- Jeśli korzystasz z klastra/niestandardowego serwera DNS lub niestandardowych serwerów nadrzędnych w podstawowej sieciDNS, pamiętaj, że usługa DNS może wprowadzać wiele indywidualnych przepływów na woluminie, gdy klient nie buforuje wyniku rozpoznawania nazw DNS. Pamiętaj, aby najpierw dostosować coreDNS zamiast używać niestandardowych serwerów DNS i zdefiniować dobrą wartość buforowania.
- Przepływy UDP (na przykład wyszukiwania DNS) przydzielają porty SNAT podczas limitu czasu bezczynności. Im dłuższy limit czasu bezczynności, tym większe jest wykorzystanie portów SNAT. Użyj krótkiego limitu czasu bezczynności (na przykład 4 minuty).
- Użyj pul połączeń, aby kształtować wolumin połączenia.
- Nigdy nie porzucaj przepływu TCP w trybie dyskretnym i polegaj na czasomierzach TCP w celu oczyszczenia przepływu. Jeśli nie zezwolisz na jawne zamknięcie połączenia przez protokół TCP, stan pozostanie przydzielony w systemach pośrednich i punktach końcowych i sprawia, że porty SNAT są niedostępne dla innych połączeń. Ten wzorzec może wyzwalać błędy aplikacji i wyczerpanie SNAT.
- Nie zmieniaj wartości czasomierza związanego z zamknięciem protokołu TCP na poziomie systemu operacyjnego bez specjalistycznej wiedzy na temat wpływu. Podczas odzyskiwania stosu TCP wydajność aplikacji może mieć negatywny wpływ, gdy punkty końcowe połączenia mają niezgodne oczekiwania. Zmiana czasomierzy jest zwykle oznaką podstawowego problemu projektowego. Zapoznaj się z poniższymi zaleceniami.
Przenoszenie z podstawowego modułu równoważenia obciążenia jednostki SKU do jednostki SKU w warstwie Standardowa
Jeśli masz istniejący klaster z modułem równoważenia obciążenia jednostki SKU w warstwie Podstawowa , podczas migracji do modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa należy pamiętać o ważnych różnicach behawioralnych.
Na przykład tworzenie niebieskich/zielonych wdrożeń w celu migracji klastrów jest powszechną praktyką, biorąc pod uwagę load-balancer-sku
typ klastra i można je zdefiniować tylko w czasie tworzenia klastra. Jednak moduły równoważenia obciążenia jednostki SKU w warstwie Podstawowa używają adresów IP jednostek SKU w warstwie Podstawowa, które nie są zgodne z modułami równoważenia obciążenia jednostki SKU w warstwie Standardowa. Moduły równoważenia obciążenia jednostki SKU w warstwie Standardowa wymagają adresów IP jednostek SKU w warstwie Standardowa. Podczas migrowania klastrów do uaktualniania jednostek SKU modułu równoważenia obciążenia wymagany jest nowy adres IP z zgodną jednostkę SKU adresu IP.
Aby uzyskać więcej informacji na temat migrowania klastrów, zapoznaj się z naszą dokumentacją dotyczącą zagadnień dotyczących migracji.
Ograniczenia
Podczas tworzenia klastrów usługi AKS i zarządzania nimi obowiązują następujące ograniczenia, które obsługują moduł równoważenia obciążenia przy użyciu jednostki SKU w warstwie Standardowa :
- Do zezwalania na ruch wychodzący z klastra usługi AKS wymagany jest co najmniej jeden publiczny adres IP lub prefiks adresu IP. Publiczny adres IP lub prefiks IP jest wymagany do utrzymania łączności między płaszczyzną sterowania a węzłami agenta oraz utrzymania zgodności z poprzednimi wersjami usługi AKS. Dostępne są następujące opcje określania publicznych adresów IP lub prefiksów adresów IP przy użyciu modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa :
- Podaj własne publiczne adresy IP.
- Podaj własne prefiksy publicznego adresu IP.
- Określ liczbę do 100, aby umożliwić klastrowi usługi AKS utworzenie wielu publicznych adresów IP jednostki SKU w warstwie Standardowa w tej samej grupie zasobów co klaster usługi AKS. Ta grupa zasobów jest zwykle nazwana przy użyciu MC_ na początku. Usługa AKS przypisuje publiczny adres IP do modułu równoważenia obciążenia jednostki SKU w warstwie Standardowa . Domyślnie jeden publiczny adres IP jest automatycznie tworzony w tej samej grupie zasobów co klaster usługi AKS, jeśli nie określono publicznego adresu IP, prefiksu publicznego adresu IP lub liczby adresów IP. Należy również zezwolić na publiczne adresy i uniknąć tworzenia zasad platformy Azure, które zakazują tworzenia adresów IP.
- Publiczny adres IP utworzony przez usługę AKS nie może być ponownie używany jako niestandardowy publiczny adres IP. Użytkownicy muszą tworzyć wszystkie niestandardowe adresy IP i zarządzać nimi.
- Definiowanie jednostki SKU modułu równoważenia obciążenia można wykonać tylko podczas tworzenia klastra usługi AKS. Nie można zmienić jednostki SKU modułu równoważenia obciążenia po utworzeniu klastra usługi AKS.
- W jednym klastrze można używać tylko jednego typu jednostki SKU modułu równoważenia obciążenia (Podstawowa lub Standardowa).
- Moduły równoważenia obciążenia jednostki SKU w warstwie Standardowa obsługują tylko adresy IP jednostek SKU w warstwie Standardowa.
Następne kroki
Aby dowiedzieć się więcej na temat usług Kubernetes, zobacz dokumentację usług Kubernetes.
Aby dowiedzieć się więcej na temat korzystania z wewnętrznego modułu równoważenia obciążenia dla ruchu przychodzącego, zobacz dokumentację wewnętrznego modułu równoważenia obciążenia usługi AKS.
Azure Kubernetes Service