Вопрос или проблема
Когда microk8s развернут, контейнерные образы не могут быть загружены из частного зеркала реестра (используйте harbor). Информация об ошибке ниже:
введите описание изображения здесь
Проблема одна и та же, независимо от того, используете ли вы https или http. Тем не менее, нормально использовать docker или microk8s ctr для прямой загрузки образа:
введите описание изображения здесь
Нормально использовать docker или microk8s ctr для прямой загрузки образа, и хотя образ может быть загружен нормально таким образом, я заметил, что (команда microk8s ctr) скорость загрузки контейнерных образов очень медленная, и теоретически скорость внутри сети должна быть очень быстрой, близкой к гигабиту.
Моя лабораторная среда:
ОС: ubuntu server 24.04
версия harbor: v2.11.2-201d421d
версия microk8s: V1.31.3
используется сертификат CA Windows
# пользовательская конфигурация запуска для MicroK8s
---
version: 0.1.0
extraKubeletArgs:
--cluster-domain: dltornado2.com
--cluster-dns: 10.152.183.10
addons:
- name: dns
- name: hostpath-storage
- name: ingress
- name: nvidia
- name: observability
containerdRegistryConfigs:
# Используйте `https://harbor.dltornado2.com/dockerhub_proxy` как зеркало реестра DockerHub.
docker.io: |
[host."harbor.dltornado2.com/dockerhub_proxy"]
capabilities = ["pull", "resolve"]
# override_path = true
# ca = "/home/ubuntu/certs.d/docker.io/ca.crt"
# Используйте `https://hub.geekery.cn` как зеркало реестра DockerHub.
#docker.io: |
# [host."https://hub.geekery.cn"]
# capabilities = ["pull", "resolve"]
# override_path = true
# Используйте `https://harbor.dltornado2.com/quay_proxy` как зеркало реестра quay.
quay.io: |
[host."https://harbor.dltornado2.com/quay_proxy"]
capabilities = ["pull", "resolve"]
# override_path = true
# ca = "/home/ubuntu/certs.d/quay.io/ca.crt"
# Используйте `https://registry.aliyuncs.com/google_containers` как зеркало реестра gcr.
registry.k8s.io: |
[host."https://k8s.m.daocloud.io"]
capabilities = ["pull", "resolve"]
# override_path = true
# ca = "/home/ubuntu/certs.d/registry.k8s.io/ca.crt"
#registry.k8s.io: |
# [host."https://k8s.m.daocloud.io"]
# capabilities = ["pull", "resolve"]
#registry.k8s.io: |
# [host."https://registry.aliyuncs.com/google_containers"]
# capabilities = ["pull", "resolve"]
#Containerd будет использовать этот прокси при загрузке образов из верхних репозиториев
У меня ушла неделя, и я все еще не решил проблему.
Ответ или решение
Проблема с загрузкой образов контейнеров из локального реестра при использовании MicroK8s и Harbor
Установив MicroK8s в вашем учебном окружении с операционной системой Ubuntu Server 24.04 и реестром Harbor версии v2.11.2, вы столкнулись с серьезной проблемой: контейнерные образы не могут быть загружены из частного реестра, даже несмотря на то, что загрузка возможна с помощью таких инструментов, как Docker или microk8s ctr. Давайте проанализируем возможные причины этой проблемы и предложим решения.
Основные причины проблемы
-
Настройки конфигурации Containerd:
Проверьте, корректно ли настроены параметры в файле конфигурацииcontainerd
. Судя по вашему коду конфигурации, вы указали различные реестры, однако может быть проблема с тем, как именно они связаны с основным реестром Harbor. Вы можете протестировать возможность соединения с реестром, перемещая блоки и меняя параметры. -
Проблемы с SSL-сертификатами:
Отсутствие корректных SSL-сертификатов может быть причиной, по которой MicroK8s не может установить безопасное соединение с Harbor. Убедитесь, что CA-сертификат, выданный Windows CA, правильно установлен в системе. Если ваш реестр использует самоподписанные сертификаты, добавьте их в конфигурациюcontainerd
.# Пример добавления CA [host."harbor.dltornado2.com"] ca = "/home/ubuntu/certs.d/harbor/ca.crt"
-
Истекшие или неверные учетные данные:
Убедитесь, что у MicroK8s есть доступ к правильным учетным данным для доступа к реестру. Проверьтеkubeconfig
, чтобы убедиться, что создан секрет для хранения учетных данных необходимого реестра. -
Сеть и DNS:
Проверьте сетевую конфигурацию. Убедитесь, что DNS-сервер правильно настроен и может разрешать имя вашего реестра. Возможно, необходимо добавить соответствующие записи в/etc/hosts
или настроить внешний DNS. -
Настройки сетевого бриджа в MicroK8s:
Возможно, что настройки сетевого бриджа нарушают соединение. Пересмотрите настройки сетевого интерфейса и убедитесь, что локальные политики безопасности не блокируют трафик между MicroK8s и вашим реестром Harbor.
Решения и рекомендации
-
Тестируйте соединение:
Используйте командуcurl
для проверки доступности реестра из под контейнеров MicroK8s. Это позволит определить, доступен ли реестр из сети контейнера.microk8s kubectl run -i --tty --rm debug --image=busybox -- sh # Внутри контейнера curl -v https://harbor.dltornado2.com
-
Логирование и диагностика:
Проверьте журналы MicroK8s и контейнера, чтобы выявить проблемы при попытке загрузить образы.microk8s kubectl logs <имя-пода>
-
Исследуйте альтернативные методы:
Если загрузка через MicroK8s ctr идет медленно, рассмотрите использование предварительной загрузки образов в MicroK8s. Например, вы можете предварительно загрузить образы в реестр, а затем использовать стандартные команды Kubernetes для развертывания. -
Обновление компонентов:
Проверьте наличие обновлений для MicroK8s и Harbor. Иногда обновление программного обеспечения может решить известные проблемы и повысить производительность.
Заключение
Решение проблемы с загрузкой контейнерных образов из частного реестра в MicroK8s может потребовать внимательного исследования настроек конфигурации и сетевой инфраструктуры. Простое исправление проблемы может значительно упростить вашу работу с контейнерами и ускорить разработку. Не забудьте сделать резервные копии всех изменений и поддерживать конфигурации в актуальном состоянии.