Я сгенерировал сертификат 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 отвечает за получение образов при создании модуля?
Я обнаружил решение. Проблема актуальна для 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
Установите сертификаты корневого центра сертификации на сервере. Вот и все - теперь ошибка должна исчезнуть. Если вы не знаете корневой ЦС, откройте URL-адрес, который выдает ошибку, в браузере (например, Chrome). Щелкните значок замка рядом с URL-адресом и выберите Сертификат (действительный).
Ссылка:
https://docs.docker.com/registry/insecure/
https://writeabout.net/2020/03/25/x509-certificate-signed-by-unknown- власть /
Убедитесь, что вы добавили сертификаты, переместив файл сертификата корневого ЦС в /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 выполняет следующие шаги:
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