{"id":"IL-0521","org":"Jenkins project","date":"2021-06-02","docs":["https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals","https://docs.microsoft.com/en-us/azure/aks/update-credentials"],"title":{"en":"AKS pods could not mount volumes and new nodes got no CNI network interface after the cluster service principal expired","ko":"AKS 클러스터의 Azure 서비스 주체 자격 증명이 만료돼 파드가 볼륨을 마운트하지 못함"},"domain":["kubernetes","azure"],"impact":{"scope":"Pods with persistent volumes could not be scheduled from 18:02 UTC on 2 June to 15:30 UTC on 3 June, failing builds on trusted.ci.jenkins.io, infra.ci.jenkins.io and release.ci.jenkins.io; during the node restarts ldap.jenkins.io was down for two minutes and plugins.jenkins.io returned HTTP/500 on 33% of requests","users":"unknown","region":"unknown"},"review":{"written_by":"session","reviewed_at":null,"reviewed_by":null},"lessons":null,"related":[],"sources":[{"url":"https://github.com/jenkins-infra/documentation/blob/main/postmortem/20210602-AKS-incident.md","kind":"github","archived":null}],"summary":{"en":"AKS nodes use the cluster's Azure Service Principal credential to authenticate to the Azure API, which gives them the rights to mount file system volumes such as Azure Blob or CIFS, to use private network access and to create and delete Azure load balancers. The Jenkins infrastructure cluster's credential expired at 17:53 UTC on 2 June 2021. From 18:02 UTC pods could not mount volumes and scaled-up nodes could not get a network virtual interface from the CNI, so pods with persistent volumes could not be scheduled and builds using them failed on trusted.ci.jenkins.io, infra.ci.jenkins.io and release.ci.jenkins.io, including the LTS release process.\n\nThe error was found in the AKS UI console during the investigation of the LTS 2.289.1 release problem. At 15:15 UTC on 3 June the infrastructure team renewed the service principal credential. Resetting it requires a full restart of the nodes, which AKS carried out automatically with the standard cordon, drain, update and reboot process, and the operation could not be stopped. The restart made ldap.jenkins.io unavailable for two minutes and plugins.jenkins.io answer HTTP/500 on 33% of requests. By 16:35 UTC every operation had finished, all Kubernetes-hosted applications had restarted and no more errors showed in logs or metrics. One engineer did not have the full Azure authorisation needed to reset the service principal, so another team member did the reset.","ko":"Jenkins 인프라의 AKS 노드는 Azure 서비스 주체 자격 증명으로 Azure API 에 인증한다. 노드는 이 인증으로 Azure Blob 이나 CIFS 같은 파일 시스템 볼륨을 마운트하고, 사설 네트워크에 접근하고, Azure 로드 밸런서를 만들고 지운다. 이 자격 증명이 2021년 6월 2일 17:53 UTC 에 만료됐고, 9분 뒤인 18:02 UTC 부터 파드가 볼륨을 마운트하지 못하고 새 노드가 CNI 에서 네트워크 가상 인터페이스를 받지 못했다. 영구 볼륨을 쓰는 파드가 스케줄되지 못해 trusted.ci.jenkins.io, infra.ci.jenkins.io, release.ci.jenkins.io 의 빌드가 실패했고, LTS 2.289.1 릴리스 과정도 영향을 받았다.\n\n6월 3일 15:15 UTC 에 인프라 팀이 서비스 주체 자격 증명을 갱신했다. 한 엔지니어에게는 Azure 에서 서비스 주체를 재설정할 권한이 모두 있지는 않아, 권한이 있는 다른 팀원이 재설정했다. 서비스 주체를 재설정하면 노드를 전부 재시작해야 한다. AKS 는 표준 절차인 cordon, drain, 업데이트, 재부팅 순서로 재시작을 자동으로 진행했고, 이 작업은 중간에 멈출 수 없었다. 재시작 동안 ldap.jenkins.io 가 2분 동안 내려갔고 plugins.jenkins.io 는 요청의 33% 에 HTTP/500 을 냈다. 16:35 UTC 에 모든 작업이 끝났고, 쿠버네티스 위의 애플리케이션이 모두 다시 시작됐으며 로그와 지표에서 오류가 더 보이지 않았다."},"trigger":{"en":"The Azure Service Principal credential of the AKS cluster expired at 17:53 UTC on 2 June 2021.","ko":"2021년 6월 2일 17:53 UTC 에 AKS 노드가 Azure API 인증에 쓰는 Azure 서비스 주체 자격 증명이 만료됐다."},"severity":"unknown","symptoms":["credentials-unavailable","pod-stuck-container-creating"],"timeline":{"detected_after":null,"resolved_after":"22h 42m"},"date_kind":"incident","detection":{"en":"The error behind the failures was found in the AKS UI console while the team investigated the root cause of the LTS 2.289.1 release problem.","ko":"LTS 2.289.1 릴리스 문제의 근본 원인을 조사하던 엔지니어가 AKS 콘솔 화면에서 오류를 확인했다."},"components":["cluster-cloud-identity","persistent-volume","cni-plugin","node-pool"],"root_cause":"certificate-expiry","remediation":[{"text":{"en":"Renewed the AKS cluster's Azure Service Principal credential, which made AKS restart all nodes automatically","ko":"인프라 팀이 서비스 주체 자격 증명을 갱신했다. 그러자 AKS 가 모든 노드를 재시작하는 작업을 자동으로 시작했고, 이 작업은 멈출 수 없었다."}}],"action_items":[{"text":{"en":"Add an automatic PagerDuty check that alerts a week before the service principal expires, as is done for certificates","ko":"인증서 만료 점검처럼, 서비스 주체 만료 일주일 전에 PagerDuty 알림을 울리는 자동 점검을 더한다."}},{"text":{"en":"Keep a team-level calendar for manual operations such as resetting a credential","ko":"자격 증명 재설정 같은 수동 작업 일정을 적어 둘 팀 공용 캘린더를 마련한다."}},{"text":{"en":"Consider managed identities, which renew automatically, instead of the service principal","ko":"서비스 주체 대신 자동으로 갱신되는 Azure managed identity 를 쓰는 방안을 검토한다."}}],"contributing":["monitoring-blind-spot"],"recurrence_of":null,"symptoms_text":{"en":"From 18:02 UTC on 2 June 2021, the Jenkins infrastructure AKS cluster logged errors about pods that were unable to mount volumes and about scaled-up nodes that were unable to obtain a network virtual interface from the CNI.\n\nPods with a Persistent Volume could not be scheduled, so builds that used a pod with a PVC failed on trusted.ci.jenkins.io, infra.ci.jenkins.io and release.ci.jenkins.io. The errors also hit the LTS release process for 2.289.1, and the cause was found in the AKS UI console while the team investigated that release problem: the cluster's Azure Service Principal credential had expired at 17:53 UTC.\n\nRenewing the credential at 15:15 UTC on 3 June started an automatic operation on the AKS cluster that could not be stopped and restarted all nodes. During the restart ldap.jenkins.io was unavailable from 15:17 to 15:19 UTC, and plugins.jenkins.io answered HTTP/500 on 33% of requests until 16:35 UTC.","ko":"2021년 6월 2일 18:02 UTC 부터 Jenkins 인프라의 AKS 클러스터에서 파드가 볼륨을 마운트하지 못한다는 오류와, 스케일 업으로 늘어난 노드가 CNI 에서 네트워크 가상 인터페이스를 받지 못한다는 오류가 나타나기 시작했다.\n\n영구 볼륨이 붙은 파드는 스케줄되지 못했다. trusted.ci.jenkins.io, infra.ci.jenkins.io, release.ci.jenkins.io 에서 PVC 를 쓰는 파드로 도는 빌드가 6월 3일 15:30 UTC 까지 실패했고, LTS 2.289.1 릴리스 과정도 이 문제에 걸렸다.\n\n자격 증명을 갱신하자 AKS 가 모든 노드를 재시작했고, 그동안 다른 서비스도 흔들렸다. ldap.jenkins.io 는 6월 3일 15:17 UTC 부터 15:19 UTC 까지 내려가 있었고, plugins.jenkins.io 는 15:15 UTC 부터 16:35 UTC 까지 요청의 33% 에 HTTP/500 을 냈다."},"updated_at":"2026-11-14T12:34:16.403513Z","url":"https://benchlet.com/incidentlib/app/cases/IL-0521","org_slug":"jenkins-project"}