#ssl #cacerts #earthly
Вопрос:
Я хотел использовать earth в корпоративной сети, которая использует SSL-тестирование, которое выдает самозаверяющие сертификаты. У меня есть пользовательский файл ca-cert pem, который я успешно использую с другими инструментами и цепочками инструментов, такими как python, curl и т. Д.
Однако я не могу настроить его с помощью земли. В документации говорится , что это можно сделать в конфигурации на земле $HOME/.earthly/config.yml
, поэтому я последовал ей, и мой файл конфигурации выглядит так
global:
buildkit_additional_args:
- "-v"
- "/Users/maca/.config/corporate/cert/cacerts"
Независимо от того, что я пытаюсь, я получаю эту ошибку
ongoing |
internal | --> GIT CLONE https://github.com/earthly/hello-world.git
internal | --> docker-image://docker.io/alpine/git:v2.30.1
internal | [ ] resolve docker.io/alpine/git:v2.30.1 ... 0%
internal | fatal: unable to access 'https://github.com/earthly/hello-world.git/': SSL certificate problem: self signed certificate in certificate chain
internal | WARN: (GIT CLONE https://github.com/earthly/hello-world.git) error fetching default branch for repository https://github.com/earthly/hello-world.git: exit status 128
internal | Completed in 121.889053ms
internal | WARN: Canceled
internal | Completed in 122.010694ms
internal | [██████████] resolve docker.io/alpine/git:v2.30.1 ... 100%
Summary of timing information
Note that the times do not include the expansion of commands like BUILD, FROM, COPY (artifact).
internal | () 243.899747ms
===============================================================
Total 243.899747ms
Total (real) 1m15.652038067s
Error stack trace:
github.com/moby/buildkit/util/stack.Enable
github.com/moby/buildkit@v0.8.2-0.20210129065303-6b9ea0c202cf/util/stack/stack.go:77
github.com/moby/buildkit/util/grpcerrors.FromGRPC
github.com/moby/buildkit@v0.8.2-0.20210129065303-6b9ea0c202cf/util/grpcerrors/grpcerrors.go:188
github.com/moby/buildkit/util/grpcerrors.UnaryClientInterceptor
github.com/moby/buildkit@v0.8.2-0.20210129065303-6b9ea0c202cf/util/grpcerrors/intercept.go:41
google.golang.org/grpc.(*ClientConn).Invoke
google.golang.org/grpc@v1.38.0/call.go:35
github.com/moby/buildkit/api/services/control.(*controlClient).Solve
github.com/moby/buildkit@v0.8.2-0.20210129065303-6b9ea0c202cf/api/services/control/control.pb.go:1321
github.com/moby/buildkit/client.(*Client).solve.func2
github.com/moby/buildkit@v0.8.2-0.20210129065303-6b9ea0c202cf/client/solve.go:215
golang.org/x/sync/errgroup.(*Group).Go.func1
golang.org/x/sync@v0.0.0-20210220032951-036812b2e83c/errgroup/errgroup.go:57
runtime.goexit
runtime/asm_amd64.s:1371
Похоже, что он игнорирует мой файл cacerts. Кто — нибудь знает, как это решить?
Ответ №1:
Вам нужно будет сделать больше, чем просто смонтировать каталог сертификатов; Buildkit не собирает их. Чтобы указать пользовательские сертификаты для реестра, в документации, которую вы связали, подробно описано, как можно использовать пользовательский самозаверяющий сертификат с отдельным реестром Docker, а не в этом более общем случае во всей сборке. Вы можете использовать эти документы, если вам нужно нажать или извлечь из реестра с помощью пользовательских сертификатов. Не забудьте указать дополнительную конфигурацию, buildkit_additional_config
если это необходимо настроить в вашей ситуации.
Теперь перейдем к вопросу о том, почему hello-world
это не удается. GIT CLONE
Команда использует git
под капотом. Хотя git
на вашем локальном компьютере может быть настроено использование этих пользовательских сертификатов, git
внутренняя сборка здесь отличается и не использует одну и ту же конфигурацию сертификата. Вам нужно будет ввести сертификаты вручную через a COPY
или с помощью a --secret
/ --secret-file
/ --build-arg
, чтобы сделать их доступными, в зависимости от вашего варианта использования.
В наших модульных тестах есть несколько примеров, описывающих этот вариант использования. Здесь используется один из них с пользовательским клоном по протоколу HTTPS с использованием пользовательского сертификата; и вот как мы добавляем пользовательский сертификат в сборку.