Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Podsumowanie
W tym artykule opisano, jak rozwiązywać problemy w sytuacjach, gdy usługa Azure Kubernetes Service (AKS) nie może udostępnić nowego węzła z powodu błędu rozszerzenia Custom Script Extension (CSE).
Wymagania wstępne
Upewnij się, że zainstalowano Azure CLI i że została ona zaktualizowana do najnowszej wersji. Użyj az --version polecenia , aby sprawdzić zainstalowaną wersję.
Symptomy
Nowo aprowizowane wystąpienie zestawu skalowania maszyn wirtualnych nie rejestruje się jako węzeł AKS. Po operacji skalowania w poziomie puli węzłów można zauważyć, że liczba wystąpień zestawów skalowania maszyn wirtualnych (VMSS) wzrasta, podczas gdy liczba węzłów Kubernetes pozostaje niezmieniona.
Jeśli funkcja automatycznego skalowania klastra jest włączona, może usunąć niezarejestrowane wystąpienie usługi VMSS po upływie czasu.
Troubleshooting
Aby zidentyfikować przyczynę, pobierz kod zakończenia CSE z wystąpienia VMSS, którego dotyczy problem.
Użyj Azure CLI, aby wykonać następujące czynności:
Ustaw zmienne dla klastra 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)Wyświetl listę zestawów skalowania maszyn wirtualnych w grupie zasobów węzła i zidentyfikuj zestaw skalowania maszyn wirtualnych dla puli węzłów, których dotyczy problem.
az vmss list \ --resource-group "$NODE_RG" \ --query "[].{Name:name,Capacity:sku.capacity,ProvisioningState:provisioningState}" \ --output table export VMSS_NAME="<affected-vmss-name>"Znajdź identyfikator wystąpienia zestawu skalowania maszyn wirtualnych (VMSS), którego dotyczy problem, i wyeksportuj tę wartość.
export INSTANCE_ID="<affected-vmss-instance-id>"Pobierz stan CSE z instancji, której dotyczy problem.
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 jsonPoniżej przedstawiono przykładowe dane wyjściowe.
[ { "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..." } ]
Kody wyjścia identyfikują konkretny problem, który spowodował niepowodzenie procesu aprowizacji. W poprzednim przykładzie CSE zwraca kod zakończenia 51, co wskazuje na problem z łącznością z serwerem interfejsu API Kubernetes.
Mapowania innych kodów zakończenia można znaleźć w narzędziu pomocniczym CSE.
Rozwiązanie: Testowanie i naprawa problemów z przekroczeniem limitu czasu połączenia sieciowego interfejsu API
Upewnij się, że z instancji VMSS, której dotyczy problem, można uzyskać dostęp do serwera API. Sprawdź następujące konfiguracje sieci:
- Sprawdź, czy sieciowa grupa zabezpieczeń skojarzona z podsiecią usługi AKS blokuje ruch wychodzący do adresu IP serwera interfejsu API na porcie TCP 443.
- Sprawdź, czy dodatkowa sieciowa grupa zabezpieczeń (NSG) jest przypisana do interfejsu sieciowego zestawu VMSS. Każda mająca zastosowanie grupa NSG musi zezwalać na ruch wychodzący na adres IP serwera API przez port TCP 443.
- Sprawdź, czy zapora lub wirtualne urządzenie sieciowe (WUS) znajduje się na ścieżce ruchu wychodzącego. Urządzenie NVA jest zwykle konfigurowane przy użyciu tabeli tras powiązanej z podsiecią węzłów AKS. Upewnij się, że zapora lub urządzenie NVA zezwala na ruch wychodzący do adresu IP serwera API na porcie TCP 443. Aby uzyskać więcej informacji, zobacz Kontrolowanie ruchu wychodzącego dla węzłów klastra w usłudze AKS.
Aby przetestować łączność między wystąpieniem zestawu skalowania maszyn wirtualnych a serwerem API, użyj interfejsu wiersza polecenia platformy Azure (Azure CLI), aby uruchomić następujące polecenia.
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
Polecenie testuje rozpoznawanie nazw domen (DNS), łączność protokołu TCP (Transmission Control Protocol) i łączność HTTPS. Jeśli połączenie powiedzie się, dane wyjściowe powinny wyglądać podobnie do poniższego przykładu.
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]
Oczekiwana jest odpowiedź HTTP 401 , ponieważ żądanie nie zawiera poświadczeń uwierzytelniania. Odpowiedź potwierdza, że rozpoznawanie nazw DNS, połączenie TCP i uzgadnianie protokołu TLS zakończyło się pomyślnie i że serwer interfejsu API jest osiągalny.
Jeśli przekroczono limit czasu połączenia, dane wyjściowe powinny wyglądać podobnie do poniższego przykładu.
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
Jeśli połączenie przekroczy limit czasu, wystąpienie VMSS nie może połączyć się z serwerem API przez port TCP 443. Sprawdź skuteczne reguły NSG, trasy zdefiniowane przez użytkownika, zapory, wirtualne urządzenia sieciowe (NVA) i inne urządzenia sieciowe, które mogą blokować połączenie.
References
- W przypadku ogólnych kroków rozwiązywania problemów zobacz Podstawowe rozwiązywanie problemów z błędami "Brak gotowości węzła".