Delen via


Verbindingsproblemen vaststellen voor Kubernetes-clusters met Azure Arc

Als u problemen ondervindt bij het verbinden van een cluster met Azure Arc, is dit waarschijnlijk het gevolg van een van de hier vermelde problemen. We bieden twee stroomdiagrammen met begeleide hulp: één als u geen proxyserver gebruikt en een die van toepassing is als uw netwerkverbinding gebruikmaakt van een proxyserver.

Tip

De stappen in dit stroomdiagram zijn van toepassing, ongeacht of u Azure CLI of Azure PowerShell gebruikt om verbinding te maken met uw cluster. Voor sommige van de stappen is echter het gebruik van Azure CLI vereist. Als u Azure CLI nog niet hebt geïnstalleerd, moet u dit doen voordat u begint.

Verbindingen zonder proxy

Bekijk dit stroomdiagram om uw probleem vast te stellen wanneer u een cluster probeert te verbinden met Azure Arc zonder een proxyserver. Hieronder vindt u meer informatie over elke stap.

Stroomdiagram met een visuele weergave van het controleren op verbindingsproblemen wanneer u geen proxy gebruikt.

Beschikt de Azure-identiteit over voldoende machtigingen?

Controleer de vereisten voor het verbinden van een cluster en zorg ervoor dat de identiteit die u gebruikt om verbinding te maken met het cluster over de benodigde machtigingen beschikt.

Voert u de nieuwste versie van Azure CLI uit?

Zorg ervoor dat u de nieuwste versie hebt geïnstalleerd.

Als u uw cluster hebt verbonden met behulp van Azure PowerShell, controleert u of u de nieuwste versie gebruikt.

Is de connectedk8s extensie de nieuwste versie?

Werk de Azure CLI-extensie connectedk8s bij naar de nieuwste versie door deze opdracht uit te voeren:

az extension update --name connectedk8s

Als u de extensie nog niet hebt geïnstalleerd, kunt u dit doen door de volgende opdracht uit te voeren:

az extension add --name connectedk8s

Verwijst kubeconfig naar het juiste cluster?

Voer uit kubectl config get-contexts om de naam van de doelcontext te bevestigen. Stel vervolgens de standaardcontext in op het juiste cluster door uit te voeren kubectl config use-context <target-cluster-name>.

Zijn alle vereiste resourceproviders geregistreerd?

Zorg ervoor dat de resourceproviders Microsoft.Kubernetes, Microsoft.KubernetesConfiguration en Microsoft.ExtendedLocation zijn geregistreerd.

Voldoet aan alle netwerkvereisten?

Controleer de netwerkvereisten en zorg ervoor dat er geen vereiste eindpunten worden geblokkeerd.

Worden alle pods in de azure-arc naamruimte uitgevoerd?

Als alles correct werkt, moeten uw pods allemaal de Running status hebben. Voer uit kubectl get pods -n azure-arc om te controleren of de status van een pod niet Runningis.

Nog steeds problemen?

Met de bovenstaande stappen worden veel veelvoorkomende verbindingsproblemen opgelost, maar als u nog steeds geen verbinding kunt maken, genereert u een logboekbestand voor probleemoplossing en opent u vervolgens een ondersteuningsaanvraag , zodat we het probleem verder kunnen onderzoeken.

Voer de volgende opdracht uit om het logboekbestand voor probleemoplossing te genereren:

az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>

Wanneer u uw ondersteuningsaanvraag maakt, gebruikt u in de sectie Aanvullende details de optie Bestand uploaden om het gegenereerde logboekbestand te uploaden.

Verbindingen met een proxyserver

Als u een proxyserver op ten minste één computer gebruikt, voert u de eerste vijf stappen van het niet-proxystroomdiagram (via de registratie van de resourceprovider) uit voor basisstappen voor probleemoplossing. Als u nog steeds problemen ondervindt, raadpleegt u het volgende stroomdiagram voor aanvullende stappen voor probleemoplossing. Hieronder vindt u meer informatie over elke stap.

Stroomdiagram met een visuele weergave van het controleren op verbindingsproblemen bij het gebruik van een proxy.

Voert de computer opdrachten uit achter een proxyserver?

Als de machine opdrachten uitvoert achter een proxyserver, moet u alle benodigde omgevingsvariabelen instellen. Zie Verbinding maken met een uitgaande proxyserver voor meer informatie.

Voorbeeld:

export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"

Accepteert de proxyserver alleen vertrouwde certificaten?

