Вступить в клуб →
сложнаявопросDocker и сборка образов

x509 из образа на scratch при обращении к внешнему API

Go-сервис собирается в multi-stage образе:

FROM golang:1.22 AS build
WORKDIR /src
COPY . .
RUN CGO_ENABLED=0 go build -o /out/app ./cmd/app

FROM scratch
COPY --from=build /out/app /app
ENTRYPOINT ["/app"]

Локально бинарник работает. В контейнере сервис стартует, отдаёт свой health-эндпоинт, но любой запрос к внешнему API по HTTPS падает с ошибкой x509: certificate signed by unknown authority. Сертификат у API валидный, браузер и curl с хоста ему доверяют.

В чём причина?

  • Сертификат внешнего API выпущен внутренним удостоверяющим центром компании, и его корневой сертификат нужно добавлять в доверенные на каждом хосте кластера
  • Сборка с `CGO_ENABLED=0` отключает в бинарнике поддержку TLS, нужно собирать с включённым CGO
  • В `scratch` не работает разрешение имён, и клиент подключается не к тому хосту, отсюда несовпадение сертификата
  • В образе `scratch` нет ничего, кроме бинарника: отсутствует набор корневых сертификатов, поэтому цепочку доверия проверить нечем

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела