Как заставить oauth2_proxy работать в kubernetes в одном домене для перенаправления обратно в исходный домен, который требовал аутентификации? - PullRequest
2 голосов
/ 20 апреля 2019

Я настраивал кластер kubernetes и хочу защитить панель мониторинга (работает на kube.example.com) за bitly/oauth2_proxy (работает на example.com/oauth2 на изображении a5huynh/oauth2_proxy:latest), так как я хочу повторно использоватьOAuth-прокси для других сервисов у меня будет запущен.Аутентификация работает отлично, но после того, как пользователь войдет в систему, т.е. обратный вызов вернется, они будут отправлены на example.com, где вместо этого они должны быть отправлены на исходный хост kube.example.com, который инициировал поток.Как я могу это сделать?(Я использую nginx-ingress-controller).

Аннотация на прокси-сервере OAuth2:

kubernetes.io/ingress.class: "nginx",
nginx.ingress.kubernetes.io/force-ssl-redirect: "true",
nginx.ingress.kubernetes.io/secure-backends: "true",
nginx.ingress.kubernetes.io/ssl-passthrough: "true"

Аннотация на панели инструментов:

kubernetes.io/ingress.class: "nginx",
nginx.ingress.kubernetes.io/auth-signin: "https://example.com/oauth2/start",
nginx.ingress.kubernetes.io/auth-url: "https://example.com/oauth2/auth",
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS",
nginx.ingress.kubernetes.io/force-ssl-redirect: "true",
nginx.ingress.kubernetes.io/secure-backends: "true",
nginx.ingress.kubernetes.io/ssl-passthrough: "true",
nginx.ingress.kubernetes.io/ssl-redirect: "true"

Я ожидаю перенаправленияна исходный хост kube.example.com после завершения потока OAuth, но отправляется обратно на хост OAuth2 example.com

1 Ответ

1 голос
/ 21 апреля 2019

После поиска я наткнулся на сообщение в блоге о том, как выполнить это в очень простом поместье. К сожалению, я обнаружил, что предоставленный yaml не совсем корректно работал, так как oauth2_proxy никогда не срабатывал из-за того, что nginx перехватывал все запросы (я не уверен, что мой не работал из-за того, что мне нужен URL-адрес oauth-proxy для быть example.com/oauth2, а не oauth2.example.com). Чтобы исправить это, я добавил обратно путь oauth2-proxy к Ingress для прокси, т.е.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: oauth2-proxy
  namespace: default
  annotations:
    kubernetes.io/ingress.class: "nginx"
spec:
  rules:
    - host: example.com
      http:
        paths:
          - backend:
              serviceName: oauth2-proxy
              servicePort: 80
            path: /
          - backend:
              serviceName: oauth2-proxy
              servicePort: 4180
            path: /oauth2

и удостоверился в том, что служба все еще открыта, т.е.

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: oauth2-proxy
  name: oauth2-proxy
  namespace: default
spec:
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: 80
    - name: http-proxy
      port: 4180
      protocol: TCP
      targetPort: 4180
  selector:
    k8s-app: oauth2-proxy

Затем, чтобы защитить сервисы за прокси-сервером oauth, мне просто нужно поместить в аннотации Ingress следующее:

    nginx.ingress.kubernetes.io/auth-url: "https://example.com/oauth2/auth"
    nginx.ingress.kubernetes.io/auth-signin: "https://example.com/oauth2/start?rd=/redirect/$http_host$request_uri"
...