Linux

Использование частного Docker-регистра в Kubernetes: пошаговое руководство

В этом руководстве вы научитесь создать частный Docker-регистр, настроить аутентификацию в Kubernetes и развернуть приложения из этого реестра.

Обновлено 9 июля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Kubernetes 1.24+Docker 20.10+Ubuntu 22.04

Введение / Зачем это нужно

Частный Docker-регистр позволяет хранить и распространять образы внутри корпоративной инфраструктуры, повышая безопасность и контроль версий. В Kubernetes использование собственного реестра устраняет зависимость от публичных Docker Hub или Docker Hub Mirror, а также упрощает интеграцию с CI/CD-пайплайнами.

Требования / Подготовка

  • ОС Linux (например, Ubuntu 22.04) с установленным Docker (≥20.10) и kubectl (≥1.24).
  • Доступ к сети, где можно запустить контейнер реестра (обычно порт 5000).
  • Регистрационные данные для доступа к реестру (имя пользователя, пароль).
  • Базовые знания работы с Kubernetes-манифестами.

Пошаговая инструкция

Шаг 1: Установка и запуск частного реестра

Запустите стандартный Docker-регистр в режиме демона, чтобы он был доступен по хосту или внутренним сервисам кластера.

docker run -d \
  --restart=always \
  --publish 5000:5000 \
  --volume $(docker info --format '{{.DockerRootDir}}/registry:/var/lib/registry') \
  registry:2

Команда создает контейнер, который хранит образы в том же файловом хранилище, что и локальный Docker-демон.

Шаг 2: Создание секрета аутентификации в Kubernetes

Сгенерируйте секрет Docker в кластере, используя учетные данные реестра.

kubectl create secret docker-registry my-registry-secret \
  --docker-server=https://registry.example.com:5000 \
  --docker-username=youruser \
  --docker-password=yourpassword \
  --docker-email=you@example.com

Секрет кодируется в base64 и хранится в namespace default (или указанном вами).

Шаг 3: Добавление секрета в узлы или Pod

Укажите imagePullSecrets в манифесте Pod (или в сервисном аккаунте), чтобы поды могли извлекать секреты из Kubernetes.

apiVersion: v1
kind: Pod
metadata:
  name: myapp
spec:
  containers:
  - name: app
    image: registry.example.com:5000/myapp:latest
  imagePullSecrets:
  - name: my-registry-secret

Шаг 4: Использование реестра в манифесте Pod

Установите URL-адрес образа, который указывает на приватный реестр, а не на публичный Docker Hub. Синтаксис тот же, что и для любого репозитория Docker.

image: registry.example.com:5000/myapp:latest

Шаг 5: Интеграция с CI/CD

Добавьте учетные данные реестра в вашу CI/CD-систему, чтобы автоматически собирать и отправлять образы в приватный реестр.

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Build and push
        env:
          REGISTRY: registry.example.com:5000
          USERNAME: ${{ secrets.REGISTRY_USER }}
          PASSWORD: ${{ secrets.REGISTRY_PASS }}
        run: |
          echo "$PASSWORD" | docker login $REGISTRY --username $USERNAME --password-stdin
          docker build -t $REGISTRY/myapp:latest .
          docker push $REGISTRY/myapp:latest

Проверка результата

  1. Проверьте, что реестр работает: curl http://registry.example.com:5000/v2/_catalog.
  2. Проверьте, что под получил секрет: kubectl get pod myapp -o yaml | grep imagePullSecrets.
  3. Просмотрите логи пода: kubectl logs myapp. Если образ успешно загружен, в логах должна появиться запись о старте контейнера.

Возможные проблемы

  • Неверный пароль или имя пользователя – Проверьте данные для входа в реестр и корректность секрета в Kubernetes.
  • ImagePullBackoff – Убедитесь, что URL-адрес образа соответствует секрету, а DNS-имя реестра разрешается из подов.
  • Недоступен порт 5000 – Убедитесь, что контейнер реестра запущен (docker ps) и сетевое правило позволяет подключение.
  • Недостаточные привилегии – Запустите под с ServiceAccount, имеющим права на чтение секретов в необходимом namespace.

Если проблема сохраняется, проверьте логи контроллера управления контейнерами (kubectl logs -n kube-system <контроллер>) для выявления причин неудачной попытки извлечения образа.

Часто задаваемые вопросы

Как создать секрет для приватного реестра в Kubernetes?
Почему поды не могут получить доступ к приватному реестру?
Как настроить CI/CD для использования приватного реестра?

Полезное

Установка и запуск частного реестра
Создание секрета аутентификации в Kubernetes
Добавление секрета в узлы или Pod
Использование реестра в манифесте Pod
Интеграция с CI/CD

Эта статья помогла вам решить проблему?