Не удается выполнить аутентификацию K8s Dashboard с помощью OAuth и Google.

Вопрос или проблема

Я настроил компонент oauth-proxy с провайдером Google для защиты определенных приложений в моем кластере, и они доступны только при использовании этой системы аутентификации, среди них – Kubernetes Dashboard.

С настроенным oauth-proxy я создал манифест для создания ресурса Ingress, где объявлен путь аутентификации, который также защищен SSL через Cert Manager.

Кроме того, я создал ресурс Ingress для экспонирования приложения Dashboard под доменом, защищенным SSL.

Когда я получаю доступ к этому домену Dashboard, начинается процесс аутентификации Google, и все выглядит нормально, пока я не перенаправляюсь обратно в Dashboard после аутентификации. В этот момент я получаю экран входа в Dashboard, где меня просят ввести токен доступа.

Поэтому я подозреваю, что где-то на каком-то этапе я упускаю некоторые настройки, так как Dashboard не может распознать, что я прошел аутентификацию.

Мне нужна помощь, спасибо!

Дополнительная информация

Когда я устанавливаю oauth-proxy, я устанавливаю его через helm:

helm repo add oauth2-proxy https://oauth2-proxy.github.io/manifests
helm install oauth2-proxy oauth2-proxy/oauth2-proxy \
  --namespace infrastructure \
  --values ./k8s/infrastructure/oauth2-proxy/installation.yml

С этими значениями в installation.yml:

config:
  clientID: "<GOOGLE_CLIENT_ID>"
  clientSecret: "<GOOGLE_CLIENT_SECRET>"
  provider: "google"
  redirectURL: "<REDIRECT_URL>"
  cookieSecret: "<COOKIE_SECRET>"
extraArgs:
  - --whitelist-domain=app1.example.com
  - --whitelist-domain=dashboard.example.com
  - --whitelist-domain=authentication.example.com
  - --cookie-domain=.example.com
  - --set-authorization-header
  - --pass-authorization-header
  - --pass-user-headers
  - --pass-access-token
  - --set-xauthrequest
service:
  portNumber: 4180

Это ресурс ingress, который я применяю для экспонирования URL-адресов аутентификации:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: oauth2-proxy-ingress
  namespace: infrastructure
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    cert-manager.io/issuer: "letsencrypt-issuer"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - authentication.example.com
      secretName: oauth2-proxy-tls-certificate
  rules:
    - host: authentication.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: oauth2-proxy
                port:
                  number: 4180

Наконец, это ресурс ingress, который экспонирует приложение Dashboard:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard-ingress
  namespace: administration
  annotations:
    cert-manager.io/issuer: "letsencrypt-issuer"
    nginx.ingress.kubernetes.io/rewrite-target: /
    #nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/auth-url: "https://authentication.example.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://authentication.example.com/oauth2/start?rd=$scheme://$host$request_uri"
    nginx.ingress.kubernetes.io/auth-response-headers: "x-auth-request-user,x-auth-request-email,authorization"
spec:
  ingressClassName: nginx
  tls:
    - hosts:
        - dashboard.example.com
      secretName: dashboard-tls-certificate
  rules:
    - host: dashboard.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: kubernetes-dashboard-kong-proxy
                port:
                  number: 443

.

Ответ или решение

Проблемы с аутентификацией Kubernetes Dashboard через OAuth и Google

Ваша ситуация с аутентификацией Kubernetes Dashboard с помощью oauth-proxy и Google как провайдера аутентификации вызывает несколько вопросов. Ниже приведены шаги, которые могут помочь в решении вашей проблемы. Мы рассмотрим каждый аспект конфигурации, и постараемся понять, где может быть ошибка.

1. Проверьте настройки oauth-proxy

Аутентификация Google осуществляется через OAuth2, и здесь важно убедиться, что ваш oauth-proxy правильно настроен. Проверьте следующие параметры в вашем файле installation.yml:

  • clientID и clientSecret: Убедитесь, что указанные значения правильные. Эти параметры выдается Google при регистрации приложения. Если вы не уверены, попробуйте создать новое приложение в Консоли разработчика Google.

  • redirectURL: Убедитесь, что это значение соответствует URL, на который Google перенаправляет после аутентификации. Это должно выглядеть как https://dashboard.example.com/oauth2/callback, где dashboard.example.com — это ваш адрес для доступа к Dashboard.

  • cookieSecret: Убедитесь, что этот параметр задан и это достаточно долгий, случайный и сложный секрет. Это важно для защиты ваших куки.

2. Проверьте ingress ресурсы

Ваши ресурсы Ingress также играют важную роль в правильной аутентификации:

  • Ingress для oauth-proxy: В данном ресурсе вы правильно указали аннотации для обеспечения SSL и перенаправления. Убедитесь, что ваш Ingress контроллер (например, Nginx) правильно настроен и слушает на 443 порту.

  • Ingress для Dashboard: Обратите внимание на аннотации, относящиеся к аутентификации. Ваша аннотация nginx.ingress.kubernetes.io/auth-url должна указывать на правильный путь аутентификации, что вы сделали. Убедитесь, что URL доступен и корректно обрабатывает запросы.

  • auth-signin: Убедитесь, что этот URL правильный. При редиректе он должен возвращать пользователя на страницу аутентификации после попытки доступа к Dashboard.

3. Внимание на заголовки

Вы используете аннотацию nginx.ingress.kubernetes.io/auth-response-headers. Убедитесь, что заголовки, которые вы передаете, действительно нужны Dashboard. В частности, authorization должен содержать токен, полученный от oauth-proxy. Убедитесь, что Dashboard может правильно интерпретировать этот заголовок.

4. Логи и диагностика

Не забудьте изучить логи oauth-proxy и Nginx Ingress. Логи могут дать вам полезные подсказки о проблемах, происходящих во время аутентификации. Если вы видите сообщения об ошибках или предупреждениях, это может указывать на настройки, которые требуют внимания.

5. Проверка с использованием другого клиента

Попробуйте использовать другой браузер или режим инкогнито. Это может помочь проверить, не сохраняются ли старые куки или сессии, которые могли бы повлиять на аутентификацию.

Заключение

Аутентификация через OAuth2 может быть трудной задачей, особенно с интеграцией сторонних провайдеров, таких как Google. Следуя вышеперечисленным рекомендациям, вы сможете выявить, где именно может быть проблема в вашей конфигурации. Убедитесь, что все параметры установлены правильно, и внимайте логам на наличие ошибок. Если проблема не решается, попробуйте обратиться к документации oauth-proxy и Nginx Ingress для более детальной информации по настройкам.

Если вы столкнетесь с дополнительными трудностями, пожалуйста, предоставьте больше информации о логах или ошибках, чтобы можно было провести более углубленный анализ вашей проблемы.

Оцените материал
Добавить комментарий

Капча загружается...