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.

Diagram nakładki usługi AKS zarządzanej przez platformę Azure, zarządzanej przez klienta sieci wirtualnej i podsieci platformy Azure oraz tunelu z interfejsu API do zasobnika tunelu.

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ń:

Zrzut ekranu przedstawiający okienko Dodawanie reguły zabezpieczeń dla ruchu przychodzącego w Azure Portal. Pole Zakresy portów docelowych jest ustawione na 10250 dla nowej reguły 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:

  1. W Azure Portal wyszukaj i wybierz pozycję Usługi Kubernetes.

  2. Na liście usług Kubernetes wybierz nazwę klastra.

  3. W okienku menu klastra znajdź nagłówek Ustawienia , a następnie wybierz pozycję Właściwości.

  4. Wybierz nazwę wymienioną w obszarze Grupa zasobów infrastruktury.

  5. Wybierz moduł równoważenia obciążenia kubernetes .

  6. W okienku menu modułu równoważenia obciążenia znajdź nagłówek Monitorowanie , a następnie wybierz pozycję Metryki.

  7. Dla typu metryki wybierz pozycję Liczba połączeń SNAT.

  8. Wybierz pozycję Zastosuj podział.

  9. 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:

  1. W Azure Portal wyszukaj i wybierz pozycję Usługi Kubernetes.

  2. Na liście usług Kubernetes wybierz nazwę klastra.

  3. W okienku menu klastra wybierz pozycję Diagnozuj i rozwiąż problemy.

  4. Wybierz pozycję Problemy z łącznością.

  5. W obszarze Połączenie SNAT i alokacja portów wybierz pozycję Wyświetl szczegóły.

  6. 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.