Я пытаюсь настроить oauth2_proxy на kubernetes для защиты одного из моих одностраничных приложений, и я использую github в качестве поставщика аутентификации. Я нашел эту ссылку полезной, и я следовал за ней, чтобы выполнить настройку. [https://alikhil.github.io/2018/05/oauth2-proxy-for-kubernetes-services/]
Я создал приложение на github и использовал свое DNS-имя вместо HomePageURL и CallBackURL (https://auth.example.com заменен на https://example.com), потому что у меня нет секретов TLS, сгенерированных для auth.example.com. Скорее у меня есть сертификаты TLS, сгенерированные для example.com, потому что этот домен принадлежит мне. Я получал ошибку в nginx-контроллере, что сертификат принадлежит example.com, а не auth.example.com, так как эти URL-адреса использовались для определения примера Ingress и входа прокси-сервера oauth, и это было основанием для меня, чтобы сделать до упомянул чан.
Мои Ingress выглядят так
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: oauth2-proxy
annotations:
kubernetes.io/tls-acme: "true"
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: oauth2-proxy
servicePort: 4180
path: /oauth2
tls:
- hosts:
- example.com
secretName: oauth-proxy-tls
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: oauth-main-ingress
annotations:
kubernetes.io/ingress.class: nginx
kubernetes.io/tls-acme: "true"
ingress.kubernetes.io/auth-url: https://example.com/oauth2/auth
ingress.kubernetes.io/auth-signin: https://example/oauth2/start?rd=https://$host$request_uri$is_args$args
spec:
rules:
- host: example.com
http:
paths:
- backend:
serviceName: example-service
servicePort: 80
path: /
tls:
- hosts:
- example.com
secretName: tls-secret
Я хочу, чтобы всякий раз, когда я нажимаю на example.com, он отображал страницу для аутентификации github, но в моем случае он напрямую давал ответ, который служба должна дать после успешной аутентификации. Меня не просят предоставить учетные данные. Кроме того, я получаю сообщение об ошибке в журналах входного контроллера как 7 controller.go:753] Error obtaining Endpoints for Service "default/oauth2-proxy": no object matching key "default/oauth2-proxy" in local store Кроме того, я попытался заменить с помощью nginx.ingress.kubernetes.io/auth-url: http://oauth2-proxy.oauth-proxy.svc.cluster.local:4180/oauth2/auth, как указано в ссылке, но у меня это не сработало. Может ли кто-нибудь объяснить, почему oauth2_proxy не запрашивает аутентификацию, а ingress обслуживает запросы напрямую, не запрашивая аутентификацию?
Аннотация, объявленная в yaml oauth-main-ingress, неверна. В соответствии с kubernetes/nginx-входная документация аннотация для внешний URL-адрес авторизации должна быть
nginx.ingress.kubernetes.io/auth-url: http://<oauth-service-url>
Вместо
ingress.kubernetes.io/auth-url: http://<oauth-service-url>