Problemy z łącznością tunelu
Usługa Microsoft Azure Kubernetes Service (AKS) używa określonego składnika do tunelowanej, bezpiecznej komunikacji między węzłami a płaszczyzną sterowania. Tunel składa się z serwera po stronie płaszczyzny sterowania i klienta po stronie węzłów klastra. W tym artykule omówiono sposób rozwiązywania i rozwiązywania problemów związanych z łącznością tunelu w usłudze AKS.
Uwaga
Domyślnie i w zależności od regionu składnikiem tunelu był tunnel-front
. Podczas aktualizowania do funkcji tunnel-front
umowy dotyczącej poziomu usług (SLA) czasu pracy została zastąpiona przez aks-link
składnik tunelu, który używał nazwy OpenVPN. Usługa AKS migruje do konnektywności. Jest to składnik nadrzędny platformy Kubernetes, który zastępuje zarówno elementy, jak tunnel-front
i aks-link
. Aby uzyskać więcej informacji na temat migracji do środowiska Konnectivity jako składnika tunelu, zobacz informacje o wersji usługi AKS i dziennik zmian.
Wymagania wstępne
Symptomy
Zostanie wyświetlony komunikat o błędzie podobny do poniższego przykładu dotyczącego portu 10250:
Błąd z serwera: Pobierz ciąg "https://< aks-node-name>:10250/containerLogs/<namespace>/<pod-name>/<container-name>": wybieranie numeru tcp <aks-node-ip>:10250: limit czasu i/o
Błąd z serwera: błąd podczas wybierania zaplecza: wybieranie numeru tcp <aks-node-ip>:10250: limit czasu i/o
Serwer interfejsu API Kubernetes używa portu 10250 do nawiązywania połączenia z kubelet węzła w celu pobrania dzienników. Jeśli port 10250 jest zablokowany, dzienniki kubectl i inne funkcje będą działać tylko w przypadku zasobników uruchamianych w węzłach, w których zaplanowano składnik tunelu. Aby uzyskać więcej informacji, zobacz Porty i protokoły Kubernetes: Węzły procesu roboczego.
Ponieważ nie można ustanowić składników tunelu lub łączności między serwerem a klientem, funkcje takie jak następujące nie będą działać zgodnie z oczekiwaniami:
Elementy webhook kontrolera przyjęć
Możliwość pobierania dzienników (przy użyciu polecenia kubectl logs )
Uruchamianie polecenia w kontenerze lub wejście do kontenera (przy użyciu polecenia kubectl exec )
Przekazywanie co najmniej jednego portu lokalnego zasobnika (przy użyciu polecenia kubectl port-forward )
Przyczyna 1. Sieciowa grupa zabezpieczeń blokuje port 10250
Uwaga
Ta przyczyna ma zastosowanie do wszystkich składników tunelu, które mogą znajdować się w klastrze usługi AKS.
Sieciowa grupa zabezpieczeń platformy Azure umożliwia filtrowanie ruchu sieciowego do i z zasobów platformy Azure w sieci wirtualnej platformy Azure. Sieciowa grupa zabezpieczeń zawiera reguły zabezpieczeń, które zezwalają lub blokują przychodzący i wychodzący ruch sieciowy między kilkoma typami zasobów platformy Azure. Dla każdej reguły można określić źródło i miejsce docelowe, port i protokół. Aby uzyskać więcej informacji, zobacz Jak sieciowe grupy zabezpieczeń filtruje ruch sieciowy.
Jeśli sieciowa grupa zabezpieczeń blokuje port 10250 na poziomie sieci wirtualnej, funkcje tunelowania (takie jak dzienniki i wykonywanie kodu) będą działać tylko dla zasobników zaplanowanych w węzłach, w których są zaplanowane zasobniki tuneli. Inne zasobniki nie będą działać, ponieważ ich węzły nie będą mogły dotrzeć do tunelu, a tunel jest zaplanowany w innych węzłach. Aby sprawdzić ten stan, możesz przetestować łączność przy użyciu poleceń netcat (nc
) lub telnet. Możesz uruchomić polecenie az vmss run-command invoke , aby przeprowadzić test łączności i sprawdzić, czy się powiedzie, przekroczą limit czasu lub powodują inny problem:
az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
--name <virtual-machine-scale-set-name> \
--command-id RunShellScript \
--instance-id <instance-id> \
--scripts "nc -v -w 2 <ip-of-node-that-schedules-the-tunnel-component> 10250" \
--output tsv \
--query 'value[0].message'
Rozwiązanie 1. Dodawanie reguły sieciowej grupy zabezpieczeń w celu zezwolenia na dostęp do portu 10250
Jeśli używasz sieciowej grupy zabezpieczeń i masz określone ograniczenia, upewnij się, że dodasz regułę zabezpieczeń, która zezwala na ruch dla portu 10250 na poziomie sieci wirtualnej. Na poniższej ilustracji Azure Portal przedstawiono przykładową regułę zabezpieczeń:
Jeśli chcesz być bardziej restrykcyjny, możesz zezwolić na dostęp do portu 10250 tylko na poziomie podsieci.
Uwaga
Pole Priorytet musi być odpowiednio dostosowane. Jeśli na przykład masz regułę, która nie zezwala na wiele portów (w tym port 10250), reguła wyświetlana na obrazie powinna mieć niższy priorytet (niższe liczby mają wyższy priorytet). Aby uzyskać więcej informacji na temat priorytetu, zobacz Reguły zabezpieczeń.
Jeśli nie widzisz żadnych zmian w zachowaniu po zastosowaniu tego rozwiązania, możesz ponownie utworzyć zasobniki składnika tunelu. Usunięcie tych zasobników powoduje ich ponowne utworzenie.
Przyczyna 2. Narzędzie Nieskomplikowana zapora (UFW) blokuje port 10250
Uwaga
Ta przyczyna dotyczy dowolnego składnika tunelu, który znajduje się w klastrze usługi AKS.
Nieskomplikowana zapora (UFW) to program wiersza polecenia do zarządzania zaporą netfilter . Węzły usługi AKS używają systemu Ubuntu. W związku z tym UFW jest instalowany w węzłach USŁUGI AKS domyślnie, ale UFW jest wyłączony.
Domyślnie, jeśli UFW jest włączona, będzie blokować dostęp do wszystkich portów, w tym portu 10250. W takim przypadku jest mało prawdopodobne, aby można było użyć protokołu Secure Shell (SSH) do nawiązywania połączenia z węzłami klastra usługi AKS w celu rozwiązywania problemów. Dzieje się tak, ponieważ UFW może również blokować port 22. Aby rozwiązać ten problem, możesz uruchomić polecenie az vmss run-command invoke , aby wywołać polecenie ufw , które sprawdza, czy UFW jest włączone:
az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
--name <virtual-machine-scale-set-name> \
--command-id RunShellScript \
--instance-id <instance-id> \
--scripts "ufw status" \
--output tsv \
--query 'value[0].message'
Co zrobić, jeśli wyniki wskazują, że UFW jest włączona i nie zezwala na port 10250? W takim przypadku funkcje tunelowania (takie jak dzienniki i wykonywanie kodu) nie będą działać w przypadku zasobników zaplanowanych w węzłach z włączoną funkcją UFW. Aby rozwiązać ten problem, zastosuj jedno z następujących rozwiązań w usłudze UFW.
Ważna
Przed użyciem tego narzędzia do wprowadzania jakichkolwiek zmian przejrzyj zasady obsługi usługi AKS (zwłaszcza konserwację węzłów i dostęp), aby uniemożliwić klastrowi wejście w nieobsługiwany scenariusz.
Uwaga
Jeśli nie widzisz żadnych zmian zachowań po zastosowaniu rozwiązania, możesz ponownie utworzyć zasobniki składników tunelu. Usunięcie tych zasobników spowoduje ich ponowne utworzenie.
Rozwiązanie 2a: Wyłącz nieskomplikowaną zaporę
Uruchom następujące az vmss run-command invoke
polecenie, aby wyłączyć funkcję UFW:
az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
--name <virtual-machine-scale-set-name> \
--command-id RunShellScript \
--instance-id <instance-id> \
--scripts "ufw disable" \
--output tsv \
--query 'value[0].message'
Rozwiązanie 2b: Skonfiguruj nieskomplikowaną zaporę, aby zezwolić na dostęp do portu 10250
Aby wymusić UFW zezwalanie na dostęp do portu 10250, uruchom następujące az vmss run-command invoke
polecenie:
az vmss run-command invoke --resource-group <infra-or-MC-resource-group> \
--name <virtual-machine-scale-set-name> \
--command-id RunShellScript \
--instance-id <instance-id> \
--scripts "ufw allow 10250" \
--output tsv \
--query 'value[0].message'
Przyczyna 3. Narzędzie iptables blokuje port 10250
Uwaga
Ta przyczyna dotyczy dowolnego składnika tunelu, który znajduje się w klastrze usługi AKS.
Narzędzie iptables umożliwia administratorowi systemu skonfigurowanie reguł filtrowania pakietów IP zapory systemu Linux. Reguły można skonfigurować tak, iptables
aby blokować komunikację na porcie 10250.
Możesz wyświetlić reguły węzłów, aby sprawdzić, czy port 10250 jest zablokowany, czy skojarzone pakiety są porzucane. W tym celu uruchom następujące iptables
polecenie:
iptables --list --line-numbers
W danych wyjściowych dane są pogrupowane w kilka łańcuchów, w tym INPUT
łańcuch. Każdy łańcuch zawiera tabelę reguł w następujących nagłówkach kolumn:
num
(numer reguły)target
prot
(protokół)opt
source
destination
INPUT
Czy łańcuch zawiera regułę, w której elementem docelowym jest DROP
, protokół to tcp
, a miejscem docelowym jest tcp dpt:10250
? Jeśli tak, iptables
blokuje dostęp do portu docelowego 10250.
Rozwiązanie 3. Usuwanie reguły iptables, która blokuje dostęp na porcie 10250
Uruchom jedno z następujących poleceń, aby usunąć regułę iptables
, która uniemożliwia dostęp do portu 10250:
iptables --delete INPUT --jump DROP --protocol tcp --source <ip-number> --destination-port 10250
iptables --delete INPUT <input-rule-number>
Aby rozwiązać twój dokładny lub potencjalny scenariusz, zalecamy sprawdzenie ręcznej tabeli iptables , uruchamiając iptables --help
polecenie.
Ważna
Przed użyciem tego narzędzia do wprowadzania jakichkolwiek zmian przejrzyj zasady obsługi usługi AKS (zwłaszcza konserwację węzłów i dostęp), aby uniemożliwić klastrowi wejście w nieobsługiwany scenariusz.
Przyczyna 4. Port ruchu wychodzącego 1194 lub 9000 nie jest otwarty
Uwaga
Ta przyczyna dotyczy tylko zasobników tunnel-front
i aks-link
.
Czy istnieją ograniczenia ruchu wychodzącego, na przykład z zapory usługi AKS? Jeśli istnieje, port 9000 jest wymagany w celu włączenia prawidłowej tunnel-front
funkcjonalności zasobnika. Podobnie port 1194 jest wymagany dla zasobnika aks-link
.
Konnectivity opiera się na porcie 443. Domyślnie ten port jest otwarty. W związku z tym nie musisz martwić się o problemy z łącznością na tym porcie.
Rozwiązanie 4: Otwieranie portu 1194 lub 9000
Upewnij się, że urządzenie wirtualne zezwala na dostęp do portu 1194 lub portu 9000. Aby uzyskać więcej informacji na temat wymaganych reguł i zależności, zobacz Azure Global required network rules (Globalne reguły sieciowe wymagane na platformie Azure).
Przyczyna 5. Wyczerpanie portów translacji adresów sieciowych (SNAT) źródła
Uwaga
Ta przyczyna dotyczy dowolnego składnika tunelu, który znajduje się w klastrze usługi AKS. Nie dotyczy to jednak prywatnych klastrów usługi AKS. Wyczerpanie portów źródłowych adresów sieciowych (SNAT) może wystąpić tylko w przypadku komunikacji publicznej. W przypadku prywatnych klastrów usługi AKS serwer interfejsu API znajduje się wewnątrz sieci wirtualnej lub podsieci usługi AKS.
Jeśli wystąpi wyczerpanie portów SNAT (nie powiodło się porty SNAT), węzły nie mogą nawiązać połączenia z serwerem interfejsu API. Kontener tunelu znajduje się po stronie serwera interfejsu API. W związku z tym łączność tunelu nie zostanie ustanowiona.
Jeśli zasoby portów SNAT zostaną wyczerpane, przepływy wychodzące kończą się niepowodzeniem, dopóki istniejące przepływy nie zwolnią niektórych portów SNAT. Azure Load Balancer odzyskuje porty SNAT po zamknięciu przepływu. Używa czterominutowego limitu czasu bezczynności do odzyskiwania portów SNAT z bezczynnych przepływów.
Porty SNAT można wyświetlić z metryk modułu równoważenia obciążenia usługi AKS lub diagnostyki usługi, zgodnie z opisem w poniższych sekcjach. Aby uzyskać więcej informacji na temat wyświetlania portów SNAT, zobacz Jak mogę sprawdź statystyki połączeń wychodzących?.
Metryki modułu równoważenia obciążenia usługi AKS
Aby wyświetlić porty SNAT przy użyciu metryk modułu równoważenia obciążenia usługi AKS, wykonaj następujące kroki:
W Azure Portal wyszukaj i wybierz pozycję Usługi Kubernetes.
Na liście usług Kubernetes wybierz nazwę klastra.
W okienku menu klastra znajdź nagłówek Ustawienia , a następnie wybierz pozycję Właściwości.
Wybierz nazwę wymienioną w obszarze Grupa zasobów infrastruktury.
Wybierz moduł równoważenia obciążenia kubernetes .
W okienku menu modułu równoważenia obciążenia znajdź nagłówek Monitorowanie , a następnie wybierz pozycję Metryki.
Dla typu metryki wybierz pozycję Liczba połączeń SNAT.
Wybierz pozycję Zastosuj podział.
Ustaw opcję Podziel według na stan połączenia.
Diagnostyka usługi
Aby wyświetlić porty SNAT przy użyciu diagnostyki usługi, wykonaj następujące kroki:
W Azure Portal wyszukaj i wybierz pozycję Usługi Kubernetes.
Na liście usług Kubernetes wybierz nazwę klastra.
W okienku menu klastra wybierz pozycję Diagnozuj i rozwiąż problemy.
Wybierz pozycję Problemy z łącznością.
W obszarze Połączenie SNAT i alokacja portów wybierz pozycję Wyświetl szczegóły.
W razie potrzeby użyj przycisku Zakres czasu , aby dostosować przedział czasu.
Rozwiązanie 5a: Upewnij się, że aplikacja korzysta z puli połączeń
To zachowanie może wystąpić, ponieważ aplikacja nie używa ponownie istniejących połączeń. Zalecamy, aby nie tworzyć jednego połączenia wychodzącego na żądanie. Taka konfiguracja może spowodować wyczerpanie połączenia. Sprawdź, czy kod aplikacji jest następujący po najlepszych rozwiązaniach i korzysta z puli połączeń. Większość bibliotek obsługuje buforowanie połączeń. W związku z tym nie należy tworzyć nowego połączenia wychodzącego na żądanie.
Rozwiązanie 5b: Dostosowywanie przydzielonych portów wychodzących
Jeśli wszystko jest w aplikacji w porządku, musisz dostosować przydzielone porty wychodzące. Aby uzyskać więcej informacji na temat alokacji portów wychodzących, zobacz Konfigurowanie przydzielonych portów wychodzących.
Rozwiązanie 5c: Używanie bramy na potrzeby tłumaczenia adresów sieciowych (NAT) zarządzanego podczas tworzenia klastra
Nowy klaster można skonfigurować tak, aby używał bramy translatora adresów sieciowych (NAT) zarządzanego na potrzeby połączeń wychodzących. Aby uzyskać więcej informacji, zobacz Tworzenie klastra usługi AKS za pomocą zarządzanej bramy TRANSLATOR.
Wyłączenie odpowiedzialności za kontakty z osobami trzecimi
Firma Microsoft udostępnia informacje kontaktowe innych firm, które ułatwiają znalezienie dodatkowych informacji na ten temat. Informacje te mogą zostać zmienione bez powiadomienia. Firma Microsoft nie gwarantuje dokładności informacji kontaktowych innych firm.
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii platformy Azure.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla