{"id":"IL-0147","org":"Microsoft","date":"2025-08-26","docs":["https://aka.ms/VMExtensionCSELinuxTroubleshoot","https://github.com/Azure/AKS/issues/5200"],"title":{"en":"AKS nodes behind an HTTP proxy failed to provision with CSE exit code 31 on 202508 node images, because a refactoring stopped the proxy from being used when downloading uncached Kubernetes binaries","ko":"AKS 202508 노드 이미지가 캐시되지 않은 쿠버네티스 바이너리를 받을 때 HTTP 프록시 설정을 쓰지 않아, 프록시 뒤에 있는 노드의 프로비저닝이 CSE 종료 코드 31 로 실패했다."},"domain":["kubernetes","azure","networking"],"impact":{"scope":"Node pool creation, scaling and node image upgrades failed for AKS clusters whose nodes must egress through an HTTP proxy and whose Kubernetes version was not cached in the 202508 node images","users":"AKS customers in proxy-restricted environments","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":{"en":"A bootstrap path that runs only when an artefact is missing from a cache is easy to break without noticing: here only clusters on Kubernetes versions not pre-cached in the node image ever downloaded binaries, so only they met the proxy regression. Testing node provisioning behind a mandatory egress proxy, on older patch versions as well as the newest, would exercise that path.\n\nFor clusters with restricted egress, pinning the node image or moving to a Kubernetes version cached in the image were both quick workarounds while the fix was shipped.","ko":"노드 이미지에 캐시된 쿠버네티스 버전이면 바이너리를 내려받지 않으므로 프록시 처리가 망가져도 드러나지 않는다. 캐시는 마이너 버전마다 최근 패치 두 개뿐이라, 오래된 패치 버전을 쓰는 클러스터만 내려받기 경로를 타서 이 버그를 겪었다. 보고한 사용자는 AKS 이슈 #5200 에서 요청한 노드 풀 자동 롤백 기능이 있었다면 이런 상황에서 도움이 됐을 것이라고 적었다."},"related":[],"sources":[{"url":"https://github.com/Azure/AKS/issues/5238","kind":"github","license":"unknown","archived":null}],"summary":{"en":"AKS node images (VHDs) pre-cache the Kubernetes node binaries for the two most recent patch versions of each minor release. When a node boots on a version that is not cached, the Custom Script Extension (CSE) bootstrap downloads the binaries from acs-mirror.azureedge.net. A recent refactoring in the bootstrap stopped the HTTP proxy configuration from being used for that download, so in clusters where nodes can reach the internet only through a proxy, the download tried direct egress, timed out, and the CSE exited with code 31 once it passed its 780-second limit. Node provisioning failed.\n\nThe affected node image versions were 20250806, 20250811 and 20250820. Clusters on a version whose binaries were cached in the image, such as v1.31.9 and v1.31.10 in 20250806 and 20250811, were not affected, which is why the bug showed only on AKS 1.31.0 to 1.31.8 and other uncached versions. The issue was opened on 2025-08-27; the AKS team confirmed the cause on 2025-09-03, and VHD 20250811 with a hotfix was globally available in public regions on 2025-09-04.","ko":"AKS 노드 이미지 VHD 에는 쿠버네티스 바이너리가 미리 캐시되어 있다. 캐시되는 것은 마이너 버전마다 가장 최근 패치 두 개뿐이다. 클러스터 버전이 캐시에 없으면 노드는 부트스트랩 중에 acs-mirror.azureedge.net 에서 바이너리를 내려받는다.\n\n202508 이미지에 들어간 최근 리팩터링 때문에, 캐시되지 않은 바이너리를 내려받을 때 HTTP 프록시 설정이 쓰이지 않았다. 직접 나가는 트래픽을 막고 프록시만 허용하는 환경에서는 curl 이 계속 시간 초과됐고, CSE 가 780초 한도를 넘겨 종료 코드 31 로 끝났다. 그래서 노드 풀 생성, 확장, 노드 이미지 업그레이드가 실패했다. 1.31.9 와 1.31.10 은 이미지에 캐시되어 있어 내려받을 필요가 없었으므로 문제가 없었다.\n\n영향받은 VHD 버전은 20250806, 20250811, 20250820 이었다. 이슈는 2025년 8월 27일에 열렸고, AKS 팀은 9월 2일 바이너리가 VHD 에 캐시되지 않은 경우의 문제일 수 있다고 답했다. 9월 3일 원인을 확인하고 VHD 20250811 과 20250820 에 핫픽스를 넣겠다고 알렸다. 9월 4일 핫픽스를 넣은 VHD 20250811 이 모든 퍼블릭 리전에 배포됐고, 이슈는 해결로 표시됐다."},"trigger":{"en":"A node image auto-upgrade from 202507.* to 202508.* during planned maintenance, on clusters whose Kubernetes patch version was not pre-cached in the new image.","ko":"계획된 유지 보수로 노드 이미지가 202507.* 에서 202508.* 로 자동 업그레이드됐다."},"severity":"unknown","symptoms":["autoscaler-scale-up-failed","upgrade-stuck"],"timeline":{"detected_after":null,"resolved_after":null},"date_kind":"incident","detection":{"en":"The customer saw VMSS instance provisioning fail with a vmssCSE error in the VMSS activity logs and reported it as a GitHub issue.","ko":"고객이 VMSS 활동 로그와 CSE 출력에서 프로비저닝 실패를 보고 원인을 좁힌 뒤 2025년 8월 27일 Azure/AKS GitHub 이슈로 보고했다."},"components":["node-image","node-pool"],"root_cause":"software-bug","remediation":[{"text":{"en":"The customer pinned the node image to a 202507.* snapshot on clusters running 1.31.8","ko":"고객은 AKS 1.31.8 클러스터의 노드 이미지를 202507.* 로 고정해 프로비저닝을 되살렸다."}},{"text":{"en":"The customer upgraded clusters to AKS 1.31.9 or 1.31.10, whose binaries are cached in the 202508.* images","ko":"고객은 202508.* 이미지를 쓰는 클러스터를 AKS 1.31.9 나 1.31.10 으로 올려 문제를 피했다."}},{"text":{"en":"The AKS team hot-patched VHD 20250811 so the proxy configuration is used for uncached binary downloads and made it globally available in public regions on 2025-09-04; it also announced the hotfix for VHD 20250820","ko":"AKS 팀은 캐시되지 않은 바이너리를 내려받을 때 프록시 설정을 쓰도록 VHD 20250811 에 핫픽스를 넣어 9월 4일 모든 퍼블릭 리전에 배포했다. VHD 20250820 에도 핫픽스를 넣겠다고 알렸다."}},{"text":{"en":"The AKS team told users to reimage their nodes with az aks nodepool upgrade --node-image-only to pick up the hotfixed image","ko":"AKS 팀은 사용자에게 az aks nodepool upgrade -n <nodepool-name> --cluster-name <clustername> -g <resourcegroup-name> --node-image-only 로 노드에 이미지를 다시 설치하라고 안내했다."}}],"action_items":[{"text":{"en":"Apply the proxy fix in all future VHDs","ko":"앞으로 나오는 모든 VHD 에 같은 수정을 넣는다."}}],"contributing":["failure-delayed-by-cache","automation-amplified"],"recurrence_of":null,"symptoms_text":{"en":"Creating or scaling a node pool on AKS 1.31.8 failed: the VMSS instances never finished provisioning. This started after planned maintenance moved the node image from 202507.* to 202508.*, in a cluster where nodes must send all outbound traffic through an internal HTTP/HTTPS proxy and direct egress is blocked. It happened with both Ubuntu and AzureLinux images.\n\nThe VMSS activity log showed \"VM has reported a failure when processing extension 'vmssCSE'\" with \"command terminated with exit status=31\". The CSE output showed curl repeatedly trying to download https://acs-mirror.azureedge.net/kubernetes/v1.31.8/binaries/kubernetes-node-linux-amd64.tar.gz by connecting straight to the IP addresses of acs-mirror.azureedge.net on port 443, each attempt ending in a 60-second timeout, until \"Error: CSE has been running for 806 seconds, exceeding the limit of 780 seconds.\" and \"CSE timeout approaching, exiting early.\"\n\nThe reporter found that 202507.* images on the same AKS versions worked, and that 202508.* images worked on AKS 1.31.9 and 1.31.10. Another user reported that a cluster on AKS 1.32.4 with node image 202507.21.0 worked, but after a reconcile AKS tried 202508.06.0, provisioning failed and the cluster went into the Failed state.","ko":"모든 아웃바운드 트래픽을 사내 프록시로 보내야 하는 환경에서 AKS 1.31.0 부터 1.31.8 까지의 노드 풀을 만들거나 늘리면 VMSS 인스턴스 프로비저닝이 실패했다. 계획된 유지 보수로 노드 이미지가 202507.* 에서 202508.* 로 자동 업그레이드된 뒤부터였다.\n\nVMSS 활동 로그에는 \"VM has reported a failure when processing extension 'vmssCSE'\" 와 \"Enable failed: failed to execute command: command terminated with exit status=31\" 이 남았다. CSE 는 VM 이 뜰 때 노드를 부트스트랩하는 CustomScriptExtension 스크립트다. CSE 출력을 보면 acs-mirror.azureedge.net 에서 kubernetes-node-linux-amd64.tar.gz 를 받는 curl 이 프록시를 거치지 않고 \"Trying 23.73.0.182:443...\" 에서 계속 시간 초과됐다. 결국 \"Error: CSE has been running for 806 seconds, exceeding the limit of 780 seconds.\" 를 남기고 exit 31 로 끝났다.\n\nUbuntu 와 AzureLinux 이미지 모두에서 재현됐다. 같은 AKS 버전에 202507.* 이미지를 쓰거나, 202508.* 이미지라도 AKS 1.31.9 나 1.31.10 을 쓰면 문제가 없었다. 202507.* 스냅숏으로 되돌리면 프로비저닝이 다시 성공했다. 다른 사용자는 AKS v1.32.4 에서 202507.21.0 이미지는 잘 됐지만, Reconcile 뒤 AKS 가 202508.06.0 을 쓰려다 실패해 클러스터가 Failed 상태가 됐다고 보고했다.\n\n처음 보고한 사용자는 202508.* 이미지에서 부트스트랩 초기에 프록시 환경 변수가 읽히지 않는다고 의심했다. 의심한 곳은 /etc/environment 를 읽는 부분, CSE 의 systemd 유닛 환경, curl 빌드나 설정, NO_PROXY 불일치였다."},"updated_at":"2026-11-10T00:00:36.097154Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0147","org_slug":"microsoft"}