Регистрация бросков gitab-runner не может назначить запрошенный адрес (ubuntu, docker) - PullRequest
0 голосов
/ 23 апреля 2020

Привет всем,

Я боролся с этим уже 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 чтобы отразить текущее состояние после моей работы

1 Ответ

0 голосов
/ 26 апреля 2020

Я нашел рабочую настройку: заметив, что запуск регистр против 192.168.1.100 привел к другой ошибке: разные ошибки для разных целей регистра

Я создал самозаверяющий SSL, используя это руководство , которое включает 192.168.1.100 вместе с treffer-technologies.home-webserver.de. Затем я переместил это в gitlab-runner / config / certs / ca.crt вместо gitlab-runner / config / certs / treffer-technologies.home-webserver.de.crt.

[ v3_ca ]
subjectAltName = @alternate_names

# added manually
# https://stackoverflow.com/questions/21488845/how-can-i-generate-a-self-signed-certificate-with-subjectaltname-using-openssl

[ alternate_names ]

DNS.1 = treffer-technologies.home-webserver.de
DNS.2 = www.treffer-technologies.home-webserver.de
IP    = 192.168.1.100

После этого gitlab-runner поднял сертификат и реестр прошел успешно. Нет необходимости редактировать хосты или добавлять дополнительные сети или ссылки на docker. Я не знаю, если это правильный способ сделать это, но по крайней мере это работает для меня

...