Udostępnij za pośrednictwem


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.

Schemat blokowy przedstawiający wizualną reprezentację sprawdzania problemów z połączeniem, gdy nie jest używany serwer proxy.

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

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.

Schemat blokowy przedstawiający wizualną reprezentację sprawdzania problemów z połączeniem podczas korzystania z serwera proxy.

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

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:

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

  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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"
    
  7. Uruchom polecenie kubectl exec, aby nawiązać połączenie z zasobnikiem przy użyciu programu PowerShell:

    kubectl exec -it dnsutil-win -- powershell
    
  8. 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