Получение «x509: сертификат, подписанный неизвестным центром» в GKE при извлечении образа (частный реестр) при создании модуля

Я сгенерировал сертификат CA, а затем выпустил на его основе сертификат для частного реестра, расположенного в том же кластере GKE. Поместите сертификаты сервера в частный реестр, а сертификат CA - на все узлы GKE и выполните:

update-ca-certificates && systemctl restart docker

Образы создаются и помещаются в частный реестр без проблем. Когда модуль пытается вытащить изображение из репозитория, я получаю сообщение об ошибке:

x509: certificate signed by unknown authority

Также я пытался поместить сертификат CA в каталог docker certs.d (10.3.240.100:3000 - IP адрес частного реестра) и перезапустите докер на каждом узле кластера GKE, но это тоже не помогает:

/etc/docker/certs.d/10.3.240.100:3000/ca.cert

Как решить эту проблему? Правильно ли я понимаю, что докер узлов GKE отвечает за получение образов при создании модуля?

0
задан 2 June 2021 в 14:49
3 ответа

Я обнаружил решение. Проблема актуальна для Kubernetes версии 1.19+ и COS / образов Ubuntu на основе containerd для узлов GKE. До версии 1.19 Kubernetes использовал Docker для создания образов, но теперь он использует containerd . Более подробную информацию можно найти в официальной документации Google Cloud .

Вам необходимо создать и поместить сертификат CA на каждый узел GKE. Здесь вы можете найти ответ, как это сделать правильно https://stackoverflow.com/a/67724696/3319341 .

Но для решения containerd вы должны заменить команду

nsenter --target 1 --mount systemctl restart docker

на

nsenter --target 1 --mount systemctl restart containerd

Более подробный ответ: https://stackoverflow.com/a/67990395/3319341

0
ответ дан 28 July 2021 в 14:39

Установите сертификаты корневого центра сертификации на сервере. Вот и все - теперь ошибка должна исчезнуть. Если вы не знаете корневой ЦС, откройте URL-адрес, который выдает ошибку, в браузере (например, Chrome). Щелкните значок замка рядом с URL-адресом и выберите Сертификат (действительный).

Ссылка:

https://docs.docker.com/registry/insecure/

https://writeabout.net/2020/03/25/x509-certificate-signed-by-unknown- власть /

0
ответ дан 28 July 2021 в 14:39

Убедитесь, что вы добавили сертификаты, переместив файл сертификата корневого ЦС в /usr/local/share/ca-certificates, а затем выполнив sudo update-ca-certificates.

Первый шаг для устранения проблемы - перезапустить docker, чтобы система могла обнаружить изменения в сертификатах ОС. В docker есть дополнительное место, которое мы можем использовать, чтобы доверять отдельным CA сервера реестра. Сертификат CA должен быть помещен в:

/etc/docker/certs.d/<docker registry>/ca.crt

Если нам нужно включить номер порта, мы должны указать его в теге изображения. Например:

/etc/docker/certs.d/my-registry.example.com:5000/ca.crt

Если вышеописанное решение не устраняет проблему, необходимо выполнить следующие шаги -

Ошибки X509 обычно указывают на то, что вы пытаетесь использовать самоподписанный сертификат без правильной настройки демона Docker

1: Создайте файл /etc/docker/daemon.json и добавьте insecure-registries

{
“insecure-registries” : [“docker.domain.com:3000”]
}

Замените "docker.domain.com" на имя хоста вашего экземпляра реестра Docker, а порт "3000" на порт, на котором работает ваш реестр Docker.

При включенных незащищенных реестрах Docker выполняет следующие шаги:

  • Сначала попробуйте использовать HTTPS.
  • Если HTTPS доступен, но сертификат недействителен, проигнорируйте ошибку о сертификате. Если HTTPS недоступен, вернитесь на HTTP.

2: Перезапустите демон docker, выполнив команду

systemctl restart docker

3: Создайте каталог с тем же именем, что и хост

mkdir -p /etc/docker/certs.d/docker.domain.com

4: Сохраните сертификат во вновь созданном каталоге

ex +'/BEGIN CERTIFICATE/,/END CERTIFICATE/p' <(echo | OpenSSL s_client -show certs -connect docker. domain.com:443) -suq > /etc/docker/certs.d/docker.domain.com/docker_registry.crt

  • Если вы берете образ из частного реестра, убедитесь, что что вы создали секрет, содержащий учетные данные, необходимые для доступ. Также убедитесь, что вы добавили Secret в соответствующее пространство имен.
  • Вам также необходимо установить поле imagePullSecrets на вашем Pod. Это поле указывает Kubernetes, какой секрет он должен использовать при аутентификации в реестре.
0
ответ дан 28 July 2021 в 14:39

Теги

Похожие вопросы