Ошибка подключения GitLab Agent: Unauthorized

Ошибка подключения GitLab Agent 1400x350 kubernetes_gitlab_agent_error.png
Ошибка подключения GitLab Agent

Не вдаваясь в подробности, как именно и почему все организовано, доступ осуществляется по следующей цепочке:

1
Nginx stream ingress <> Main Nginx Frontend <> Nginx Backend inside GitLab instance.

Основной фронтенд управляет поддоменом gitlab, который закрыт для внешнего доступа посредством авторизации auth_basic.


Авторизация на сокете /-/kubernetes-agent/ в самом gitlab происходит через полезную нагрузку json/graphql.
Но основной фронтенд также передает состояние поля $remote_user в сокет.
Соответственно, GitLab пытается выполнить авторизацию на основе Basic, а не на основе параметров самой полезной нагрузки json/graphql.

И мы получаем ошибку:

1
GitLab Agent Server: Unauthorized: Authorization header: expecting Bearer token


Моя самая большая ошибка


Конечно же, второе, что я сделал — отключил авторизацию для моего внешнего IP-адреса.
Это было очевидно, поскольку была указана ошибка Authorization header: Bearer.
Но это ничего не дало. Как я тогда подумал.
После этого было много развертываний, повторных инициализаций, изменений конфигурации.
Но даже это не сработало.


Дьявол кроется в деталях


Невнимание к очевидным деталям привело меня через пару дней к логу Nginx в инстансе GitLab снова.
В журнале я заметил, что мой логин $remote_user из auth_basic передаётся из Frontend, но его там быть не должно, авторизация-то отключена.


Так в чем же ошибка?


Предположим, у вас включена авторизация auth_basic. Браузер отправляет заголовок Authorization: Basic, поскольку вы ввели логин и пароль для подключения.
Вы отключаете авторизацию. Убеждаетесь, что она действительно отключена, например, с помощью curl или wget.
Однако при обновлении страницы или даже открытии новых вкладок для этого сайта браузер продолжает отправлять заголовок авторизации до тех пор, пока вы не закроете и не откроете его снова.
Мне просто надо было перезапустить чёртову Лису!


Решение проблемы

1
2
3
4
5
6
7
8
9
10
11
12
location /-/kubernetes-agent/ {
            proxy_pass http://10.225.0.25:80;
            proxy_set_header Authorization    "";       # Переустанавливаем Authorization Header
            proxy_set_header X-Forwarded-User "";       # Так же $remote_user
            proxy_set_header X-Remote-User    "";       # И X-Remote-User
            proxy_set_header Host             $host;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Real-IP        $remote_addr;
            proxy_http_version 1.1;
            proxy_set_header Upgrade          $http_upgrade;
            proxy_set_header Connection       "upgrade";
}
Подключение GitLab Agent 1400x750 kubernetes-auth-no-error.png
Подключение GitLab Agent

Авторизация включена, все работает корректно.