Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Overzicht
Dit artikel helpt u bij het oplossen van fouten met Custom Script Extension (CSE) die verhinderen dat Azure Kubernetes Service (AKS) een nieuw knooppunt inricht. Identificeer de CSE-afsluitcode en los de fout op, zodat nieuwe instanties van virtuele-machineschaalsets zich registreren als AKS-knooppunten.
Voorwaarden
Zorg ervoor dat u Azure CLI geïnstalleerd en of deze is bijgewerkt naar de nieuwste versie. Gebruik az --version dit om de geïnstalleerde versie te controleren.
Symptomen
Een nieuw ingericht schaalsetexemplaar van een virtuele machine wordt niet geregistreerd als een AKS-knooppunt. Na een uitschaalbewerking voor een knooppuntgroep ziet u mogelijk dat het aantal Virtual Machine Scale Sets instanties toeneemt terwijl het aantal Kubernetes-knooppunten ongewijzigd blijft.
Als de cluster-autoscaler is ingeschakeld, kan het niet-geregistreerde Virtual Machine Scale Sets-exemplaar na een bepaalde periode worden verwijderd.
Troubleshooting
Als u de oorzaak wilt identificeren, haalt u de CSE-afsluitcode op uit de betrokken Virtual Machine Scale Sets-instantie.
Gebruik Azure CLI om de volgende stappen uit te voeren:
Stel de variabelen voor het AKS-cluster in.
export RG_NAME="<cluster-resource-group>" export CLUSTER_NAME="<cluster-name>" export NODE_RG=$(az aks show \ --resource-group "$RG_NAME" \ --name "$CLUSTER_NAME" \ --query nodeResourceGroup \ --output tsv) export API_FQDN=$(az aks show \ --resource-group "$RG_NAME" \ --name "$CLUSTER_NAME" \ --query fqdn \ --output tsv)Maak een lijst van de VM-schaalsets in de knooppuntresourcegroep en identificeer de VM-schaalset voor de betreffende knooppuntpool.
az vmss list \ --resource-group "$NODE_RG" \ --query "[].{Name:name,Capacity:sku.capacity,ProvisioningState:provisioningState}" \ --output table export VMSS_NAME="<affected-vmss-name>"Zoek de exemplaar-id van het betrokken Virtual Machine Scale Sets exemplaar en exporteer de waarde.
export INSTANCE_ID="<affected-vmss-instance-id>"Haal de CSE-status op uit het betrokken exemplaar.
az vmss get-instance-view \ --resource-group "$NODE_RG" \ --name "$VMSS_NAME" \ --instance-id "$INSTANCE_ID" \ --query "extensions[?name=='vmssCSE'].statuses[].{ ExtensionState:code, Details:message }" \ --output jsonHier volgt voorbeelduitvoer.
[ { "ExtensionState": "ProvisioningState/failed/0", "Details": "failed to execute command: command terminated with exit status=1\n[stdout]\n{ \"ExitCode\": \"51\", \"Output\": \"... Failed to connect to <AKS API server FQDN> port 443: Connection timed out ... API server connection check code: 51 ... exit 51\", ... }\n\n[stderr]\n..." } ]
Afsluitcodes identificeren het specifieke probleem dat de inrichtingsfout heeft veroorzaakt. In het voorgaande voorbeeld retourneert CSE afsluitcode 51, wat een verbindingsprobleem met de Kubernetes-API-server aangeeft.
Zie de CSE-helper voor toewijzingen van andere exitcodes.
Oplossing: Netwerktime-outs van de API-server testen en oplossen
Zorg ervoor dat de API-server bereikbaar is vanaf de betrokken Virtual Machine Scale Sets-instance. Controleer de volgende netwerkconfiguraties:
- Controleer of de netwerkbeveiligingsgroep (NSG) die is gekoppeld aan het AKS-subnet uitgaand verkeer blokkeert naar het IP-adres van de API-server op TCP-poort 443.
- Controleer of er een extra NSG is gekoppeld aan de Virtual Machine Scale Sets netwerkinterface. Elke toepasselijke NSG moet uitgaand verkeer naar het IP-adres van de API-server op TCP-poort 443 toestaan.
- Controleer of een firewall of virtueel netwerkapparaat (NVA) zich in het pad voor uitgaand verkeer bevindt. Doorgaans configureert u een NVA via een routetabel die is gekoppeld aan het subnet van het AKS-knooppunt. Zorg ervoor dat de firewall of NVA uitgaand verkeer toestaat naar het IP-adres van de API-server op TCP-poort 443. Zie Uitgaand verkeer voor clusterknooppunten in AKS beheren voor meer informatie.
Als u de connectiviteit van het Virtual Machine Scale Sets exemplaar naar de API-server wilt testen, gebruikt u Azure CLI om de volgende opdrachten uit te voeren.
az vmss run-command invoke \
--resource-group "$NODE_RG" \
--name "$VMSS_NAME" \
--instance-id "$INSTANCE_ID" \
--command-id RunShellScript \
--scripts '
API_FQDN="'"$API_FQDN"'"
echo "=== DNS resolution ==="
getent ahostsv4 "$API_FQDN" |
awk '"'"'NR==1 {print "Resolved IP: " $1}'"'"'
echo "=== TCP connectivity ==="
if timeout 10 bash -c "</dev/tcp/$API_FQDN/443"; then
echo "TCP 443: connected"
else
echo "TCP 443: failed"
fi
echo "=== HTTPS response ==="
curl -sS -k \
--connect-timeout 10 \
--max-time 15 \
--output /dev/null \
--write-out \
"HTTP status: %{http_code}
Remote IP: %{remote_ip}
Connect time: %{time_connect}s
TLS time: %{time_appconnect}s
" \
"https://$API_FQDN/"
' \
--query "value[0].message" \
--output tsv
Met de opdracht wordt de DNS-omzetting (Domain Name System), TCP-connectiviteit (Transmission Control Protocol) en HTTPS-connectiviteit getest. Als de verbinding slaagt, moet de uitvoer er ongeveer uitzien als in het volgende voorbeeld.
Enable succeeded:
[stdout]
=== DNS resolution ===
Resolved IP: 172.199.220.208
=== TCP connectivity ===
TCP 443: connected
=== HTTPS response ===
HTTP status: 401
Remote IP: 172.199.220.208
Connect time: 0.018883s
TLS time: 0.058870s
[stderr]
Er wordt een HTTP-antwoord 401 verwacht omdat de aanvraag geen verificatiereferenties bevat. Het antwoord bevestigt dat de DNS-resolutie, de TCP-verbinding en de TLS-handshake zijn geslaagd en dat de API-server bereikbaar is.
Als er een time-out optreedt voor de verbinding, moet de uitvoer er ongeveer uitzien als in het volgende voorbeeld.
Enable succeeded:
[stdout]
=== DNS resolution ===
Resolved IP: 20.238.162.102
=== TCP connectivity ===
TCP 443: failed
=== HTTPS response ===
HTTP status: 000
Remote IP:
Connect time: 0.000000s
TLS time: 0.000000s
[stderr]
curl: (28) Connection timeout after 10000 ms
Als er een time-out optreedt voor de verbinding, kan het Virtual Machine Scale Sets exemplaar de API-server niet bereiken op TCP-poort 443. Controleer de effectieve NSG-regels, door de gebruiker gedefinieerde routes, firewalls, NVA's en andere netwerkapparaten die de verbinding kunnen blokkeren.
References
- Voor algemene stappen voor probleemoplossing raadpleegt u Basisprobleemoplossing voor 'Node niet gereed'-fouten.