Почему при попытке зарегистрировать gitlab-runner возникает ошибка о ненадлежащем сертификате?

Добрый день! 

У меня две машины: на одной установлен Git, а вторая пока пустая. На первой машине с Git я успешно зарегистрировал GitLab Runner, также все прошло хорошо и на второй пустой машине. Теперь я хочу зарегистрировать Runner в Docker, следуя инструкции:

```bash
docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
```

Это я делаю на машине с Git. Убедился, что сертификаты действительные, так как регистрация первых двух прошла успешно.

Однако у меня возникли проблемы при регистрации Runner, и система выдает следующие сообщения:

<blockquote>
WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see <a href="https://docs.gitlab.com/ee/ci/runners/new_creation_workflow" rel="nofollow">https://docs.gitlab.com/ee/ci/runners/new_creation...</a>
ERROR: Registering runner... failed                 runner=GR1348BvB3rj status=couldn't execute POST against <a href="https://viraaaa.su/git/api/v4/runners" rel="nofollow">https://viraaaa.su/git/api/v4/runners</a>: Post "<a href="https://viraaaa.su/git/api/v4/runners" rel="nofollow">https://viraaaa.su/git/api/v4/runners</a>": tls: failed to verify certificate: x509: certificate has expired or is not yet valid: current time 2024-09-19T21:57:34Z is after 2022-12-09T20:36:56Z
PANIC: Failed to register the runner.    
</blockquote>

При проверке сертификата в Docker с помощью команды:

```bash
openssl s_client -crlf -connect viraaaaa.su:443
```

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

```bash
curl -v https://virtaaaaa.su/git
```

сертификат демонстрирует даты, и они актуальны для рабочего сертификата.

Можете помочь разобраться с этой проблемой?
  • 19 сентября 2024 г. 22:13
Ответы на вопрос 2
Судя по вашему сообщению, проблема заключается в том, что GitLab Runner, запущенный в контейнере Docker, не может правильно проверить сертификат вашего сервера. Вот несколько шагов, которые могут помочь вам решить эту проблему:

1. **Проверьте время и дату на машине с Docker**: Убедитесь, что время и дата на машине, где вы запускаете Docker, правильно синхронизированы. Если времени не хватает или оно неправильное, это может привести к ошибкам проверки сертификата.

   Выполните следующие команды, чтобы проверить текущее время:
   ```bash
   date
   ```

   Если время неверно, вам нужно его скорректировать. Вы можете использовать `ntp`, `systemd-timesyncd` или другую утилиту для синхронизации времени.

2. **Проверка сертификата в Docker-контейнере**: Так как вы используете Docker, важно удостовериться, что окружение контейнера имеет доступ к правильным корневым сертификатам (CA). Иногда базовый образ Docker может не содержать актуальные сертификаты.

   Попробуйте выполнить следующую команду в контейнере Docker, чтобы проверить сертификаты:
   ```bash
   docker run --rm -it --entrypoint /bin/sh gitlab/gitlab-runner
   ```
   После этого выполните в контейнере:
   ```bash
   openssl s_client -connect viraaaaa.su:443
   ```

3. **Установка корневых сертификатов**: Если в контейнере отсутствуют правильные сертификаты, вы можете установить их. Например, для образа на основе Debian или Ubuntu можно выполнить следующие команды внутри контейнера:
   ```bash
   apt-get update && apt-get install -y ca-certificates
   update-ca-certificates
   ```

4. **Тестирование с помощью cURL**: Убедитесь, что вы можете использовать cURL внутри контейнера. Например,
   ```bash
   curl -v https://viraaaaa.su/git
   ```
   Если вы видите ошибки, касающиеся сертификатов, это подтверждает, что проблема в сертификатах в контейнере.

5. **Проверка конфигурации GitLab**: Убедитесь, что ваш GitLab настроен правильно и действительно использует валидный сертификат. Также проверьте конфигурацию GitLab на предмет наличия любых ошибок, которые могут вести к проблемам с TLS.

6. **Обновление GitLab Runner**: Попробуйте обновить образ GitLab Runner, чтобы убедиться, что вы используете последнюю версию, исправляющую известные проблемы.

Если вы попробовали все вышеперечисленное и проблема все еще сохраняется, стоит рассмотреть возможность временного использования отключения проверки сертификатов (не рекомендуется для продакшн окружений). В GitLab Runner это можно сделать, добавив флаг `--tls-ca-file` с указанием пути к вашему файлу корневого сертификата.

Если проблема не устраняется, пожалуйста, уточните детали (например, вывод команд и ошибки), и мы постараемся помочь вам дальше.
Доки по настройке с самоподписанными сертификатами пробовали читать? 
https://docs.gitlab.com/runner/configuration/tls-s...
Кратко - окружение докер, где вы запускаете runner - должно доверять CA, выпустившему сертификат gitlab или окружению нужно передать опцию пропуска проверки сертификатов\приема любых сертификатов.
Похожие вопросы