Use el comprobador de diagnóstico para diagnosticar y corregir problemas de entorno para errores de creación de clústeres de AKS (versión preliminar)
Puede ser difícil identificar problemas relacionados con el entorno, como las configuraciones de red, lo que puede provocar un error de creación de clústeres de AKS. El comprobador de diagnóstico es una herramienta basada en PowerShell que puede ayudarle a identificar errores de creación de clústeres de AKS debido a posibles problemas en el entorno.
Nota:
Solo puede usar la herramienta de comprobador de diagnóstico si se creó un clúster de AKS, pero está en estado de error. No puede usar la herramienta si no ve un clúster de AKS en Azure Portal. Si se produce un error en la creación del clúster de AKS antes de crear un recurso de Azure Resource Manager, abra una solicitud de soporte técnico.
Antes de empezar
Antes de comenzar, asegúrese de que tiene los siguientes requisitos previos. Si no cumple los requisitos para ejecutar la herramienta de comprobador de diagnóstico, abra una solicitud de soporte técnico:
- Acceso directo al clúster local de Azure donde creó el clúster de AKS. Este acceso puede ser a través del escritorio remoto (RDP) o también puede iniciar sesión en uno de los nodos físicos locales de Azure.
- Revise los conceptos de red para crear un clúster de AKS y la arquitectura del clúster de AKS.
- Nombre de la red lógica conectada al clúster de AKS.
- Una clave privada SSH para el clúster de AKS, que se usa para iniciar sesión en la máquina virtual del nodo del plano de control del clúster de AKS.
Obtención de la dirección IP de máquina virtual del nodo del plano de control del clúster de AKS
Ejecute el comando siguiente desde cualquier nodo físico del clúster local de Azure. Asegúrese de pasar el nombre y no el identificador de Azure Resource Manager del clúster de AKS:
invoke-command -computername (get-clusternode) -script {get-vmnetworkadapter -vmname *} | Where-Object {$_.Name -like "$cluster_name*control-plane-*"} | select vmname, ipaddresses
Resultado esperado:
VMName IPAddresses
------ -----------
<cluster-name>-XXXXXX-control-plane-XXXXXX {172.16.0.10, 172.16.0.4, fe80::ec:d3ff:fea0:1}
Si no ve una máquina virtual del plano de control como se muestra en la salida anterior, abra una solicitud de soporte técnico.
Si ve una máquina virtual del plano de control y tiene:
- 0 direcciones IPv4: abra una solicitud de soporte técnico.
- 1 dirección IP: use la dirección IPv4 como entrada para
vmIP
el parámetro . - 2 direcciones IP: use cualquiera de las direcciones IPv4 como entrada para
vmIP
el parámetro en el comprobador de diagnóstico.
Ejecución del script del comprobador de diagnóstico
Copie el siguiente script run_diagnostic.ps1
de PowerShell en cualquier nodo del clúster local de Azure:
<#
.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
Salida del ejemplo:
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.
Análisis de la salida del comprobador de diagnóstico
En la tabla siguiente se proporciona un resumen de cada prueba realizada por el script, incluidas las posibles causas de errores y recomendaciones para la mitigación:
Nombre de prueba | Descripción | Causas del error | Recomendaciones de mitigación |
---|---|---|---|
cloud-agent-connectivity-test | Comprueba si el servidor DNS puede resolver el FQDN del agente en la nube de MOC y que el agente en la nube es accesible desde la máquina virtual del nodo del plano de control. El agente en la nube se crea mediante una de las direcciones IP del grupo de direcciones IP de administración, en el puerto 55000. La máquina virtual del nodo del plano de control recibe direcciones IP de la red lógica de la máquina virtual de Arc. | Las direcciones IP de red lógicas no se pueden conectar a las direcciones del grupo de DIRECCIONES IP de administración debido a: - Resolución incorrecta del servidor DNS. - Reglas de firewall. - La red lógica está en una vlan diferente que el grupo de direcciones IP de administración y no hay conectividad entre vlan. |
Asegúrese de que las direcciones IP de red lógicas pueden conectarse a todas las direcciones del grupo de DIRECCIONES IP de administración en los puertos necesarios. Compruebe los requisitos de puerto de red de AKS y entre vlan para obtener una lista detallada de los puertos que deben abrirse. |
gateway-icmp-ping-test | Comprueba si la puerta de enlace especificada en la red lógica conectada al clúster de AKS es accesible desde la máquina virtual del plano de control del clúster de AKS. | - La puerta de enlace está inactiva o inaccesible. - Problemas de enrutamiento de red entre la máquina virtual del nodo del plano de control del clúster de AKS y la puerta de enlace. - Firewall que bloquea el tráfico ICMP. |
- Asegúrese de que la puerta de enlace está operativa. - Comprobar las configuraciones de enrutamiento. - Ajuste las reglas de firewall para permitir el tráfico ICMP. |
http-connectivity-required-url-test | Comprueba si se puede acceder a las direcciones URL necesarias desde la máquina virtual del nodo del plano de control del clúster de AKS. | - La máquina virtual del nodo del plano de control no tiene acceso saliente a Internet. - Las direcciones URL necesarias no se permiten a través del firewall. |
Asegúrese de que las direcciones IP de red lógica tengan acceso saliente a Internet. Si hay un firewall, asegúrese de que las direcciones URL necesarias de AKS sean accesibles desde la red lógica de la máquina virtual de Arc. |
Pasos siguientes
Si el problema persiste, recopile los registros de clúster de AKS antes de crear una solicitud de soporte.