AKS 는 API 서버 · etcd · kubelet 사이 통신에 쓰는 인증서를 클러스터 생성 시 자체 CA 로 발급한다. 이 인증서는 유효기간이 있고, 만료되면 노드가 API 서버에 붙지 못한다. 교체는 명령 하나로 한다.
az aks rotate-certs --resource-group <리소스그룹> --name <클러스터>
교체 중에는 컨트롤 플레인이 재구성되고 노드가 순차적으로 재등록되므로 중단이 발생한다. 짧게는 몇 분, 노드가 많으면 30분 이상 걸린다. 작업 창을 잡고 진행한다.
교체가 끝나면 기존 kubeconfig 의 클라이언트 인증서가 무효가 되므로 자격 증명을 다시 받는다.
az aks get-credentials --resource-group <리소스그룹> --name <클러스터> --overwrite-existing
kubectl get nodes
만료 시점 확인은 클러스터 속성이 아니라 실제 인증서를 봐야 정확하다.
kubectl config view --raw -o jsonpath='{.users[0].user.client-certificate-data}' \
| base64 -d | openssl x509 -noout -enddate
AKS 는 만료 80일 전부터 자동 갱신을 시도하지만, 클러스터가 멈춰 있었거나 노드가 오래 꺼져 있었다면 자동 갱신이 실패할 수 있다. 90일 이상 정지했던 클러스터는 시작 직후 인증서 상태부터 확인한다.
외부 제품을 Azure 리소스에 붙일 때 UAMI 의 리소스 ID 를 요구하는 경우가 있다. 형식은 다음과 같다.
/subscriptions/<구독 ID>/resourceGroups/<리소스그룹>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<ID 이름>
포털에서는 상단 검색창에 "관리 ID" 를 입력해 목록으로 들어간 뒤, 해당 항목의 개요 화면에서 JSON 보기를 열면 id 필드에 그대로 있다.
CLI 가 빠르다.
az identity show \
--name <ID 이름> --resource-group <리소스그룹> \
--query id -o tsv
구독 전체에서 이름을 모를 때는 목록으로 훑는다.
az identity list --query "[].{name:name, rg:resourceGroup, id:id}" -o table
리소스 ID 와 함께 자주 같이 요구되는 것이 클라이언트 ID(애플리케이션 ID) 와 프린시펄 ID(오브젝트 ID) 다. 셋은 서로 다른 값이므로 어느 것을 요구하는지 확인한다.
az identity show --name <ID 이름> --resource-group <리소스그룹> \
--query "{resourceId:id, clientId:clientId, principalId:principalId}" -o json
역할 할당은 프린시펄 ID 로 한다.
az role assignment create \
--assignee-object-id <프린시펄 ID> --assignee-principal-type ServicePrincipal \
--role "Contributor" --scope /subscriptions/<구독 ID>/resourceGroups/<리소스그룹>