Problemy z łącznością z aplikacją Tunnel
Usługa Microsoft Azure Kubernetes Service (AKS) używa określonego składnika do tunelowania, 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 16.
Wcześniej składnik tunelu AKS to tunnel-front
. Została ona teraz zmigrowana do usługi Konnectivity , nadrzędnego składnika Kubernetes. Aby uzyskać więcej informacji na temat tej migracji, zobacz informacje o wersji usługi AKS i dziennik zmian.
Wymagania wstępne
Symptomy
Zostanie wyświetlony komunikat o błędzie podobny do następujących przykładów dotyczących portu 10250:
Błąd z serwera: Pobierz polecenie "https://< aks-node-name>:10250/containerLogs/<name>/<pod-name>/container-name>": dial tcp <aks-node-ip>:10250: i/<o timeout
Błąd z serwera: błąd wybierania zaplecza: wybieranie numeru tcp <aks-node-ip>:10250: przekroczenie limitu czasu operacji we/wy
Serwer interfejsu API Kubernetes używa portu 10250 do nawiązania połączenia z węzłem kubelet w celu pobrania dzienników. Jeśli port 10250 zostanie zablokowany, dzienniki kubectl i inne funkcje będą działać tylko dla 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 robocze.
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 dostępu
Możliwość pobierania dziennika (za pomocą polecenia kubectl logs )
Uruchamianie polecenia w kontenerze lub uzyskiwanie do wewnątrz kontenera (przy użyciu polecenia kubectl exec )
Przekazywanie co najmniej jednego lokalnego portu zasobnika (przy użyciu polecenia kubectl port-forward )
Przyczyna 1. Sieciowa grupa zabezpieczeń blokuje port 10250
Uwaga 16.
Ta przyczyna dotyczy wszystkich składników tunelu, które mogą być używane w klastrze usługi AKS.
Możesz użyć sieciowej grupy zabezpieczeń platformy Azure do filtrowania ruchu sieciowego do i z zasobów platformy Azure w sieci wirtualnej platformy Azure. Sieciowa grupa zabezpieczeń zawiera reguły zabezpieczeń, które zezwalają na ruch sieciowy przychodzący i wychodzący lub zezwalają na nie między kilkoma typami zasobów platformy Azure. Dla każdej reguły można określić źródło i obiekt docelowy, port i protokół. Aby uzyskać więcej informacji, zobacz Jak sieciowe grupy zabezpieczeń filtrować ruch sieciowy.
Jeśli sieciowa grupa zabezpieczeń blokuje port 10250 na poziomie sieci wirtualnej, funkcje tunelu (takie jak dzienniki i wykonywanie kodu) będą działać tylko dla zasobników zaplanowanych w węzłach, w których zaplanowano zasobniki tunelu. Inne zasobniki nie będą działać, ponieważ ich węzły nie będą mogły dotrzeć do tunelu, a tunel jest zaplanowany na 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 kończy się powodzeniem, limitem czasu lub przyczyną innego problemu:
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 dodano regułę zabezpieczeń zezwalającą na ruch dla portu 10250 na poziomie sieci wirtualnej. Poniższy obraz witryny Azure Portal przedstawia przykładową regułę zabezpieczeń:
Jeśli chcesz być bardziej restrykcyjny, możesz zezwolić na dostęp do portu 10250 tylko na poziomie podsieci.
Uwaga 16.
Należy odpowiednio dostosować pole Priorytet . Jeśli na przykład masz regułę, która blokuje wiele portów (w tym port 10250), reguła wyświetlana na obrazie powinna mieć niższy numer priorytetu (niższe liczby mają wyższy priorytet). Aby uzyskać więcej informacji na temat priorytetu, zobacz Reguły zabezpieczeń.
Jeśli po zastosowaniu tego rozwiązania nie widzisz żadnych zmian behawioralnych, możesz ponownie utworzyć zasobniki składnika tunelu. Usunięcie tych zasobników powoduje ich ponowne utworzenie.
Przyczyna 2. Narzędzie nieskomplikowanej zapory (UFW) blokuje port 10250
Uwaga 16.
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, zablokuje dostęp do wszystkich portów, w tym port 10250. W takim przypadku jest mało prawdopodobne, aby można było użyć protokołu Secure Shell (SSH) do nawiązania połączenia z węzłami klastra usługi AKS na potrzeby rozwiązywania problemów. Dzieje się tak, ponieważ UFW może również blokować port 22. Aby rozwiązać problemy, możesz uruchomić polecenie az vmss run-command invoke , aby wywołać polecenie ufw sprawdzające, czy ufW jest włączona:
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 tunelu (takie jak dzienniki i wykonywanie kodu) nie będą działać dla 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 systemie UFW.
Ważne
Przed użyciem tego narzędzia do wprowadzania jakichkolwiek zmian zapoznaj się z zasadami pomocy technicznej usługi AKS (zwłaszcza konserwacją węzłów i dostępem), aby zapobiec wejściu klastra w nieobsługiwany scenariusz.
Uwaga 16.
Jeśli po zastosowaniu rozwiązania nie widzisz żadnych zmian behawioralnych, możesz ponownie utworzyć zasobniki składnika tunelu. Usunięcie tych zasobników spowoduje ich ponowne utworzenie.
Rozwiązanie 2a: wyłączanie nieskomplikowanej zapory
Uruchom następujące az vmss run-command invoke
polecenie, aby wyłączyć 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: Konfigurowanie nieskomplikowanej zapory w celu zezwolenia na dostęp do portu 10250
Aby wymusić, aby ufW zezwolić 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 16.
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ły komunikację na porcie 10250.
Możesz wyświetlić reguły dla 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 łańcuch INPUT
. 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 blokującej dostęp na porcie 10250
Uruchom jedno z następujących poleceń, aby usunąć regułę iptables
uniemożliwiającą 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 instrukcji iptables ręcznie , uruchamiając iptables --help
polecenie .
Ważne
Przed użyciem tego narzędzia do wprowadzania jakichkolwiek zmian zapoznaj się z zasadami pomocy technicznej usługi AKS (zwłaszcza konserwacją węzłów i dostępem), aby zapobiec wejściu klastra w nieobsługiwany scenariusz.
Przyczyna 4: Port ruchu wychodzącego 1194 lub 9000 nie jest otwarty
Uwaga 16.
Ta przyczyna dotyczy tylko tunnel-front
zasobników i aks-link
.
Czy istnieją ograniczenia ruchu wychodzącego, takie jak z zapory usługi AKS? Jeśli istnieje, port 9000 jest wymagany w celu włączenia poprawnej funkcjonalności zasobnika tunnel-front
. 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 9000
Mimo że tunnel-front
został przeniesiony do usługi Konnectivity, niektóre klastry usługi AKS nadal używają tunnel-front
programu , który opiera się na porcie 9000. Upewnij się, że urządzenie wirtualne lub dowolne urządzenie sieciowe lub oprogramowanie zezwala na dostęp do portu 9000. Aby uzyskać więcej informacji na temat wymaganych reguł i zależności, zobacz Globalne reguły sieci wymagane na platformie Azure.
Przyczyna 5. Wyczerpanie portów źródłowego tłumaczenia adresów sieciowych (SNAT)
Uwaga 16.
Ta przyczyna dotyczy dowolnego składnika tunelu, który znajduje się w klastrze usługi AKS. Nie ma jednak zastosowania do prywatnych klastrów usługi AKS. Wyczerpanie portów SNAT (Source Network Address Translation) może wystąpić tylko w przypadku komunikacji publicznej. W przypadku prywatnych klastrów usługi AKS serwer interfejsu API znajduje się w sieci wirtualnej lub podsieci usługi AKS.
Jeśli wystąpi wyczerpanie portów SNAT (portów SNAT nie powiodło się), 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 nawiązana.
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. Usługa Azure Load Balancer odzyskuje porty SNAT po zamknięciu przepływu. Używa czterominutowego limitu czasu bezczynności, aby odzyskać porty SNAT z przepływów bezczynnych.
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ę zapoznaj się ze statystykami połączeń wychodzących?.
Metryki modułu równoważenia obciążenia usługi AKS
Aby wyświetlić porty SNAT za pomocą metryk modułu równoważenia obciążenia usługi AKS, wykonaj następujące kroki:
W witrynie 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 witrynie 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 buforowania połączeń
Takie zachowanie może wystąpić, ponieważ aplikacja nie korzysta z istniejących połączeń. Zalecamy, aby nie tworzyć jednego połączenia wychodzącego na żądanie. Taka konfiguracja może powodować wyczerpanie połączeń. Sprawdź, czy kod aplikacji jest przestrzegany najlepszych rozwiązań i czy używa 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 ok w aplikacji, 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 translatora adresów sieciowych (NAT) zarządzanych podczas tworzenia klastra
Możesz skonfigurować nowy klaster do używania bramy translatora adresów sieciowych (NAT) zarządzanych dla połączeń wychodzących. Aby uzyskać więcej informacji, zobacz Create an AKS cluster with a Managed NAT Gateway (Tworzenie klastra AKS przy użyciu zarządzanej bramy translatora adresów sieciowych).
Wyłączenie odpowiedzialności za kontakty z osobami trzecimi
Firma Microsoft udostępnia informacje kontaktowe innych firm, aby uzyskać dodatkowe informacje na temat tego tematu. 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 na temat platformy Azure.