Zorg ervoor dat u het pad naar het certificaatbestand opneemt door op te nemen --proxy-cert <path-to-cert-file> bij het uitvoeren van de az connectedk8s connect opdracht.

az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>

Kan de proxyserver de vereiste netwerkeindpunten bereiken?

Controleer de netwerkvereisten en zorg ervoor dat er geen vereiste eindpunten worden geblokkeerd.

Gebruikt de proxyserver alleen HTTP?

Als uw proxyserver alleen HTTP gebruikt, kunt u voor beide parameters gebruiken proxy-http .

Als uw proxyserver is ingesteld met zowel HTTP als HTTPS, voert u de az connectedk8s connect opdracht uit met de --proxy-https opgegeven parameters en --proxy-http de parameters. Zorg ervoor dat u voor de HTTP-proxy en --proxy-https voor de HTTPS-proxy gebruikt--proxy-http.

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>  

Vereist de proxyserver skip-bereiken voor service-naar-service-communicatie?

Als u skip ranges nodig hebt, gebruikt --proxy-skip-range <excludedIP>,<excludedCIDR> u deze in uw az connectedk8s connect opdracht.

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>

Worden alle pods in de azure-arc naamruimte uitgevoerd?

Als alles correct werkt, moeten uw pods allemaal de Running status hebben. Voer uit kubectl get pods -n azure-arc om te controleren of de status van een pod niet Runningis.

Controleer of de DNS-omzetting is geslaagd voor het eindpunt

Vanuit de pod kunt u een DNS-zoekopdracht uitvoeren naar het eindpunt.

Wat gebeurt er als u de opdracht kubectl exec niet kunt uitvoeren om verbinding te maken met de pod en het DNS Utils-pakket te installeren? In deze situatie kunt u een testpod starten in dezelfde naamruimte als de problematische pod en vervolgens de tests uitvoeren.

Notitie

Als u met de DNS-omzetting of uitgaand verkeer de benodigde netwerkpakketten niet kunt installeren, kunt u de rishasi/ubuntu-netutil:1.0 Docker-installatiekopieën gebruiken. In deze installatiekopieën zijn de vereiste pakketten al geïnstalleerd.

Hier volgt een voorbeeldprocedure voor het controleren van DNS-omzetting:

  1. Start een testpod in dezelfde naamruimte als de problematische pod:

    kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
    

    Nadat de testpod wordt uitgevoerd, krijgt u toegang tot de pod.

  2. Voer de volgende apt-get opdrachten uit om andere hulpprogrammapakketten te installeren:

    apt-get update -y
    apt-get install dnsutils -y
    apt-get install curl -y
    apt-get install netcat -y
    
  3. Nadat de pakketten zijn geïnstalleerd, voert u de opdracht nslookup uit om de DNS-omzetting naar het eindpunt te testen:

    $ nslookup microsoft.com
    Server:         10.0.0.10
    Address:        10.0.0.10#53
    ...
    ...
    Name:   microsoft.com
    Address: 20.53.203.50
    
  4. Probeer de DNS-omzetting rechtstreeks vanaf de upstream-DNS-server. In dit voorbeeld wordt Azure DNS gebruikt:

    $ nslookup microsoft.com 168.63.129.16
    Server:         168.63.129.16
    Address:        168.63.129.16#53
    ...
    ...
    Address: 20.81.111.85
    
  5. Voer de host opdracht uit om te controleren of de DNS-aanvragen worden doorgestuurd naar de upstream-server:

    $ 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. Voer een testpod uit in de Windows-knooppuntgroep:

    # 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. Voer de opdracht kubectl exec uit om verbinding te maken met de pod met behulp van PowerShell:

    kubectl exec -it dnsutil-win powershell
    
  8. Voer de cmdlet Resolve-DnsName uit in PowerShell om te controleren of de DNS-resolutie werkt voor het eindpunt:

    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
    

Als de DNS-omzetting niet lukt, controleert u de DNS-configuratie voor het cluster.

Nog steeds problemen?

Met de bovenstaande stappen worden veel veelvoorkomende verbindingsproblemen opgelost, maar als u nog steeds geen verbinding kunt maken, genereert u een logboekbestand voor probleemoplossing en opent u vervolgens een ondersteuningsaanvraag , zodat we het probleem verder kunnen onderzoeken.

Voer de volgende opdracht uit om het logboekbestand voor probleemoplossing te genereren:

az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>

Wanneer u uw ondersteuningsaanvraag maakt, gebruikt u in de sectie Aanvullende details de optie Bestand uploaden om het gegenereerde logboekbestand te uploaden.

Volgende stappen