Помилка підключення 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

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