Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Nehéz lehet azonosítani a környezettel kapcsolatos problémákat, például a hálózati konfigurációt, amely AKS-fürtlétrehozás sikertelenségét eredményezheti. A diagnosztikai ellenőrző egy PowerShell eszköz, amely segít azonosítani az AKS-klaszter létrehozási hibákat a környezetben fellépő lehetséges problémák miatt.
Feljegyzés
A diagnosztikai ellenőrző eszközt csak akkor használhatja, ha AKS-fürtöt hoztak létre, de sikertelen állapotban van. Nem használhatja az eszközt, ha nem lát AKS-fürtöt az Azure Portalon. Ha az AKS-fürt létrehozása meghiúsul egy Azure Resource Manager-erőforrás létrehozása előtt, küldjön egy támogatási kérelmet.
Mielőtt elkezdené
Mielőtt hozzákezdene, győződjön meg arról, hogy rendelkezik az alábbi előfeltételekkel. Ha nem felel meg a diagnosztikai ellenőrző eszköz futtatására vonatkozó követelményeknek, küldjön támogatási kérelmet:
- Közvetlen hozzáférés az Azure Local fürthöz, ahol létrehozta az AKS-fürtöt. Ez a hozzáférés lehet távoli asztal (RDP), vagy bejelentkezhet az Azure Local egyik fizikai csomópontjára is.
- Tekintse át az AKS-fürt és az AKS-fürtarchitektúra létrehozásának hálózati alapelveit.
- Az AKS-fürthöz csatolt logikai hálózat neve.
- Az AKS-fürt SSH titkos kulcsa, amellyel bejelentkezhet az AKS-fürt vezérlősík-csomópont virtuális gépére.
Az AKS-fürt vezérlősík-csomópontjának virtuálisgép-IP-címének beszerzése
Futtassa a következő parancsot az Azure Local-fürt bármely fizikai csomópontjáról. Győződjön meg arról, hogy az AKS-fürt nevét adja át, és nem az Azure Resource Manager-azonosítót:
invoke-command -computername (get-clusternode) -script {get-vmnetworkadapter -vmname *} | Where-Object {$_.Name -like "$cluster_name*control-plane-*"} | select vmname, ipaddresses
Várt kimenet:
VMName IPAddresses
------ -----------
<cluster-name>-XXXXXX-control-plane-XXXXXX {172.16.0.10, 172.16.0.4, fe80::ec:d3ff:fea0:1}
Ha nem látja a vezérlősík virtuális gépét az előző kimenetben látható módon, küldjön egy támogatási kérelmet.
Ha egy vezérlősík virtuális gépe jelenik meg, és az a következő:
- 0 IPv4-cím: küldjön egy támogatási kérelmet.
- 1 IP-cím: használja az IPv4-címet a paraméter bemeneteként
vmIP. - 2 IP-cím: használja az IPv4-címek bármelyikét a diagnosztikai ellenőrző paraméterének
vmIPbemeneteként.
A diagnosztikai ellenőrző szkript futtatása
Másolja a következő PowerShell-szkriptet az run_diagnostic.ps1 Azure Local-fürt bármely csomópontjába:
<#
.SYNOPSIS
Runs diagnostic checker tool in target cluster control plane VM and returns the result.
This script runs the following tests from target cluster control plane VM:
1. cloud-agent-connectivity-test: Checks whether the DNS server can resolve the Moc cloud agent FQDN and that the cloud agent is reachable from the control plane node VM. Cloud agent is created using one of the IP addresses from the [management IP pool](hci/plan/cloud-deployment-network-considerations.md#management-ip-pool), on port 55000. The control plane node VM is given an IP address from the Arc VM logical network.
2. gateway-icmp-ping-test: Checks whether the gateway specified in the logical network attached to the AKS cluster is reachable from the AKS cluster control plane node VM.
3. http-connectivity-required-url-test: Checks whether the required URLs are reachable from the AKS cluster control plane node VM.
.DESCRIPTION
This script transfers a file from the local machine to a remote server using the SCP (Secure Copy Protocol) command.
.PARAMETER lnetName
The name of the LNET used for the cluster.
.PARAMETER sshPath
The path to the private SSH key for the target cluster.
.PARAMETER vmIP
IP of the target cluster control plane VM.
.EXAMPLE
.\run_diagnostic.ps1 -lnetName lnet1 -sshPath C:\Users\test\.ssh\test-ssh.pem -vmIP "172.16.0.10"
This example runs diagnostic checker tool in the VM with IP 172.16.0.10 using ssh key C:\Users\test\.ssh\test-ssh.pem and outputs the result.
#>
param (
[Parameter(Mandatory=$true)]
[string]$lnetName,
[Parameter(Mandatory=$true)]
[string]$sshPath,
[Parameter(Mandatory=$true)]
[string]$vmIP
)
$urlArray = @(
"https://management.azure.com",
"https://eastus.dp.kubernetesconfiguration.azure.com",
"https://login.microsoftonline.com",
"https://eastus.login.microsoft.com",
"https://login.windows.net",
"https://mcr.microsoft.com",
"https://gbl.his.arc.azure.com",
"https://k8connecthelm.download.prss.microsoft.com",
"https://guestnotificationservice.azure.com",
"https://sts.windows.net",
"https://graph.microsoft.com"
)
$urlList=$urlArray -join ","
# check vm is reachable
try {
$pingResult = Test-Connection -ComputerName $vmIP -Count 1 -ErrorAction Stop
if ($pingResult.StatusCode -eq 0) {
Write-Host "Connection to $vmIP succeeded."
} else {
Write-Host "Connection to AKS cluster control plane VM $vmIP failed with status code: $($pingResult.StatusCode). Please make sure AKS cluster control plane VM $vmIP is reachable from the host"
exit
}
} catch {
Write-Host "Connection to AKS cluster control plane VM $vmIP failed. Please make sure AKS cluster control plane VM $vmIP is reachable from the host"
Write-Host "Exception message: $_"
exit
}
# retreiving LNET
$lnet=get-mocvirtualnetwork -group Default_Group -name $lnetName
# getting gateway address from LNET
$gateway=$lnet.properties.subnets[0].properties.routeTable.properties.routes[0].properties.nextHopIpAddress
if (-not $gateway) {
Write-Error "Check Gateway address in the AKS logical network $lnetName"
exit
}
# getting cloudfqdn from archciconfig
$arcHCIConfig=get-archciconfig
$cloudFqdn="http://"+$arcHCIConfig.Item('cloudFQDN')+":55000"
$configContent = @"
checks:
- metadata:
creationTimestamp: null
name: cloud-agent-connectivity-test
parameters:
hostnames: <CLOUD_FQDN>
skipeof: "true"
type: HTTPConnectivity
- metadata:
annotations:
skip-error-on-failure: "true"
creationTimestamp: null
name: gateway-icmp-ping-test
parameters:
ips: <GATEWAY>
packetLossThreshold: "20"
type: ICMPPing
- metadata:
creationTimestamp: null
name: http-connectivity-required-url-test
parameters:
hostnames: <URL_LIST>
type: HTTPConnectivity
exports:
- metadata:
creationTimestamp: null
parameters:
filelocation: /home/clouduser/results.yaml
type: FileSystem
metadata:
creationTimestamp: null
"@
# update config file with the values of cloud fqdn, gateway and dns servers
$configContent = $configContent.replace("<CLOUD_FQDN>", $cloudFqdn)
$configContent = $configContent.replace("<GATEWAY>", $gateway)
$configContent = $configContent.replace("<URL_LIST>", $urlList)
$filePath = "config.yaml"
# Write to config.yaml
Set-Content -Path $filePath -Value $configContent
$dest = 'clouduser@' + $vmIP + ":config.yaml"
# Copy the config file to target cluster VM
Write-Host "Copying test config file to target cluster VM...."
$command = "scp -i $sshPath -o StrictHostKeyChecking=no -o BatchMode=yes config.yaml $dest"
try {
$output=invoke-expression $command
if ($LASTEXITCODE -ne 0) {
Write-Error "Couldn't ssh to AKS cluster control plane VM $vmIP. Please check the ssh key"
exit
}
} catch {
Write-Host "Couldn't ssh to AKS cluster control plane VM $vmIP. Please check the ssh key"
Write-Host "Exception message: $_"
exit
}
Write-Output "Copied config.yaml successfully."
$runScriptContent = @"
sudo su - root -c "/usr/bin/diagnostics-checker -c /home/clouduser/config.yaml"
"@
$filePath = "run_diag.sh"
Set-Content -Path $filePath -Value $runScriptContent
$dest = 'clouduser@' + $vmIP + ":run_diag.sh"
scp -i $sshPath -o StrictHostKeyChecking=no -o BatchMode=yes run_diag.sh $dest
$dest = 'clouduser@' + $vmIP
ssh -i $sshPath $dest -o StrictHostKeyChecking=no -o BatchMode=yes 'chmod +x run_diag.sh'
$sedCommand="sed -i -e 's/\r$//' run_diag.sh"
ssh -i $sshPath -o StrictHostKeyChecking=no -o BatchMode=yes $dest $sedCommand
if (Test-Path -Path "results.yaml") {
Remove-Item results.yaml
}
ssh -i $sshPath -o StrictHostKeyChecking=no -o BatchMode=yes $dest './run_diag.sh'
ssh -i $sshPath -o StrictHostKeyChecking=no -o BatchMode=yes $dest "sudo su - root -c 'chmod a+r /home/clouduser/results.yaml'"
$src= 'clouduser@' + $vmIP + ":results.yaml"
scp -i $sshPath -o StrictHostKeyChecking=no -o BatchMode=yes $src results.yaml
if (-Not (Test-Path -Path "results.yaml")) {
write-host "Test failed to perform"
exit
}
Install-Module powershell-yaml
$resultContent = Get-Content -path results.yaml | ConvertFrom-Yaml
$testResults = @()
$cloudAgentRecommendation = @"
Make sure that the logical network IP addresses can connect to all the management IP pool addresses on the required ports. Check AKS network port and cross vlan requirements for detailed list of ports that need to be opened.
"@
$gatewayRecommendation = @"
- Ensure gateway is operational
- Verify routing configurations
- Adjust firewall rules to allow ICMP traffic
"@
$urlRecommendation = @"
Ensure that the logical network IP addresses have outbound internet access. If there's a firewall, ensure that AKS required URLs are accessible from Arc VM logical network.
"@
foreach ($check in $resultContent.spec.checks) {
if ($check.result.outcome -like "Success") {
$recommendation=""
}elseif ($check.metadata.name -like "cloud-agent-connectivity-test") {
$recommendation=$cloudAgentRecommendation
}elseif ($check.metadata.name -like "gateway-icmp-ping-test") {
$recommendation=$gatewayRecommendation
}elseif ($check.metadata.name -like "http-connectivity-required-url-test") {
$recommendation=$urlRecommendation
}
$testResults += [PSCustomObject]@{
TestName=$check.metadata.name
Outcome= $check.result.outcome
Recommendation = $recommendation
}
}
$testResults | Format-Table -Wrap -AutoSize
Példa a kimenetre:
TestName Outcome Recommendation
-------- ------- --------------
cloud-agent-connectivity-test Success
gateway-icmp-ping-test Success
http-connectivity-required-url-test Failure Ensure that the logical network IP addresses have outbound internet access. If there's a firewall, ensure that AKS required URLs are accessible from Arc VM logical network.
Diagnosztikai ellenőrző kimenetének elemzése
Az alábbi táblázat összefoglalja a szkript által elvégzett teszteket, beleértve a hiba lehetséges okait és a kockázatcsökkentésre vonatkozó javaslatokat:
| Teszt neve | Leírás | A hiba okai | Megoldási javaslatok |
|---|---|---|---|
| felhő-ügynök-kapcsolat-teszt | Ellenőrzi, hogy a DNS-kiszolgáló fel tudja-e oldani az MOC felhőügynök teljes tartománynevét, és hogy a felhőügynök elérhető-e a vezérlősík-csomópont virtuális gépéről. A felhőügynök a felügyeleti IP-készlet egyik IP-címével jön létre az 55000-s porton. A vezérlősík-csomópont virtuális gépe IP-címeket kap az Arc virtuális gép logikai hálózatából. | A logikai hálózati IP-címek a következő miatt nem tudnak csatlakozni a felügyeleti IP-készlet címéhez: - Helytelen DNS-kiszolgálófelbontás. - Tűzfalszabályok. - A logikai hálózat egy másik vlanban van, mint a felügyeleti IP-készlet, és nincs több vlan közötti kapcsolat. |
Győződjön meg arról, hogy a logikai hálózati IP-címek képesek csatlakozni a szükséges portok összes felügyeleti IP-címéhez. Ellenőrizze az AKS hálózati portra és a virtuális hálózatok közötti követelményekre vonatkozó követelményeket a megnyitni kívánt portok részletes listájához. |
| gateway-icmp-ping-test | Ellenőrzi, hogy az AKS-fürthöz csatlakoztatott logikai hálózaton megadott átjáró elérhető-e az AKS-fürt vezérlősík-csomópontjának virtuális gépéről. | - Az átjáró nem érhető el vagy nem érhető el. – Hálózati útválasztási problémák az AKS-fürt vezérlősíkjának virtuális gépe és az átjáró között. - Tűzfal blokkolja az ICMP-forgalmat. |
- Győződjön meg arról, hogy az átjáró működőképes. - Ellenőrizze az útválasztási konfigurációkat. – Állítsa be a tűzfalszabályokat az ICMP-forgalom engedélyezéséhez. |
| http-connectivity-required-url-test | Ellenőrzi, hogy a szükséges URL-címek elérhetők-e az AKS-fürt vezérlősík-csomópont virtuális gépéről. | – A vezérlősík-csomópont virtuális gépe nem rendelkezik kimenő internet-hozzáféréssel. – A szükséges URL-címek nem engedélyezettek a tűzfalon keresztül. |
Győződjön meg arról, hogy a logikai hálózati IP-címek kimenő internet-hozzáféréssel rendelkeznek. Ha van tűzfal, győződjön meg arról, hogy az AKS-hez szükséges URL-címek elérhetők az Arc virtuális gép logikai hálózatáról. |
Következő lépések
Ha a probléma továbbra is fennáll, gyűjtse össze az AKS-fürtnaplókat , mielőtt létrehozza a támogatási kérést.