Мне нужно пройти аутентификацию в частном реестре с помощью самозаверяющего сертификата на этапе сборки облака. Если я выполняю docker login
напрямую, по очевидным причинам, это не срабатывает с error: x509: certificate signed by unknown authority
- все в порядке.
Обычно я решаю подобные проблемы с помощью следующего однострочника:
openssl s_client -showcerts -connect external-registry.io:5000 < /dev/null | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/external-registry.io.crt && \
update-ca-certificates
К сожалению, это не работает в Cloud Build.
name: 'gcr.io/cloud-builders/docker'
env:
entrypoint: 'bash'
args:
- '-c'
- |
openssl s_client -showcerts -connect external-registry.io:5000 < /dev/null | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/external-registry.io.crt && \
update-ca-certificates
echo password | docker login external-registry.io:5000 --username administrator --password-stdin
...
Вышеуказанное не работает, оно не работает с error: x509: certificate signed by unknown authority
.
Интересно, что запуск cloud-builders docker контейнер локально все работает безупречно, как и ожидалось.
git clone https://github.com/GoogleCloudPlatform/cloud-builders.git
cd cloud-builders/docker
docker build -f ./Dockerfile-19.03.8 -t cloudbuilder .
docker run -it --entrypoint /bin/bash cloudbuilder
теперь внутри контейнера:
openssl s_client -showcerts -connect external-registry.io:5000 < /dev/null | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /usr/local/share/ca-certificates/external-registry.io.crt && \
update-ca-certificates
echo password | docker login external-registry.io:5000 --username administrator --password-stdin
Login Succeeded
Любые объяснения и / или обходные пути были бы очень признательны. Как Google эффективно использует контейнеры для создания облаков?
Спасибо и ура!