Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Sommario
Questo articolo descrive come risolvere i problemi relativi agli scenari in cui Servizio Azure Kubernetes (AKS) non riesce a effettuare il provisioning di un nuovo nodo a causa di un errore dell'estensione dello script personalizzato.This article describes how to troubleshoot scenarios in which Servizio Azure Kubernetes (AKS) fails to provision a new node because of a custom script extension (CSE) error.
Prerequisiti
Assicurarsi di aver interfaccia della riga di comando di Azure installato e che sia stato aggiornato alla versione più recente. Usare az --version per controllare la versione installata.
Sintomi
Una nuova istanza del set di scalabilità di macchine virtuali di cui è stato appena effettuato il provisioning non viene registrata come nodo AKS. Dopo un'operazione di scalabilità orizzontale del pool di nodi, è possibile osservare che il numero di istanze di set di scalabilità di macchine virtuali (VMSS) aumenta mentre il numero di nodi Kubernetes rimane invariato.
Se il ridimensionamento automatico del cluster è abilitato, potrebbe rimuovere l'istanza vmSS non registrata dopo un periodo di tempo.
Risoluzione dei problemi
Per identificare la causa, recuperare il codice di uscita CSE dall'istanza VMSS interessata.
Usare interfaccia della riga di comando di Azure per eseguire i passaggi seguenti:
Impostare le variabili per il cluster AKS.
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)Elencare i set di scalabilità di macchine virtuali nel gruppo di risorse del nodo e identificare il set di scalabilità di macchine virtuali per il pool di nodi interessato.
az vmss list \ --resource-group "$NODE_RG" \ --query "[].{Name:name,Capacity:sku.capacity,ProvisioningState:provisioningState}" \ --output table export VMSS_NAME="<affected-vmss-name>"Trova l'ID dell'istanza VMSS interessata ed esporta il valore.
export INSTANCE_ID="<affected-vmss-instance-id>"Recupera lo stato CSE dall'istanza interessata.
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 jsonDi seguito è riportato un output di esempio.
[ { "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..." } ]
I codici di uscita identificano il problema specifico che ha causato la non riuscita del provisioning. Nell'esempio precedente, CSE restituisce il codice 51di uscita , che indica un problema di connettività con il server API Kubernetes.
Per le mappature di altri codici di uscita, vedi l'helper CSE.
Soluzione: Testare e correggere i timeout di rete dell'API
Assicurarsi che il server API sia raggiungibile dall'istanza VMSS interessata. Controllare le configurazioni di rete seguenti:
- Verificare se il gruppo di sicurezza di rete (NSG) associato alla subnet di AKS blocca il traffico in uscita verso l'indirizzo IP del server API sulla porta TCP 443.
- Verificare se un NSG aggiuntivo è associato all'interfaccia di rete del VMSS. Ogni gruppo di sicurezza di rete applicabile deve consentire il traffico in uscita verso l'indirizzo IP del server API sulla porta TCP 443.
- Controllare se un firewall o un'appliance virtuale di rete (NVA) si trova nel percorso del traffico in uscita. Un'NVA viene in genere configurata tramite una tabella di routing associata alla subnet del nodo AKS. Assicurarsi che il firewall o l'appliance virtuale di rete consenta il traffico in uscita verso l'indirizzo IP del server API sulla porta TCP 443. Per ulteriori informazioni, vedere Gestire il traffico in uscita per i nodi del cluster AKS.
Per verificare la connettività dall'istanza di VMSS al server API, usa interfaccia della riga di comando di Azure per eseguire i seguenti comandi.
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
Il comando verifica la risoluzione DNS (Domain Name System), la connettività TCP (Transmission Control Protocol) e la connettività HTTPS. Se la connessione ha esito positivo, l'output dovrebbe essere simile all'esempio seguente.
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]
È prevista una risposta HTTP 401 perché la richiesta non include le credenziali di autenticazione. La risposta conferma che la risoluzione DNS, la connessione TCP e l'handshake TLS sono riusciti e che il server API è raggiungibile.
Se si verifica il timeout della connessione, l'output dovrebbe essere simile all'esempio seguente.
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
Se la connessione scade, l'istanza VMSS non può raggiungere il server API sulla porta TCP 443. Controllare le regole NSG effettive, le route definite dall'utente, i firewall, le appliance virtuali di rete (NVA) e altri dispositivi di rete che potrebbero bloccare la connessione.
Riferimenti
- Per i passaggi generali per la risoluzione dei problemi, vedere Risoluzione dei problemi di base per i failure Node Not Ready.