【发布时间】:2020-10-29 11:32:39
【问题描述】:
无法为 nginx 入口后面的 Web 应用程序设置外部身份验证。当我尝试从外部访问 URL https://site.example.com 时,我没有重定向到 Github 登录,而是直接访问 Web 应用程序。
为我的环境运行 Pod:
NAME READY STATUS
nginx-ingress-68df4dfc4f-wpj5t 1/1 Running
oauth2-proxy-6675d4b57c-cspw8 1/1 Running
web-deployment-7d4bd85b46-blxb8 1/1 Running
web-deployment-7d4bd85b46-nqjgl 1/1 Running
活动服务:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S)
nginx-ingress LoadBalancer 10.96.156.157 192.168.1.82 80:31613/TCP,443:32437/TCP
oauth2-proxy ClusterIP 10.100.101.251 <none> 4180/TCP
web-service ClusterIP 10.108.237.188 <none> 8080/TCP
两个 Ingress 资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: ingress
namespace: nginx-ingress
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/auth-url: "https://$host/oauth2/auth"
nginx.ingress.kubernetes.io/auth-signin: "https://$host/oauth2/start?rd=$request_uri"
labels:
app: webapp
spec:
rules:
- host: site.example.com
http:
paths:
- path: /
backend:
serviceName: web-service
servicePort: 8080
tls:
- hosts:
- site.example.com
secretName: example-tls
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: oauth2-proxy
namespace: nginx-ingress
annotations:
kubernetes.io/ingress.class: nginx
labels:
app: oauth2-proxy
spec:
rules:
- host: site.example.com
http:
paths:
- backend:
serviceName: oauth2-proxy
servicePort: 4180
path: /oauth2
tls:
- hosts:
- site.example.com
secretName: example-tls
入口输出:
NAME CLASS HOSTS ADDRESS PORTS
ingress <none> site.example.com 192.168.1.82 80, 443
oauth2-proxy <none> site.example.com 80, 443
我在 Ingress oauth2-proxy 事件中看到这些错误:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning Rejected 54m nginx-ingress-controller All hosts are taken by other resources
根据在我的 Github 帐户中创建的 OAuth 应用,从部署 here 构建的 Oauth2-proxy 具有客户端 ID、客户端密码和 SECRET。
在 oauth2-proxy 日志中找不到日志,我想是因为它没有在进程中调用。
更新:
这个问题不完整,我忘了提到使用的 NGINX 图像(来自installation guide 的 NGINX 1.9.0)。
用下面的改变图像:
NGINX Ingress controller
Release: v0.41.2
Build: d8a93551e6e5798fc4af3eb910cef62ecddc8938
Repository: https://github.com/kubernetes/ingress-nginx
nginx version: nginx/1.19.4
错误消失。简而言之,两种 Ingress 配置,我的问题中的一个和答案中的另一个都有效。
【问题讨论】:
-
基于外部 IP 它是您的本地环境。您使用的是
Kubeadm还是Minikube?它是一台机器,还是您有一些虚拟化软件,如VMVare或VirtualBox?您使用的是最新的 k8s 和 nginx-ingress-controller v0.9.0 还是greetr?你没用过Let's encrypt之类的其他应用吗? -
Kubeadm - Virtualbox - nginx-ingress:1.9.0 和最新的 k8s,我使用的是用 openssl 在本地签名的证书
-
Kubeadm v1.19.3,Master 和 2 worker 集群
标签: nginx kubernetes