如何通过OpenShift Ingress Controller实现nginx.ingress.kubernetes.io/auth-url功能?
OpenShift Ingress Controller 替代 NGINX Ingress auth-url 功能的实现方案
OpenShift 默认的 Ingress Controller(基于HAProxy)没有直接对应 NGINX Ingress 里 nginx.ingress.kubernetes.io/auth-url 的注解,但可以通过以下几种方式实现请求转发前的认证校验:
1. 使用 OAuth 代理侧车容器
这是 OpenShift 原生推荐的集成认证方式,给后端服务搭一个 OAuth 代理侧车,所有请求先过代理完成认证,再转发到主服务:
- 给服务部署添加
openshift/oauth-proxy镜像的容器,配置好认证参数(比如指定 OpenShift 作为认证提供商、上游服务地址、授权的服务账号/用户组)。 - 修改 Route,把流量指向代理容器的端口而非主服务端口。
示例配置片段:
containers: - name: oauth-proxy image: openshift/oauth-proxy:latest args: - --provider=openshift - --https-address=:8443 - --upstream=http://localhost:8080 - --openshift-service-account=your-service-account ports: - containerPort: 8443 name: oauth-proxy
2. 自定义 HAProxy 配置片段
OpenShift Ingress Controller 允许注入自定义 HAProxy 配置,你可以直接写 HAProxy 的认证逻辑:
- 编写包含认证跳转/校验的 HAProxy 配置片段,比如用
http-request redirect把未认证请求导向你的 auth-url,或者用http-request auth调用认证服务。 - 通过
IngressController资源的spec.tuningOptions.haproxyConfig字段把配置片段注入进去。
注意:这种配置会作用于整个 Ingress Controller 下的所有路由,要做好规则隔离,而且得熟悉 HAProxy 的语法。
3. 部署独立的 NGINX Ingress Controller
如果想完全复用原有 NGINX Ingress 的认证逻辑,直接在 OpenShift 集群内部署官方的 NGINX Ingress Controller 就行,这样就能正常使用 nginx.ingress.kubernetes.io/auth-url 注解,不用改原有配置习惯。
需要注意的是,要和 OpenShift 默认的 Ingress Controller 做好路由规则区分,避免流量冲突。
内容的提问来源于stack exchange,提问作者Optimus
相关产品推荐
相关产品推荐

