oauth2_proxy 不要求身份验证
oauth2_proxy not asking for authentication
我正在尝试在 kubernetes 上设置 oauth2_proxy 来保护我的一个单页应用程序,并且我正在使用 github 作为身份验证提供程序。我发现此 link 很有用,因此我按照此进行设置。
[https://alikhil.github.io/2018/05/oauth2-proxy-for-kubernetes-services/]
我在 github 上创建了一个应用程序并使用我的 DNS 名称代替 HomePageURL 和 CallBackURL (https://auth.example.com replaced with https://example.com),因为我没有为 auth.example.com 生成 TLS 机密。相反,我为 example.com 生成了 TLS 证书,因为该域属于我。我在 nginx-controller 中收到错误,证书属于 example.com 而不是 auth.example.com 因为这些 URL 已用于定义示例 Ingress 和 oauth 代理入口,这是我做的基础之前提到的chang。
我的 Ingresses 是这样的
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 进行替换,如 link 中所述,但它对我不起作用。有人可以解释为什么 oauth2_proxy 不要求身份验证而入口直接为请求提供服务而不要求身份验证吗?
oauth-main-ingress yaml 中声明的注释不正确。
根据 kubernetes/nginx-ingress documentation 外部 auth-url 的注释应该是
nginx.ingress.kubernetes.io/auth-url: http://<oauth-service-url>
而不是
ingress.kubernetes.io/auth-url: http://<oauth-service-url>
我正在尝试在 kubernetes 上设置 oauth2_proxy 来保护我的一个单页应用程序,并且我正在使用 github 作为身份验证提供程序。我发现此 link 很有用,因此我按照此进行设置。 [https://alikhil.github.io/2018/05/oauth2-proxy-for-kubernetes-services/]
我在 github 上创建了一个应用程序并使用我的 DNS 名称代替 HomePageURL 和 CallBackURL (https://auth.example.com replaced with https://example.com),因为我没有为 auth.example.com 生成 TLS 机密。相反,我为 example.com 生成了 TLS 证书,因为该域属于我。我在 nginx-controller 中收到错误,证书属于 example.com 而不是 auth.example.com 因为这些 URL 已用于定义示例 Ingress 和 oauth 代理入口,这是我做的基础之前提到的chang。
我的 Ingresses 是这样的
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 进行替换,如 link 中所述,但它对我不起作用。有人可以解释为什么 oauth2_proxy 不要求身份验证而入口直接为请求提供服务而不要求身份验证吗?
oauth-main-ingress yaml 中声明的注释不正确。 根据 kubernetes/nginx-ingress documentation 外部 auth-url 的注释应该是
nginx.ingress.kubernetes.io/auth-url: http://<oauth-service-url>
而不是
ingress.kubernetes.io/auth-url: http://<oauth-service-url>