Привет всем,
Я боролся с этим уже 7 дней и ничего не получаю (только расстроен). Я действительно надеюсь, что кто-то может мне помочь. Пожалуйста, имейте в виду, что я не сетевой эксперт, так как считаю, что проблема заключается здесь.
Проблема:
Попытки зарегистрировать gitlab-runner приводят к этой ошибке: снимок экрана ошибки
Настройка
Все установлено на одном сервере в моей домашней сети. Итак, это
- Laptop accessing the server
Internet - Router (FritzBox) 192.168.1.1 - Server 192.168.1.100
- Other
Сервер работает
- Ubuntu 18.04.4 LTS
- Docker версия 19.03.8, сборка afacb8b7f0
Мой gitlab и gitlab-runner работали несколько месяцев go без https (я полагал, что я являюсь командой из одного человека в моей собственной сети, мне не нужен https). Я использовал docker -compose для запуска gitlab, postgresql и redis и 'normal' docker для запуска gitlab-runner. Это тоже было для меня проблемой, и мне потребовалось некоторое время, чтобы понять, что я должен использовать url = "http://192.168.1.100: 30080 / " , чтобы зарегистрировать бегуна.
Но затем я решил перейти на https с помощью самоподписанного сертификата . Я сделал это потому, что хотел использовать реестр gitlab-buildin docker для ускорения моих сборок, и, как я понимаю, для этого требуется https.
Мне удалось с помощью gitlab. Я могу просматривать свои репозитории, pu sh изменены, создавать проблемы и еще много чего. Но, как видно из заголовка, я не могу зарегистрировать gitlab-runner через https.
docker -compose.yml
Давайте начнем с docker -compose, который запускается postgres, redis, gitlab и теперь также бегун gitlab:
version: '3.7'
services:
postgresql:
restart: always
image: postgres:12-alpine
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
environment:
- POSTGRES_USER=xxxxxxxxxxx
- POSTGRES_PASSWORD=xxxxxxxxxxx
- POSTGRES_DB=xxxxxxxxxxx
volumes:
- /opt/postgresql:/var/lib/postgresql:rw
redis:
restart: always
image: redis:5-alpine
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
gitlab:
image: 'gitlab/gitlab-ce'
restart: always
hostname: 'treffer-technologies.home-webserver.de'
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
links:
- postgresql:postgresql
- redis:redis
environment:
GITLAB_OMNIBUS_CONFIG: |
# postgres
postgresql['enable'] = false
gitlab_rails['db_username'] = "xxxxxxxxxxx"
gitlab_rails['db_password'] = "xxxxxxxxxxx"
gitlab_rails['db_host'] = "postgresql"
gitlab_rails['db_port'] = "5432"
gitlab_rails['db_database'] = "xxxxxxxxxxx"
gitlab_rails['db_adapter'] = 'postgresql'
gitlab_rails['db_encoding'] = 'utf8'
# redis
redis['enable'] = false
gitlab_rails['redis_host'] = 'redis'
gitlab_rails['redis_port'] = '6379'
# nginx
nginx['redirect_http_to_https'] = true
registry_nginx['redirect_http_to_https'] = true
# email
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.gmail.com"
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = "xxxxxxxxxxx"
gitlab_rails['smtp_password'] = "xxxxxxxxxxx"
gitlab_rails['smtp_domain'] = "xxxxxxxxxxx"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
# other
gitlab_rails['gitlab_shell_ssh_port'] = 30022
# https://docs.gitlab.com/omnibus/settings/ssl.html#lets-encrypt-integration
external_url 'https://treffer-technologies.home-webserver.de:30443'
# registry
registry_external_url 'https://treffer-technologies.home-webserver.de:30090'
ports:
# host:container
# both ports must match the port from external_url above
- "30080:30080"
# the mapped port must match ssh_port specified above.
- "30022:22"
# https
- "30443:30443"
# registry
- "30090:30090"
volumes:
- /opt/gitlab/config:/etc/gitlab:rw
- /opt/gitlab/log:/var/log/gitlab:rw
- /opt/gitlab/data:/var/opt/gitlab:rw
depends_on:
- postgresql
- redis
runner:
image: 'gitlab/gitlab-runner:alpine'
restart: always
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "10"
volumes:
- /opt/gitlab-runner/config:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
depends_on:
- gitlab
Как вы видите, URL моего gitlab равен https://treffer-technologies.home-webserver.de: 30443 .
регистр gitlab-runner
А вот регистрационный код:
docker run --rm -t -i -v /opt/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine --debug register \
--non-interactive \
--executor "docker" \
--docker-image alpine:3 \
--url "https://treffer-technologies.home-webserver.de:30443" \
--registration-token "xxxxxxxxxxx" \
--description "gitlab-runner-docker" \
--tag-list "build,test,deploy" \
--locked="false"
, который, при выполнении, приводит к этой ошибке:
Runtime platform arch=amd64 os=linux pid=6 revision=4c96e5ad
version=12.9.0
Checking runtime mode GOOS=linux uid=0
Running in system-mode.
Trying to load /etc/gitlab-runner/certs/treffer-technologies.home-webserver.de.crt ...
Dialing: tcp treffer-technologies.home-webserver.de:30443 ...
ERROR: Registering runner... failed runner=xxxxxxxx status=couldn't execute
POST against https://treffer-technologies.home-webserver.de:30443/api/v4/runners:
Post https://treffer-technologies.home-webserver.de:30443/api/v4/runners:
dial tcp [2001:16b8:a582:1800:314f:5277:9434:77ad]:30443:
connect: cannot assign requested address
PANIC: Failed to register this runner. Perhaps you are having network problems
Согласно Поддерживаемые параметры для самозаверяющих сертификатов Я скопировал тот же сертификат, который создал и использовал для моего gitlab, в / opt / gitlab-runner / config / certs / treffer-technologies.home-webserver .de.crt . Содержимое начинается с ----- BEGIN, поэтому я думаю, что оно закодировано в PEM.
Firewall
ufw неактивен, пока эта проблема не будет решена.
Logs
Насколько я могу судить, процесс регистрации не достигает моего gitlab, так как я не могу найти никаких признаков запроса в журналах gitlab. Вот почему я считаю, что у меня проблема с сетью.
Зондирование контейнера gitlab-runner
Использование docker -compose exe c runner / bin / sh Я узнал, что:
ping gitlab
PING gitlab (172.22.0.5): 56 data bytes
64 bytes from 172.22.0.5: seq=0 ttl=64 time=0.055 ms
64 bytes from 172.22.0.5: seq=1 ttl=64 time=0.105 ms
64 bytes from 172.22.0.5: seq=2 ttl=64 time=0.150 ms
64 bytes from 172.22.0.5: seq=3 ttl=64 time=0.154 ms
64 bytes from 172.22.0.5: seq=4 ttl=64 time=0.151 ms
^C
--- gitlab ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 0.055/0.123/0.154 ms
172.22.0.5 - это точно IP-адрес docker -контейнера gitlab, как и ожидалось. Однако использование register против https://gitlab: 30443 приводит к
Dialing: tcp gitlab:30443 ...
ERROR: Registering runner... failed runner=xxxxxx
status=couldn't execute POST against https://gitlab:30443/api/v4/runners: Post https://gitlab:30443/api/v4/runners: dial tcp: lookup gitlab on 8.8.8.8:53: no such host
PANIC: Failed to register this runner. Perhaps you are having network problems
ping treffer-technologies.home-webserver.de
PING treffer-technologies.home-webserver.de (2001:16b8:a582:1800:314f:5277:9434:77ad): 56 data bytes
ping: sendto: Address not available
Добавление строки
172.22.0.5 treffer-technologies.home-webserver.de
к хостам gitlab-runner-container заставляет эхо-запрос работать, но регистрация по-прежнему приводит к
Trying to load /etc/gitlab-runner/certs/treffer-technologies.home-webserver.de.crt ...
Dialing: tcp treffer-technologies.home-webserver.de:30443 ...
ERROR: Registering runner... failed runner=xxxxxxxx status=couldn't execute POST against https://treffer-technologies.home-webserver.de:30443/api/v4/runners: Post https://treffer-technologies.home-webserver.de:30443/api/v4/runners: dial tcp [2001:16b8:a582:1800:314f:5277:9434:77ad]:30443: connect: cannot assign requested address
PANIC: Failed to register this runner. Perhaps you are having network problems
/ etc / hosts
gitlab-runner docker контейнер
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.22.0.4 0181ad73e31f
# manually added to make ping work
# 172.22.0.5: gitlab-container
172.22.0.5 treffer-technologies.home-webserver.de
хоста / сервера
127.0.0.1 localhost
127.0.1.1 HP-ProDesk-400-G5-Desktop-Mini
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Самозаверяющий сертификат
Я использовал это руководство . В основном я сделал openssl genrsa и использовал treffer-technologies.home-webserver.de и FQDN . Содержание начинается с ----- BEGIN.
Дополнительная информация
Спасибо, что прочитали все это. Если вы хотите помочь и нуждаетесь в дополнительной информации, я предоставлю их как можно быстрее. Спасибо:)
edit: введено описание изображения, опечатки, грамматика (я немец), удалено утверждение, что это мой первый вопрос (не правда, это мой второй), добавлено исследование gitlab-контейнера, изменен ips чтобы отразить текущее состояние после моей работы