Помилка підключення GitLab Agent: Unauthorized
Не вдаючись до подробиць, як саме і чому все організовано, доступ здійснюється по наступному ланцюжку:
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";
}
|
Авторизація включена, все працює коректно.
Оригінальний пост на SecOps.it Blog • Помилка підключення GitLab Agent: Unauthorized