nginx - Nginx 入口控制器身份验证不起作用
问题描述
我正在运行一个 gke 集群(v1.16.15gke.4300)并且 nginx 入口身份验证失败。下面的代码片段用于外部 oauth2 身份验证,但即使是基本身份验证也不起作用。似乎 nginx 完全忽略了这些注释。
带有 google api 的 oauth2 代理实际上工作正常,但 nginx 没有在他自己的配置中包含 auth 配置。我可以很容易地在 nginx 运行的 pod 上检查它。那里没有身份验证。
nginx入口控制器:
repoURL: 'https://helm.nginx.com/stable'
targetRevision: 0.6.1
version: nginx/1.19.2
受 oauth2 保护的入口服务的实时清单:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
ingress.kubernetes.io/auth-signin: https://oauth2.####.net/oauth2/start?rd=$escaped_request_uri
ingress.kubernetes.io/auth-url: https://oauth2.####.net/oauth2/auth
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":##########}
creationTimestamp: "####"
finalizers:
- networking.gke.io/ingress-finalizer-V2
generation: 1
labels:
argocd.argoproj.io/instance: k8s-default
name: dashboard-ingress
namespace: kubernetes-dashboard
resourceVersion: "22174124"
selfLink: /apis/extensions/v1beta1/namespaces/kubernetes-dashboard/ingresses/dashboard-ingress
uid: 34263f6b-6818-403f-####-4c6acb196c49
spec:
rules:
- host: dashboard.###.net
http:
paths:
- backend:
serviceName: kdashboard-kubernetes-dashboard
servicePort: 8080
path: /
tls:
- hosts:
- dashboard.###.net
secretName: reflect-certificate-secret-internal
status:
loadBalancer:
ingress:
- ip: ##.##.##.##
运行该服务时,我永远不会得到 403/401:
curl -I 'https://dashboard.###.net/'
HTTP/1.1 200 OK
Server: nginx/1.19.2
Date: Mon, 14 Dec 2020 19:50:05 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1272
Connection: keep-alive
Accept-Ranges: bytes
Cache-Control: no-store
Last-Modified: Mon, 22 Jun 2020 14:25:00 GMT
解决方案
编辑:
根据您提供的信息,您似乎使用的是Nginxinc 入口控制器,而不是NGINX 入口控制器,它们不一样。Nginxinc Ingress Controller 与kubernetes/ingress-nginx repo中的 NGINX Ingress 控制器不同,也与默认的GKE Ingress Controller不同。影响您的用例的主要区别是它们都使用不同的注释,并且这些注释只能由适当的控制器来满足。您可以在此处和此处找到上述内容之间的主要区别。
以下是一些有用的文档/指南:
外部 OAUTH 身份验证:
auth-url
和auth-signin
注释允许您使用外部身份验证提供程序来保护您的 Ingress 资源。使用 NGINX Ingress Controller 使用 OAuth2 保护您的网站:NGINX Ingress Controller 可以结合使用
oauth2_proxy
以启用许多 OAuth 提供程序,如 Google、GitHub 等。
总结一下:
推荐阅读
- javascript - 我在页面速度洞察(移动)中遇到 jquery.min.js 加载时间问题
- php - Maatwebsite\Excel\Sheet::mapArraybleRow()的返回值必须是数组类型,返回null
- python - 我正在尝试像 cmd 中的那样制作一个 ip pinger,但它不会工作
- django - WebRTC 本地和远程描述已设置,但未设置数据通道
- reactjs - TypeError: Object(...) is not a function in React when importing JSS file using material UI
- c# - 使用 C# 将数据从 SQL Server 迁移到 MongoDB 的更快方法
- createjs - 如何使用 createJs-1.0 为画布中加载的图像创建斜角效果
- c++ - 为什么双重否定会改变 C++ 概念的价值?
- flutter - Flutter:水平 ListView 中的 ChipList 选项
- php - 为什么箭头 < 会破坏这个正则表达式?