Diagnostisera anslutningsproblem för Azure Arc-aktiverade Kubernetes-kluster
Om du har problem med att ansluta ett kluster till Azure Arc beror det förmodligen på något av problemen som anges här. Vi tillhandahåller två flödesscheman med guidad hjälp: ett om du inte använder en proxyserver och ett som gäller om nätverksanslutningen använder en proxyserver.
Dricks
Stegen i det här flödesschemat gäller oavsett om du använder Azure CLI eller Azure PowerShell för att ansluta klustret. Vissa av stegen kräver dock användning av Azure CLI. Om du inte redan har installerat Azure CLI måste du göra det innan du börjar.
Anslutningar utan proxy
Granska det här flödesschemat för att diagnostisera problemet när du försöker ansluta ett kluster till Azure Arc utan en proxyserver. Mer information om varje steg finns nedan.
Har Azure-identiteten tillräcklig behörighet?
Granska förutsättningarna för att ansluta ett kluster och se till att den identitet som du använder för att ansluta klustret har nödvändiga behörigheter.
Kör du den senaste versionen av Azure CLI?
Kontrollera att du har den senaste versionen installerad.
Om du har anslutit klustret med hjälp av Azure PowerShell kontrollerar du att du kör den senaste versionen.
connectedk8s
Är tillägget den senaste versionen?
Uppdatera Azure CLI-tillägget connectedk8s
till den senaste versionen genom att köra det här kommandot:
az extension update --name connectedk8s
Om du inte har installerat tillägget ännu kan du göra det genom att köra följande kommando:
az extension add --name connectedk8s
Pekar kubeconfig på rätt kluster?
Kör kubectl config get-contexts
för att bekräfta målkontextnamnet. Ange sedan standardkontexten till rätt kluster genom att köra kubectl config use-context <target-cluster-name>
.
Är alla nödvändiga resursprovidrar registrerade?
Kontrollera att resursprovidrarna Microsoft.Kubernetes, Microsoft.KubernetesConfiguration och Microsoft.ExtendedLocation är registrerade.
Uppfylls alla nätverkskrav?
Granska nätverkskraven och se till att inga nödvändiga slutpunkter blockeras.
Körs alla poddar i azure-arc
namnområdet?
Om allt fungerar korrekt bör alla poddar vara i tillståndet Running
. Kör kubectl get pods -n azure-arc
för att bekräfta om någon podds tillstånd inte Running
är .
Har du fortfarande problem?
Stegen ovan löser många vanliga anslutningsproblem, men om du fortfarande inte kan ansluta genererar du en felsökningsloggfil och öppnar sedan en supportbegäran så att vi kan undersöka problemet ytterligare.
Kör följande kommando för att generera felsökningsloggfilen:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
När du skapar din supportbegäran använder du alternativet Filuppladdning i avsnittet Ytterligare information för att ladda upp den genererade loggfilen.
Anslutningar med en proxyserver
Om du använder en proxyserver på minst en dator utför du de första fem stegen i flödesschemat för icke-proxy (via registrering av resursprovider) för grundläggande felsökningssteg. Om du fortfarande stöter på problem läser du sedan nästa flödesschema för ytterligare felsökningssteg. Mer information om varje steg finns nedan.
Kör datorn kommandon bakom en proxyserver?
Om datorn kör kommandon bakom en proxyserver måste du ange alla nödvändiga miljövariabler. Mer information finns i Ansluta med en utgående proxyserver.
Till exempel:
export HTTP_PROXY="http://<proxyIP>:<proxyPort>"
export HTTPS_PROXY="https://<proxyIP>:<proxyPort>"
export NO_PROXY="<cluster-apiserver-ip-address>:<proxyPort>"
Accepterar proxyservern endast betrodda certifikat?
Se till att inkludera sökvägen till certifikatfilen genom att inkludera --proxy-cert <path-to-cert-file>
när du kör az connectedk8s connect
kommandot.
az connectedk8s connect --name <cluster-name> --resource-group <resource-group> --proxy-cert <path-to-cert-file>
Kan proxyservern nå nödvändiga nätverksslutpunkter?
Granska nätverkskraven och se till att inga nödvändiga slutpunkter blockeras.
Använder proxyservern bara HTTP?
Om proxyservern bara använder HTTP kan du använda proxy-http
för båda parametrarna.
Om proxyservern har konfigurerats med både HTTP och HTTPS kör az connectedk8s connect
du kommandot med angivna --proxy-https
parametrar och --proxy-http
. Se till att du använder --proxy-http
för HTTP-proxyn och --proxy-https
för HTTPS-proxyn.
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>
Kräver proxyservern hoppintervall för tjänst-till-tjänst-kommunikation?
Om du behöver hoppa över intervall använder du --proxy-skip-range <excludedIP>,<excludedCIDR>
i kommandot 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>
Körs alla poddar i azure-arc
namnområdet?
Om allt fungerar korrekt bör alla poddar vara i tillståndet Running
. Kör kubectl get pods -n azure-arc
för att bekräfta om någon podds tillstånd inte Running
är .
Kontrollera om DNS-matchningen lyckas för slutpunkten
Inifrån podden kan du köra en DNS-sökning till slutpunkten.
Vad händer om du inte kan köra kommandot kubectl exec för att ansluta till podden och installera DNS Utils-paketet? I det här fallet kan du starta en testpodd i samma namnområde som den problematiska podden och sedan köra testerna.
Kommentar
Om DNS-matchningen eller utgående trafik inte låter dig installera nödvändiga nätverkspaket kan du använda Docker-avbildningen rishasi/ubuntu-netutil:1.0
. I den här avbildningen är de nödvändiga paketen redan installerade.
Här är ett exempel på en procedur för att kontrollera DNS-matchning:
Starta en testpodd i samma namnområde som den problematiska podden:
kubectl run -it --rm test-pod --namespace <namespace> --image=debian:stable
När testpodden har körts får du åtkomst till podden.
Kör följande
apt-get
kommandon för att installera andra verktygspaket:apt-get update -y apt-get install dnsutils -y apt-get install curl -y apt-get install netcat -y
När paketen har installerats kör du kommandot nslookup för att testa DNS-matchningen till slutpunkten:
$ nslookup microsoft.com Server: 10.0.0.10 Address: 10.0.0.10#53 ... ... Name: microsoft.com Address: 20.53.203.50
Prova DNS-matchningen direkt från den överordnade DNS-servern. I det här exemplet används 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
host
Kör kommandot för att kontrollera om DNS-begäranden dirigeras till den överordnade servern:$ 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
Kör en testpodd i Windows-nodpoolen:
# 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"
Kör kommandot kubectl exec för att ansluta till podden med hjälp av PowerShell:
kubectl exec -it dnsutil-win -- powershell
Kör cmdleten Resolve-DnsName i PowerShell för att kontrollera om DNS-matchningen fungerar för slutpunkten:
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
Om DNS-matchningen inte lyckas kontrollerar du DNS-konfigurationen för klustret.
Har du fortfarande problem?
Stegen ovan löser många vanliga anslutningsproblem, men om du fortfarande inte kan ansluta genererar du en felsökningsloggfil och öppnar sedan en supportbegäran så att vi kan undersöka problemet ytterligare.
Kör följande kommando för att generera felsökningsloggfilen:
az connectedk8s troubleshoot -g <myResourceGroup> -n <myK8sCluster>
När du skapar din supportbegäran använder du alternativet Filuppladdning i avsnittet Ytterligare information för att ladda upp den genererade loggfilen.
Nästa steg
- Visa fler felsökningstips för att använda Azure Arc-aktiverade Kubernetes.
- Granska processen för att ansluta ett befintligt Kubernetes-kluster till Azure Arc.