Diagnozowanie problemów z połączeniem dla klastrów Kubernetes z włączoną usługą Azure Arc
Jeśli występują problemy z połączeniem klastra z usługą Azure Arc, prawdopodobnie jest to spowodowane jednym z problemów wymienionych tutaj. Udostępniamy dwa schematy blokowe z przewodnikiem: jeden, jeśli nie używasz serwera proxy, i jeden, który ma zastosowanie, jeśli połączenie sieciowe korzysta z serwera proxy.
Napiwek
Kroki opisane w tym schemacie blokowym dotyczą używania interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell do łączenia klastra. Jednak niektóre kroki wymagają użycia interfejsu wiersza polecenia platformy Azure. Jeśli jeszcze nie zainstalowano interfejsu wiersza polecenia platformy Azure, pamiętaj, aby to zrobić przed rozpoczęciem.
Połączenia bez serwera proxy
Przejrzyj ten schemat blokowy, aby zdiagnozować problem podczas próby połączenia klastra z usługą Azure Arc bez serwera proxy. Poniżej przedstawiono więcej szczegółów na temat poszczególnych kroków.
Czy tożsamość platformy Azure ma wystarczające uprawnienia?
Zapoznaj się z wymaganiami wstępnymi dotyczącymi łączenia klastra i upewnij się, że tożsamość używana do łączenia klastra ma niezbędne uprawnienia.
Czy używasz najnowszej wersji interfejsu wiersza polecenia platformy Azure?
Upewnij się, że masz zainstalowaną najnowszą wersję.
Jeśli klaster został połączony przy użyciu programu Azure PowerShell, upewnij się, że używasz najnowszej wersji.
Czy rozszerzenie jest najnowszą connectedk8s
wersją?
Zaktualizuj rozszerzenie interfejsu wiersza polecenia connectedk8s
platformy Azure do najnowszej wersji, uruchamiając następujące polecenie:
az extension update --name connectedk8s
Jeśli rozszerzenie nie zostało jeszcze zainstalowane, możesz to zrobić, uruchamiając następujące polecenie:
az extension add --name connectedk8s
Czy polecenie kubeconfig wskazuje odpowiedni klaster?
Uruchom polecenie kubectl config get-contexts
, aby potwierdzić nazwę kontekstu docelowego. Następnie ustaw domyślny kontekst na właściwy klaster, uruchamiając polecenie kubectl config use-context <target-cluster-name>
.
Czy wszyscy dostawcy zasobów są zarejestrowani?
Upewnij się, że dostawcy zasobów Microsoft.Kubernetes, Microsoft.KubernetesConfiguration i Microsoft.ExtendedLocation są zarejestrowani.
Czy spełnione są wszystkie wymagania dotyczące sieci?
Przejrzyj wymagania dotyczące sieci i upewnij się, że żadne wymagane punkty końcowe nie są blokowane.
Czy wszystkie zasobniki w azure-arc
przestrzeni nazw są uruchomione?
Jeśli wszystko działa prawidłowo, zasobniki powinny być w Running
stanie . Uruchom polecenie kubectl get pods -n azure-arc
, aby potwierdzić, czy stan zasobnika nie Running
jest .
Nadal masz problemy?
Powyższe kroki rozwiążą wiele typowych problemów z połączeniem, ale jeśli nadal nie możesz nawiązać połączenia, wygeneruj plik dziennika rozwiązywania problemów, a następnie otwórz wniosek o pomoc techniczną, abyśmy mogli dokładniej zbadać problem.
Aby wygenerować plik dziennika rozwiązywania problemów, uruchom następujące polecenie:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
Podczas tworzenia wniosku o pomoc techniczną w sekcji Dodatkowe szczegóły użyj opcji Przekaż plik, aby przekazać wygenerowany plik dziennika.
Połączenia z serwerem proxy
Jeśli używasz serwera proxy na co najmniej jednej maszynie, wykonaj pięć pierwszych kroków schematu blokowego innego niż serwer proxy (za pośrednictwem rejestracji dostawcy zasobów), aby uzyskać podstawowe kroki rozwiązywania problemów. Jeśli nadal występują problemy, zapoznaj się z kolejnym schematem blokowym, aby uzyskać dodatkowe kroki rozwiązywania problemów. Poniżej przedstawiono więcej szczegółów na temat poszczególnych kroków.
Czy maszyna wykonuje polecenia za serwerem proxy?
Jeśli maszyna wykonuje polecenia za serwerem proxy, należy ustawić wszystkie niezbędne zmienne środowiskowe. Aby uzyskać więcej informacji, zobacz Nawiązywanie połączenia przy użyciu serwera proxy ruchu wychodzącego.
Na przykład:
export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"
Czy serwer proxy akceptuje tylko zaufane certyfikaty?
Pamiętaj, aby uwzględnić ścieżkę pliku certyfikatu, dołączając --proxy-cert <path-to-cert-file>
je podczas uruchamiania az connectedk8s connect
polecenia.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>
Czy serwer proxy może uzyskać dostęp do wymaganych punktów końcowych sieci?
Przejrzyj wymagania dotyczące sieci i upewnij się, że żadne wymagane punkty końcowe nie są blokowane.
Czy serwer proxy korzysta tylko z protokołu HTTP?
Jeśli serwer proxy używa tylko protokołu HTTP, można użyć proxy-http
ich dla obu parametrów.
Jeśli serwer proxy jest skonfigurowany z protokołem HTTP i HTTPS, uruchom az connectedk8s connect
polecenie z określonymi --proxy-https
parametrami i --proxy-http
. Upewnij się, że używasz --proxy-http
serwera proxy HTTP i --proxy-https
serwera proxy HTTPS.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port>
Czy serwer proxy wymaga pomijania zakresów komunikacji między usługami?
Jeśli potrzebujesz pomijania zakresów, użyj --proxy-skip-range <excludedIP>,<excludedCIDR>
polecenia w poleceniu az connectedk8s connect
.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-https https://<proxy-server-ip-address>:<port> --proxy-http http://<proxy-server-ip-address>:<port> --proxy-skip-range <excludedIP>,<excludedCIDR>
Czy wszystkie zasobniki w azure-arc
przestrzeni nazw są uruchomione?
Jeśli wszystko działa prawidłowo, zasobniki powinny być w Running
stanie . Uruchom polecenie kubectl get pods -n azure-arc
, aby potwierdzić, czy stan zasobnika nie Running
jest .
Sprawdzanie, czy rozpoznawanie nazw DNS zakończyło się pomyślnie dla punktu końcowego
Z poziomu zasobnika możesz uruchomić wyszukiwanie DNS w punkcie końcowym.
Co zrobić, jeśli nie można uruchomić polecenia kubectl exec , aby nawiązać połączenie z zasobnikiem i zainstalować pakiet NARZĘDZI DNS? W takiej sytuacji można uruchomić zasobnik testowy w tej samej przestrzeni nazw co problematyczny zasobnik, a następnie uruchomić testy.
Uwaga
Jeśli ruch rozpoznawania lub ruchu wychodzącego DNS nie umożliwia zainstalowania niezbędnych pakietów sieciowych, możesz użyć obrazu platformy rishasi/ubuntu-netutil:1.0
Docker. Na tej ilustracji wymagane pakiety są już zainstalowane.
Oto przykładowa procedura sprawdzania rozpoznawania nazw DNS:
Uruchom zasobnik testowy w tej samej przestrzeni nazw co problematyczny zasobnik:
kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
Po uruchomieniu zasobnika testowego uzyskasz dostęp do zasobnika.
Uruchom następujące
apt-get
polecenia, aby zainstalować inne pakiety narzędzi:apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat -y
Po zainstalowaniu pakietów uruchom polecenie nslookup , aby przetestować rozpoznawanie nazw DNS w punkcie końcowym:
$ nslookup microsoft.com Server: 10.0.0.10 Address: 10.0.0.10#53 ... ... Name: microsoft.com Address: 20.53.203.50
Spróbuj bezpośrednio użyć rozpoznawania nazw DNS z nadrzędnego serwera DNS. W tym przykładzie użyto usługi Azure DNS:
$ nslookup microsoft.com 168.63.129.16 Server: 168.63.129.16 Address: 168.63.129.16#53 ... ... Address: 20.81.111.85
Uruchom polecenie ,
host
aby sprawdzić, czy żądania DNS są kierowane do nadrzędnego serwera:$ host -a microsoft.com Trying "microsoft.com.default.svc.cluster.local" Trying "microsoft.com.svc.cluster.local" Trying "microsoft.com.cluster.local" Trying "microsoft.com.00idcnmrrm4edot5s2or1onxsc.bx.internal.cloudapp.net" Trying "microsoft.com" Trying "microsoft.com" ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62884 ;; flags: qr rd ra; QUERY: 1, ANSWER: 27, AUTHORITY: 0, ADDITIONAL: 5 ;; QUESTION SECTION: ;microsoft.com. IN ANY ;; ANSWER SECTION: microsoft.com. 30 IN NS ns1-39.azure-dns.com. ... ... ns4-39.azure-dns.info. 30 IN A 13.107.206.39 Received 2121 bytes from 10.0.0.10#53 in 232 ms
Uruchom zasobnik testowy w puli węzłów systemu Windows:
# For a Windows environment, use the Resolve-DnsName cmdlet. kubectl run dnsutil-win --image='mcr.microsoft.com/windows/servercore:1809' --overrides='{"spec": { "nodeSelector": {"kubernetes.io/os": "windows"}}}' -- powershell "Start-Sleep -s 3600"
Uruchom polecenie kubectl exec, aby nawiązać połączenie z zasobnikiem przy użyciu programu PowerShell:
kubectl exec -it dnsutil-win -- powershell
Uruchom polecenie cmdlet Resolve-DnsName w programie PowerShell, aby sprawdzić, czy rozpoznawanie nazw DNS działa dla punktu końcowego:
PS C:\> Resolve-DnsName www.microsoft.com Name Type TTL Section NameHost ---- ---- --- ------- -------- www.microsoft.com CNAME 20 Answer www.microsoft.com-c-3.edgekey.net www.microsoft.com-c-3.edgekey. CNAME 20 Answer www.microsoft.com-c-3.edgekey.net.globalredir.akadns.net net www.microsoft.com-c-3.edgekey. CNAME 20 Answer e13678.dscb.akamaiedge.net net.globalredir.akadns.net Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:484::356e Name : e13678.dscb.akamaiedge.net QueryType : AAAA TTL : 20 Section : Answer IP6Address : 2600:1408:c400:496::356e Name : e13678.dscb.akamaiedge.net QueryType : A TTL : 12 Section : Answer IP4Address : 23.200.197.152
Jeśli rozpoznawanie nazw DNS nie powiedzie się, sprawdź konfigurację DNS klastra.
Nadal masz problemy?
Powyższe kroki rozwiążą wiele typowych problemów z połączeniem, ale jeśli nadal nie możesz nawiązać połączenia, wygeneruj plik dziennika rozwiązywania problemów, a następnie otwórz wniosek o pomoc techniczną, abyśmy mogli dokładniej zbadać problem.
Aby wygenerować plik dziennika rozwiązywania problemów, uruchom następujące polecenie:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
Podczas tworzenia wniosku o pomoc techniczną w sekcji Dodatkowe szczegóły użyj opcji Przekaż plik, aby przekazać wygenerowany plik dziennika.
Następne kroki
- Zobacz więcej wskazówek dotyczących rozwiązywania problemów dotyczących korzystania z platformy Kubernetes z obsługą usługi Azure Arc.
- Przejrzyj proces łączenia istniejącego klastra Kubernetes z usługą Azure Arc.