Загрузка образов в Kubernetes без паролей с Artifact Keeper

habrahabr.ru · culture
Full story

Artifact Keeper is presented as a way to load images in Kubernetes without passwords. Every new cluster brings the same routine: a registry password must be copied into every namespace that pulls private images, and repeated during rotation. Clusters are created dynamically, so the routine never ends, and each copy of the password can expire or leak. In Kubernetes 1.34 and later, kubelet can pass the ServiceAccount token of the pod whose image is being pulled to a plugin.

С каждым новым кластером начинается одна и та же рутина: пароль от реестра нужно скопировать в каждый namespace, где будут загружать приватные образы, и повторить это при ротации. Кластеры создаются динамически, так что рутина не кончается, а в каждой копии пароль может протухнуть или утечь. В Kubernetes 1.34+ есть выход: kubelet может передать плагину токен ServiceAccount пода, для которого загружают образ, а плагин обменяет его в реестре на короткоживущие учётные данные только на чтение. Токен ServiceAccount выпускается для конкретного пода на ограниченное время и не лежит ни в одном манифесте. Реестр сам решает, каким токенам верить. Это ближе к zero trust: у пода нет долгоживущего секрета, который можно украсть и использовать из другого места. Схема работает, но при отказе причину трудно найти. Под переходит в ImagePullBackOff , а в events виден лишь общий ответ реестра: failed to resolve reference ... unexpected status from HEAD request. Настоящую причину пишет kubelet, и она есть только в его журнале на ноде: ak-kubelet-provider: https://ak.test: 401 CI JWT did not match any identity mapping Эта строка появляется не сразу: сначала нужно настроить kubelet, права нод и сам реестр. Плагин написал я для реестра Artifact Keeper, и все примеры взяты с моего тестового кластера. Читать далее

Read full article → Compare